JDBC——statement

1概述

JDBC Statement,CallableStatement和PreparedStatement接口定义了可用于发送SQL或者PL/SQL命令,并从数据库接收数据的方法和属性。

接口 使用场景 是否可以接收参数
Statement 用于对数据库进行通用访问,在运行时使用静态SQL语句时很有用。 不能接受参数。
PreparedStatement 当计划要多次使用SQL语句时使用。 在运行时接受输入参数。
CallableStatement 当想要访问数据库存储过程时使用。 可以接受运行时输入参数。

2 statement

使用方法

  • 创建一个Statement对象
  • 执行语句
  • 关闭statement对象

2.1 执行语句

  • boolean execute (String SQL) : 如果可以检索到ResultSet对象,则返回一个布尔值true; 否则返回false。可以用于执行SQL DDL语句或需要使用真正的动态SQL。
  • int executeUpdate (String SQL): 返回受SQL语句执行影响的行数。使用此方法执行预期会影响多行的SQL语句,例如:INSERT,UPDATE或DELETE语句。
  • ResultSet executeQuery(String SQL):返回一个ResultSet对象。例如:SELECT语句

2.2 demo

@Test
    public void  demo(){
        Connection connection =null;
        PreparedStatement preparedStatement =null;
        Statement statement =null;
        ResultSet resultSet =null;
        try {
            // 1.加载数据库驱动
            Class.forName(DRIVER);
            // 2.通过驱动管理获取数据库连接
            connection= DriverManager.getConnection(URL,USER,PASSWORD);

            String sql = "SELECT id,username FROM user";
            String ddl = "CREATE TABLE Test (no1 varchar(40), no2 int(10))";
            // 3.获取statement对象
            statement = connection.createStatement();
            // 4. 执行语句
            boolean b = statement.execute(ddl);
            resultSet = statement.executeQuery(sql);
            System.out.println(b);
			   // 5 处理结果集
            while (resultSet.next()){
                String id = resultSet.getString("id");
                String username= resultSet.getString("username");
                System.out.println("id: "+id+" username: "+username);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            // 6 释放资源
            if (resultSet!=null){
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (statement!=null){
                try {
	              statement.close();
	           } catch (SQLException e) {
	               e.printStackTrace();
	           }
            }
            if (connection!=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

3 prepareStatement

PreparedStatement接口扩展了Statement接口,它添加了比Statement对象更好一些优点的功能。可以动态提供/接收参数。

  • JDBC中的所有参数都是由“?”符号作为占位符,这被称之为参数标记。在执行SQL语句之前,必须为每个参数(占位符)提供值。
  • setXXX(int parameterIndex ,XXX x)将值绑定到参数中,parameterIndex表示参数的位置,从1开始。XXX表示要绑定到输入参数的值的Java数据类型。
  • 所有Statement对象与数据库交互的方法,如execute(),executeQuery()和executeUpdate()也可以用于PreparedStatement对象。但是这些方法被修改为可以使用输入参数的SQL语句。

4 CallableStatement

用于执行对数据库存储过程的调用
存储过程

  • 如果有IN参数,只需要遵循适用于PreparedStatement对象的相同规则和技术,使用与绑定的Java数据类型对应的setXXX()方法。
  • 使用OUT和INOUT参数时,必须使用一个额外的CallableStatement对象方法registerOutParameter()。registerOutParameter()方法将JDBC数据类型绑定到存储过程中并返回预期数据类型。
  • 当调用存储过程时,可以使用适当的getXXX()方法从OUT参数中检索该值。此方法将检索到的SQL类型的值转换成对应的Java数据类型。

猜你喜欢

转载自blog.csdn.net/ccoran/article/details/84964534
今日推荐