即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

JAVA-21-JDBC讲解,Driver、Connection、Statement、PreparedStatement、CallableStatement、ResultSet

编程语言 qq_30718113 40℃ 0评论
本文目录
[隐藏]

1.一、JDBC简介

1.1 回顾


  之前操作mysql数据库时,①使用mysql客户端工具;②使用客户端连接mysql服务器;③发送sql语句到mysql服务器,执行。


1.2 什么是JDBC?


  使用java程序发送sql语句到数据库服务器端执行,这就用到了JDBC技术!jdbc是Oracle-Sun公司设计的一套专门用于java程序操作数据库的接口。


1.3 使用jdbc发送sql语句到数据库的条件,比如,连接mysql数据库我们需要:


    ①数据库主机


    ②端口


    ③数据库用户名


    ④数据库密码


    ⑤连接的数据库

2.二、JDBC的核心API

  (1)Driver接口: 数据库驱动程序的接口,所有具体数据库厂商需要的驱动程序需要实现此接口。


  方法:Connection connect(String url, Properties info) 用于获取数据库连接


案例:演示三种连接数据库的方式

package com.jdbc.a_driver;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class DriverDemo {
    private static String url = "jdbc:mysql://localhost:3306/day20";
    //jdbc协议:mysql协议://主机地址:端口号/需要连接的数据库名称
    private static String user = "root";
    private static String password="root";

    public static void main(String[] args) throws Exception {
        //conn1();
        //conn2();
        conn3();
    }

    //我们以后就使用这种方式获取数据库的连接对象
    private static void conn3() throws Exception {
        //注册驱动,我们发现mysql驱动程序的Driver实现类已经帮我们在静态代码块中注册好了驱动,
        //我们在此时只需要将Driver实现类加载到我们的内存中,static代码块就会自动执行,我们的驱动也就自动注册了
        //注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        //获取java连接数据库的对象
        Connection conn = DriverManager.getConnection(url, user, password);

        //打印这个连接对象
        System.out.println(conn);

    }


    private static void conn2() throws Exception {
        //使用驱动管理类,连管理我们的驱动程序,并获取连接
        //1.注册驱动
        //public static void registerDriver(Driver driver)throws SQLException
        Driver driver = new com.mysql.jdbc.Driver();
        DriverManager.registerDriver(driver);

        //获取连接
        //public static Connection getConnection(String url,String user,String password)throws SQLException
        Connection conn = DriverManager.getConnection(url, user, password);

        //打印这里数据库连接
        System.out.println(conn);
    }


    //直连
    private static void conn1() throws SQLException {
        //创建一个驱动类对象Driver
        Driver driver = new com.mysql.jdbc.Driver();
        //获取java连接数据库的连接
        //Connection connect(String url, Properties info)throws SQLException
        //创建一个properties集合
        Properties prop = new Properties();
        prop.setProperty("user", user);
        prop.setProperty("password", password);
        Connection conn = driver.connect(url, prop);
        //打印这个连接对象,如果连接对象不为空,就说明我们已经成功获取到了连接对象
        System.out.println(conn);
    }
}

注意:不同的数据库有不同的URL:

JDBC的URL=协议名+子协议名+数据源名。
a 协议名总是“jdbc”。
b 子协议名由JDBC驱动程序的编写者决定。
c 数据源名也可能包含用户与口令等信息;这些信息也可单独提供。
几种常见的数据库连接


-------------------------------oracle------------------
驱动:oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@machine_name:port:dbname
注:machine_name:数据库所在的机器的名称;
      port:端口号,默认是1521

-------------------------------mysql-------------------
驱动:com.mysql.jdbc.Driver
URL:jdbc:mysql://machine_name:port/dbname
注:machine_name:数据库所在的机器的名称;
      port:端口号,默认3306    

---------------------------SQL Server------------------
驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://<:port>;DatabaseName=
注:machine_name:数据库所在的机器的名称;
      port:端口号,默认是1433

--------------------------DB2--------------------------
驱动:com.ibm.db2.jdbc.app.DB2Driver
URL:jdbc:db2://<:port>/dbname
注:machine_name:数据库所在的机器的名称;
      port:端口号,默认是5000
