Java基础回顾 —JDBC

  1. JDBC的操作步骤:

    • 加载数据库驱动程序:各个数据库都会提供自己实现的JDBC的jar包,将jar包配置到classpath路径即可。
    • 连接数据库:根据各个数据库的不同,连接地址也不同,由各厂商提供。取得连接之后才能对数据库进行查询或更新操作。
    • 使用SQL语句进行数据库操作。
    • 关闭数据库连接:数据库操作完毕之后需要关闭连接以释放资源。
  2. Class.forname(DRIVER)怎么来加载驱动程序:
    例如MySQL实现Driver类的时候,使用static代码块调用DriverManager.registerDriver(new Driver)实现驱动注册的。

     static {
         try {
             java.sql.DriverManager.registerDriver(new Driver());
         } catch (SQLException E) {
             throw new RuntimeException("Can't register driver!");
         }
     }
    
  3. 数据库资源非常有限,所以操作完数据库之后必须关闭,否则程序会产生无法连接数据库的异常。
    tips: 数据库中操作都存在关闭方法,连接有关闭、操作有关闭,一般来说连接只要一关闭,则其他所有操作都会关闭。但是开发中一般都会按顺序关闭:即先打开的后关闭。

  4. 数据库的操作接口Statement以及PreparedStatement。
    一般来说都是使用PreparedStatement,可以 避免安全问题,且PreparedStatement对象已预编译过,所以执行速度要高于Statement对象,所有对于需多次执行的SQL可以提高效率。

  5. 大数据对象CLOB和BLOB。
    CLOB中可以存储海量文字;BLOB中可以存储二进制数据,如图片、电影等。
    程序中国对于处理大对象需要使用PreparedStatement完成,所有的内容需要通过IO流的方式从大文本字段中保存和读取。
    写入:
    PreparedStatement.setAsciiStream( … ) — 用来写入大文本CLOB字段
    PreparedStatement.setBinaryStream( … ) — 用来写入二进制BLOB字段
    读取:
    ResultSet.getAsciiStream( … ) — 用来读取大文本
    ResultSet.getClob( … ) — 用来读取大文本
    ResultSet.getBinaryStream( … ) — 用来读取二进制数据
    ResultSet.getBlob( … ) — 用来读取二进制数据

  6. 事务处理。
    所谓的事务就是所有的操作 要么一起成功要么一起失败。
    事务本身具有 原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability

    • 原子性:事务的最小单元,是不可分割的单元,相当于一个个小的数据库操作,这些操作必须同时完成。

    • 一致性:数据库操作的前后都是完全一致的,保证数据的有效性。如果事务成功,则系统会维持有效性;如果事务出现错误,则回到最原始的状v态,也要维持其有效性。

    • 隔离性:多个事务可以同时进行且彼此间无法访问,只有当事务完成最终操作时,才能看到结果。

    • 持久性:当一个系统发生崩溃时,一个事务仍然可坚持提交,当一个事务完成后,操作结果保存在磁盘中,永远不会被回滚。

        connection.setAutoCommit(false) — 取消Connection中设置的自动提交方式
        connection.commit() — 如果批处理操作成功,则执行提交事务
        connection.rollback() — 如果操作失败发生异常,则在异常中让事务回滚
      

tips: JDBC的事务局限于一个数据库连接,不能跨数据库。默认情况下,JDBC的事务是在一个Statement结束之后提交。
7. 事务隔离机制(主要由数据库系统通过数据读取锁和数据写入锁控制的,所以对应用性能会有影响):
- 读未提交 Read Uncommitted:级别最低,很少使用。
- 读已提交 Read Committed:大多数数据库的默认级别,这个级别一个select语句能够查看到查询开始之前提交的数据,而永远无法看到未提交的数据,或者查询执行时其他事物提交的改变。很好的阻止了事物在事物中任何给定的点看到应用程序数据不一样的结果。
- 可重复的读 Repeatable Read:事物之间有较高级别的一致性。
- 可串行化 Serializable:最严格的事物管理,可模拟串行事务执行,
8. 并发事务常见错误:
- 脏数据读取dirty reads:一个事务读取了另一个未提交并行事物写的数据。
- 不可重复的数据读取no-repeatable reads:一个事务重新读取前面已读取过的数据,发现该数据已经被另一个已提交的事务修改过。
- 错误数据读取phantom read:一个事务重新执行一个查询,发现结果行中插入了被其他已提交事务提交的行。

原文地址:https://www.cnblogs.com/nextStep/p/6693352.html