深入JDBC(一)

来源:互联网 发布:网络终端 编辑:程序博客网 时间:2024/05/22 04:54
  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
原创粉丝点击