-------------------------------------------------------

  (2)Connection接口:与具体的数据库的连接对象。


  方法:


    Statement createStatement() 创建一个静态sql语句对象


    PreparedStatement prepareStatement(String sql) 创建预编译的sql语句对象


    CallableStatement prepareCall(String sql) 创建存储过程的sql语句对象


  (3)用于执行 SQL 语句的接口


   ①Statement接口——用于执行静态 SQL 语句的接口


    方法:


      int executeUpdate(String sql) 执行更新操作的sql语句,即(create/alter/drop) DDL语句、(insert/update/delete)DML语句


      ResultSet executeQuery(String sql) 执行查询操作的sql语句,即(select)(DQL查询语句)


   ②PreparedStatement接口(是Statement的子接口)——用于执行预编译的 SQL 语句


    方法:


      int executeUpdate() 执行更新操作的sql语句


      ResultSet executeQuery() 执行查询操作的sql语句


   ③CallableStatement接口(是PreparedStatement的子接口):用于执行 SQL 存储过程的接口


    方法:


      ResultSet executeQuery() 执行存储过程的sql语句


  (4)ResultSet接口:结果集对象。 存储所有数据库查询的结果,用该对象进行数据遍历。


    方法:


      boolean next() : 把光标移动到下一行。如果下一行有数据,返回true,如果没有下一行数据,返回false。


      getXXX(列索引|列字段名称): 获取字段的数据

3.三、Statement接口练习

练习:创建表

