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();
                }
            }
        }
    }

2.3 批处理

批量处理允许将相关的SQL语句分组到批处理中,并通过对数据库的一次调用来提交它们,一次执行完成与数据库之间的交互。

  • 不需要JDBC驱动程序来支持此功能。应该使用DatabaseMetaData.supportBatchUpdates()方法来确定目标数据库是否支持批量更新处理,如果JDBC驱动程序支持该功能,该方法返回true。
  • Statement,PreparedStatement和CallableStatement的addBatch()方法用于将单个语句添加到批处理中。executeBatch()用于执行组成批量的所有语句。
  • executeBatch()返回一个整数数组,数组的每个元素表示相应更新语句的更新计数。
  • 就像将批处理语句添加到处理中一样,可以使用clearBatch()方法来删除它们。此方法将删除所有使用addBatch()方法添加的语句。但是,无法指定选择某个要删除的语句。
Statement stmt = conn.createStatement();
// 1.开启事物
conn.setAutoCommit(false);
// 2 添加批处理SQL
stmt.addBatch(SQL);
// 3.执行
int[] count = stmt.executeBatch();
//4.提交事物
conn.commit();

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数据类型。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值