深入JDBC(一)

  1. 执行SQL语句的方式

    1.1. 使用executeUpdate执行DDL和DML语句

    • 执行DDL语句(主要用来处理数据库对象,包括create、drop、alter操作),返回0
    • 执行DML语句(主要用来处理数据表里的数据,包括insert、update和delete操作),返回受影响的行数

    1.2. 使用execute执行SQL语句

    • 不推荐使用此方法,一般只在不清楚SQL语句类型时使用
    • 返回值只能是boolean值,表明执行该SQL语句是否返回了ResultSet对象
    • ResultSet getResultSet() throws SQLException:获取执行SQL语句后得到的ResultSet对象
    • int getUpdateCount() throws SQLException:获取执行SQL语句所影响的记录行数

    1.3. 使用PreparedStatement执行SQL语句

    • 优点
      • 预编译SQL语句,性能好
      • 无须拼装SQL语句,编程简单
      • 防止SQL注入,安全性更好

    1.4. 使用CallableStatement调用存储过程

    • void setXxx(String parameterName, Xxx value) throws SQLException:为传入参数设值
    • void registerOutParameter(int parameterIndex, int sqlType) throws SQLException:为传出参数设值
    • xxx getXxx(int parameterIndex) throws SQLException:获取指定传出参数的值
  2. 管理结果集
    2.1. 可滚动、可更新的结果集

    • 以默认方式打开的结果集是不可更新的,如果希望创建可更新的结果集,必须在创建Statement或PreparedStatement时传入额外的参数
      • resultSetType:控制ResultSet的类型
        • ResultSet.TYPE_FORWARD_ONLY:该常量控制记录指针只能向前移动
        • ResultSet.TYPE_SCROLL_INSENSITIVE:该常量控制记录指针可以自由移动(可滚动结果集),但底层数据的改变不会影响ResultSet的内容。
        • ResultSet.TYPE_SCROLL_SENSITIVE:该常量控制记录指针可以自由移动(可滚动结果集),而且底层数据的改变会影响ResultSet的内容
      • resultSetConcurrency:控制ResultSet的并发类型
        • ResultSet.CONCUR_READ_ONLY:指示ResultSet是只读的并发模式(默认)
        • ResultSet.CONCUR_UPDATABLE:指示ResultSet是可更新的并发模式
    • 如果要创建可更新的结果集,查询语句查询的数据通常只能来自于一个数据表,而且查询结果集中的数据列必须包含主键列,否则将会引起更新失败

    2.2. 处理Blob类型数据

    • PreparedStatement.setBinaryStream(int parameterIndex, java.io.InputStream x, int length) throws SQLException:只能使用此方法来保存Blob类型的数据

    2.3. 使用ResultSetMetaData分析结果集

    • 通过ResultSet.getMetaData()方法来获取对应ResultSet的ResultSetMetaData对象
    • 常用方法
      • int getColumnCount() throws SQLException:返回该ResultSet的列数
      • String getColumnName(int column) throws SQLException:返回指定索引的列名
      • int getColumnType(int column) throws SQLException:返回指定索引的列类型
  3. 事务处理
    3.1. 事务的四大特性

    • 原子性
    • 一致性
    • 隔离性
    • 持续性

    3.2. 事务的组成

    • 一组DML语句
    • 一个DDL或者DCL语句,因为执行DDL和DCL语句都会导致事务立即提交,所以只能存在一个语句

    3.3. 事务的提交方式

    • 显示提交:使用commit
    • 自动提交:执行DDL或DCL语句,或者程序正常退出

    3.4. 事务的回滚方式

    • 显式回滚:使用rollback
    • 自动回滚:系统错误或强制退出

3.5. JDBC的事务支持

// 关闭自动提交,开启事务
conn.setAutoCommit(false);
/*
 * 执行一系列的SQL语句,获取结果
 */

// 提交事务
conn.commit();

3.6. 在事务中可以设置中间点,可在回滚时指定程序回滚到哪个中间点

3.7. 批量更新
- 批量更新必须得到底层数据库的支持,可以通过调用 DatabaseMetaData的supportsBatchUpdates方法来查看底层数据库是否支持批量更新
- 一个批量更新应该当成一个事务来处理,即如果批量更新中出现异常则要回滚
- 创建Statement对象,然后使用此对象的addBatch方法将多条SQL语句同时收集起来,最后调用Statement对象的executeBatch方法来执行,返回值为 int[]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值