package com.jdbc.b.statement;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo {
    private static String url = "jdbc:mysql://localhost:3306/day20";
    private static String user = "root";
    private static String password = "root";

    public static void main(String[] args){
        Connection conn = null;
        Statement stmt = null;
        try {
            //注册驱动
            Class.forName("com.mysql.jdbc.Driver");

            //通过驱动管理类获取数据库连接
            conn = DriverManager.getConnection(url, user, password);

            //创建语句执行者
            stmt = conn.createStatement();
            //int executeUpdate(String sql)
            //throws SQLException执行给定 SQL 语句,
            //该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。
            String sql = "CREATE TABLE student("+
                            "id INT,"+
                            "NAME VARCHAR(20),"+
                            "age INT"+
                            ");";

            //使用语句执行者执行创建的sql语句
            int count = stmt.executeUpdate(sql);

            //打印一下影响的结果
            System.out.println(count);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException();
        }finally{
            //释放资源
            if (conn!=null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if (stmt!=null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }   
        }   
    }
}

练习:增删改

package com.jdbc.b.statement;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

import com.jdbc.Util.JDBCUtil;

public class Demo2 {
    private static String url = "jdbc:mysql://localhost:3306/day20";
    private static String user = "root";
    private static String password = "root";

    public static void main(String[] args) {
        //testInsert();//给数据库添加一条记录
        //testUpdate();//修改数据库中的一条数据
        testDelete();
    }

    private static void testDelete() {

        //需求:将刘德华改为岳云鹏
        Connection conn = null;
        Statement stmt = null;

        try{
            //2.获取连接对象
            conn  =JDBCUtil.getConn();
            //3.准备sql
            String sql = "DELETE FROM student WHERE id=1;";
            //4.获取语句执行者
            stmt = conn.createStatement();
            //5.发送兵长执行sql
            int count = stmt.executeUpdate(sql);
            //打印影响的行数
            System.out.println(count);

        }catch(Exception e){
            e.printStackTrace();
            throw new RuntimeException();
        }finally{
            JDBCUtil.close(conn, stmt, null);
        }   
    }

    private static void testUpdate() {
        //需求:将刘德华改为岳云鹏
        Connection conn = null;
        Statement stmt = null;

        try{
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接对象
            conn  =DriverManager.getConnection(url, user, password);
            //3.准备sql
            String sql = "UPDATE student SET NAME='岳云鹏' WHERE id=1;";
            //4.获取语句执行者
            stmt = conn.createStatement();
            //5.发送并执行sql
            int count = stmt.executeUpdate(sql);
            //打印影响的行数
            System.out.println(count);

        }catch(Exception e){
            e.printStackTrace();
            throw new RuntimeException();
        }finally{
            if (conn!=null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if (stmt!=null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }   
    }

    private static void testInsert() {
        //专门测试添加功能
        Connection conn = null;
        Statement stmt = null;
        try{
            //注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //获取连接
            conn = DriverManager.getConnection(url, user, password);
            //定义sql
            String sql = "INSERT INTO student VALUES(1,'刘德华',50);";
            //获取语句执行者
            stmt = conn.createStatement();
            //使用语句执行者发送并执行sql语句,并返回影响的行数
            int count = stmt.executeUpdate(sql);
            System.out.println(count);

        }catch(Exception e){
            e.printStackTrace();
            throw new RuntimeException();
        }finally{
            //释放资源
            if (conn!=null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if (stmt!=null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }   
    }
}

练习:查询

package com.jdbc.b.statement;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.jdbc.Util.JDBCUtil;

public class Demo3 {

    public static void main(String[] args) {
        //定义一个连接对象和一个语句执行者
        Connection conn  =null;
        Statement stmt = null;
        ResultSet rs = null;
        try{
            conn = JDBCUtil.getConn();
            //定义sql
            String sql = "SELECT * FROM student;";
            //获取语句执行者对象
            stmt = conn.createStatement();
            //执行DQL查询语句
            //ResultSet executeQuery(String sql)
            //throws SQLException执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
            rs = stmt.executeQuery(sql);
            //ResultSet是一个结果集
            /*//判断有没有下一行数据
            if (rs.next()) {
                //说明有下一行数数据
                System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));
            }

            if (rs.next()) {
                //说明有下一行数数据
                System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));
            }

            if (rs.next()) {
                //说明有下一行数数据
                System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));
            }

            if (rs.next()) {
                //说明有下一行数数据
                System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));
            }

            if (rs.next()) {
                //说明有下一行数数据
                System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));
            }*/

            //使用while循环改进上面的代码,获取字段的数据(字段类型+列号)
/*          while (rs.next()) {
                System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));
            }*/

            //使用字段名称获取字段的每一个数据
            while (rs.next()) {
                //当我们使用字段名称去获取字段数据的时候,字段名称是不区分大小写
                System.out.println(rs.getInt("ID")+"--"+rs.getString("NAME")+"--"+rs.getInt("AGE"));
            }

        }catch(Exception e){
            e.printStackTrace();
        }finally{
            JDBCUtil.close(conn, stmt, rs);
        }
    }
}

发现有很多重复代码,可以创建一个工具类,需要时直接调用即可,如下:

package com.jdbc.Util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCUtil {
    private static String url = "jdbc:mysql://localhost:3306/day20";
    private static String user = "root";
    private static String password = "root";

    static{
        //随着类的加载而夹在
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    //获取连接
    public static Connection getConn(){
        //注册驱动
        try {
            Connection conn = DriverManager.getConnection(url, user, password);
            return conn;        
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw new RuntimeException();
        }

    }


    //释放资源
    public static void close(Connection conn,Statement stmt,ResultSet rs){
        if (conn!=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        if (stmt!=null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        if (rs!=null) {
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

总结


  通过Statement执行静态sql语句的步骤:


    ①准备 url、用户名、密码

    private static String url = "jdbc:mysql://localhost:3306/day20";
    private static String user = "root";
    private static String password = "root";

    ②注册驱动

Class.forName("com.mysql.jdbc.Driver");

    ③通过驱动管理类获取数据库连接

conn = DriverManager.getConnection(url, user, password);

    ④创建语句执行者

stmt = conn.createStatement();

    ⑤给出准备执行的sql语句

String sql = "DELETE FROM student WHERE id=1;";

    ⑥使用语句执行者执行创建的sql语句

int count = stmt.executeUpdate(sql);//用于DDL、DML
rs = stmt.executeQuery(sql);//用于DQL

    ⑦输出效果或获取结果


    ⑧释放资源

4.三、PreparedStatement接口练习

练习:增删改查

package com.jdbc.c_preparedstatement;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.jdbc.Util.JDBCUtil;

public class Demo {
    public static void main(String[] args) {
        //testInsert();
        //testUpdate();
        //testDelete();
        testSelect();
    }

    private static void testSelect() {
        Connection conn  =null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try{
            //获取连接
            conn  = JDBCUtil.getConn();
            //定义预编译sql
            String sql = "SELECT * FROM student WHERE id=?;";
            //获取预编译sql对象
            stmt = conn.prepareStatement(sql);
            //给问好赋值
            stmt.setInt(1, 3);
            //发送参数并执行sql语句
            //ResultSet executeQuery()throws SQLException在此 
            //PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。
            rs = stmt.executeQuery();
            //遍历结果集
            while (rs.next()) {
                System.out.println(rs.getInt("id")+"--"+rs.getString("name")+"--"+rs.getInt("age"));
            }

        }catch(Exception e){
            e.printStackTrace();
        }finally{
            JDBCUtil.close(conn, stmt, rs);
        }


    }

    private static void testDelete() {

        Connection conn  =null;
        PreparedStatement stmt = null;

        try{
            conn = JDBCUtil.getConn();
            //写一个参数化的sql
            String sql = "DELETE FROM student WHERE id=?;";
            //获取预编译的sql对象
            stmt = conn.prepareStatement(sql);
            //给?设置参数
            stmt.setInt(1, 2);
            //发送参数并执行sql
            int count = stmt.executeUpdate();
            System.out.println(count);
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            JDBCUtil.close(conn, stmt, null);
        }

    }

    private static void testUpdate() {
        Connection conn  =null;
        PreparedStatement stmt = null;

        try{
            conn = JDBCUtil.getConn();
            String sql = "UPDATE student SET NAME=? WHERE id=?;";
            //执行预编译sql
            stmt = conn.prepareStatement(sql);
            //给?赋值
            stmt.setString(1, "张学友");
            stmt.setInt(2, 5);
            //发送参数到数据库服务器,并执行sql,将执行结果返回
            int count = stmt.executeUpdate();
            System.out.println(count);
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            JDBCUtil.close(conn, stmt, null);
        }
    }

    private static void testInsert() {
        //定义连接对象和预编译sql对象
        Connection conn  = null;
        PreparedStatement stmt = null;

        try{
            //获取连接
            conn = JDBCUtil.getConn();
            //PreparedStatement prepareStatement(String sql)
            //throws SQLException创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
            String sql = "INSERT INTO student VALUES(?,?,?);";//参数化的sql,动态sql
            stmt = conn.prepareStatement(sql);//需要一个预编译的sequel语句,将sq发送到数据库端,检查sql语法及用户权限等信息

            //给之前参数化的sql语句设置参数
            //两个参数:1:是给第几个?设置数据    2:给?设置的数据
            stmt.setInt(1, 5);
            stmt.setString(2, "黎明");
            stmt.setInt(3, 60);
            //int executeUpdate()throws SQLException
            int count = stmt.executeUpdate();
            System.out.println(count);
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            //释放资源
            JDBCUtil.close(conn, stmt, null);
        }   
    }
}

总结:


  通过PreparedStatement执行预编译sql语句的步骤:


    ①准备 url、用户名、密码

    private static String url = "jdbc:mysql://localhost:3306/day20";
    private static String user = "root";
    private static String password = "root";

    ②注册驱动,获取连接

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, user, password);

    ③定义预编译sql

String sql = "SELECT * FROM student WHERE id=?;";

    ④获取预编译sql对象,并给值

stmt = conn.prepareStatement(sql);
stmt.setInt(1, 3);

    ⑤发送参数并执行sql语句

rs = stmt.executeQuery();

    ⑥遍历结果集

while (rs.next()) {
                System.out.println(rs.getInt("id")+"--"+rs.getString("name")+"--"+rs.getInt("age"));
            }

    ⑦释放资源


    


Statement和PreparedStatement的区别


  ①语法结构不同


    1)Statment执行静态sql语句,且sql可以拼接。


    2)PreparedStatement可以先执行预编译的sql语句,在预编译sql语句中使用?进行参数占位,后面 在进行参数赋值


  ②原理不同


    1)Statement不能进行sql缓存


    2)而PreparedStatement可以进行sql缓存,执行效率会比Statement快!!!


  ③安全性不同


    1)Statement存在sql注入的风险


    2)而PreparedStatement可以有效防止用户注入。

package com.jdbc.c_preparedstatement;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

import com.jdbc.Util.JDBCUtil;

public class Login {
    //SELECT * FROM USER WHERE userName='james' OR 1=1 -- ' AND PASSWORD='123456';
    //sql注入行为
    private static String user = "james' OR 1=1 -- ";
    private static String password = "123456";
    public static void main(String[] args) {
        //testStatement();
        testPreparedStatement();
    }

    private static void testPreparedStatement() {
        Connection conn  =null;
        PreparedStatement stmt = null;
        ResultSet rs = null;

        try{
            conn  =JDBCUtil.getConn();
            String sql = "SELECT * FROM USER WHERE userName=? AND PASSWORD=?;";
            stmt = conn.prepareStatement(sql);
            //给问号设置参数
            stmt.setString(1, user);
            stmt.setString(2, password);
            //发送参数并执行sql
            rs = stmt.executeQuery();
            if (rs.next()) {
                System.out.println("登陆成功");
            }else {
                System.out.println("登录失败");
            }

        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            JDBCUtil.close(conn, stmt, rs);
        }
    }

    private static void testStatement() {
        Connection conn  =null;
        Statement stmt = null;
        ResultSet rs = null;
        try{
            conn = JDBCUtil.getConn();
            stmt = conn.createStatement();
            String sql  ="SELECT * FROM USER WHERE userName='"+user+"' AND PASSWORD='"+password+"';";
            rs = stmt.executeQuery(sql);
            if (rs.next()) {
                System.out.println("登陆成功");
            }else {
                System.out.println("登录失败");
            }

        }catch(Exception e){
            e.printStackTrace();
        }finally{
            JDBCUtil.close(conn, stmt, rs);
        }
    }
}

5.四、CallableStatement接口练习

练习:执行带有输入参数的存储过程,带有输出参数的存储过程

package com.jdbc.d_callablestatement;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;

import com.jdbc.Util.JDBCUtil;

public class Demo {
    public static void main(String[] args) {
        //执行带有输入参数存储过程
        //testIn();
        //执行带有输出参数的存储过程
        testOut();
    }

    private static void testOut() {

        Connection conn  =null;
        CallableStatement stmt = null;
        ResultSet rs = null;
        try{
            conn = JDBCUtil.getConn();
            String sql = "CALL pro_QueryNameById(?,?);";
            stmt = conn.prepareCall(sql);
            //给问号赋值
            stmt.setInt(1, 2);
            //如果存储过程带有输出参数的时候,首先需要注册,输出参数的类型
            //void registerOutParameter(int parameterIndex,int sqlType)
            stmt.registerOutParameter(2, java.sql.Types.VARCHAR);

            //发送参数并执行sql
            stmt.executeQuery();

            //从stmt中取出输出参数的结果
            System.out.println(stmt.getString(2));

        }catch(Exception e){
            e.printStackTrace();
        }finally{
            //释放资源
            JDBCUtil.close(conn, stmt, rs);
        }
    }

    private static void testIn() {
        Connection conn  =null;
        CallableStatement stmt = null;
        ResultSet rs = null;
        try{
            conn = JDBCUtil.getConn();
            String sql = "CALL pro_QueryById(?);";
            stmt = conn.prepareCall(sql);

            //给问号设置值
            stmt.setInt(1, 2);
            //发送参数并执行sql,只能调用excuteQuery()
            rs = stmt.executeQuery();
            if (rs.next()) {
                System.out.println(rs.getInt(1)+"--"+rs.getString(2));
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            //释放资源
            JDBCUtil.close(conn, stmt, rs);
        }   
    }
}

总结:


  通过CallableStatement执行sql存储过程的步骤:


    ①准备 url、用户名、密码

    private static String url = "jdbc:mysql://localhost:3306/day20";
    private static String user = "root";
    private static String password = "root";

    ②注册驱动,获取连接

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, user, password);

    ③定义sql存储过程

String sql = "CALL pro_QueryById(?);";

    ④向数据库传递sql存储过程,并设置参数值

stmt = conn.prepareStatement(sql);
stmt.setInt(1, 3);

    ⑤如果存储过程带有输出参数,首先需要注册,输出参数的类型

stmt.registerOutParameter(2, java.sql.Types.VARCHAR);

    ⑥发送参数并执行sql,只能调用excuteQuery()

rs = stmt.executeQuery();

    ⑦获取效果或者输出值

//获取效果,打印值
while (rs.next()) {
                System.out.println(rs.getInt(1)+"--"+rs.getString(2));
            }


// 从stmt中取出输出参数的结果
System.out.println(stmt.getString(2));

转载请注明:CodingBlog » JAVA-21-JDBC讲解,Driver、Connection、Statement、PreparedStatement、CallableStatement、ResultSet

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情