jdbc中的细节

时间:2021-07-09 13:14:28

JDBC 架构:
JDBC 的 API 支持两层和三层处理模式进行数据库的访问,但是一般的JDBC架构由两层处理模式组成。
(1)JDBC API:提供了应用程序对 JDBC 管理器的连接
(2)JDBC Driver API:提供了 JDBC 管理器对驱动程序连接

结构图见 jdbc结构图.png

jdbc中的细节

JDBC 的 API 提供了以下接口和类:
DriverManager :这个类管理一系列数据库驱动程序。匹配连接使用通信子协议从 JAVA 应用程序中请求合适的数据库驱动程序。
识别 JDBC 下某个子协议的第一驱动程序将被用于建立数据库连接。

Driver : 这个接口处理与数据库服务器的通信。你将很少直接与驱动程序互动。
相反,你使用 DriverManager 中的对象,它管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息。

Connection : 此接口具有接触数据库的所有方法。该连接对象表示通信上下文,即,所有与数据库的通信仅通过这个连接对象进行。

Statement : 使用创建于这个接口的对象将 SQL 语句提交到数据库。除了执行存储过程以外,一些派生的接口也接受参数。

ResultSet : 在你使用语句对象执行 SQL 查询后,这些对象保存从数据获得的数据。它作为一个迭代器,让您可以通过它的数据来移动。

SQLException : 这个类处理发生在数据库应用程序的任何错误。

创建 JDBC 应用程序的步骤:
1.导入数据包
2.注册 JDBC 驱动器(包括获取驱动,注册驱动(各大厂商已实现))
3.通过驱动管理器获取连接
4.执行查询
5.提取结果数据
6.清理环境

常用的 JDBC 驱动名和数据库 URL:

RDBMS JDBC 驱动程序名称 URL 格式
MySQL com.mysql.jdbc.Driver jdbc:mysql://hostname/ databaseName
ORACLE oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@hostname:port Number:databaseName
DB2 COM.ibm.db2.jdbc.net.DB2Driver jdbc:db2:hostname:port Number/databaseName
Sybase com.sybase.jdbc.SybDriver jdbc:sybase:Tds:hostname: port Number/databaseName

Statement 对象:
创建了数据库连接,就可以与数据库进行交互。
JDBC 的 Statement,CallableStatement 和 PreparedStatement 接口定义的方法和属性,可以让你发送 SQL 命令或 PL/SQL 命令到数据库,并从你的数据库接收数据。

接口 推荐使用
Statement 可以正常访问数据库,适用于运行静态 SQL 语句。 Statement 接口不接受参数。
PreparedStatement 计划多次使用 SQL 语句, PreparedStatement 接口运行时接受输入的参数。
CallableStatement 适用于当你要访问数据库存储过程的时候, CallableStatement 接口运行时也接受输入的参数。

Java数据类型、JDBC数据类型、Sql数据类型
JDBC驱动程序在将 Java数据类型发送的数据库之前,首先会转换为JDBC类型,然后JDBC类型转换为数据库数据类型。
当通过调用 PreparedStatement 的 setXxx()方法时,Java 数据类型会转换为默认的 Jdbc数据类型。

Java SqlDateTime:
Java Date: JanuaryTue Aug 18 13:46:02 GMT+04:00 2009
Sql Date: January 1, 2003
Sql Time: 2:00pm
Sql Timestamp: January 1, 2003 2:00pm

默认情况下,JDBC连接处于自动提交模式。
但是有三个原因你想关掉自动提交模式,管理自己的事务:
为了提高性能
为了保持业务流程的完整性
使用分布式事务

若要使用手动事务模式,使用 Connection 对象的 SetAutoCommit(false) 方法。
提交:conn.commit()。
回滚:conn.rollback()。

回滚还原点:
通过setSavepoint(String savepointName) 来设置一个还原点,通过conn.rollback(savepointName) 来回滚到对应还原点。
删除还原点:
通过 releaseSavepoint(Savepoint savepointName) 来删除一个还原点。

批处理:
将关联的Sql 语句组合成一个批处理,并将它们当成一个调用提交给数据库。减少了通信资源的消耗,提高了性能。
Statement、PreparedStatement、CallableStatement的addBatch() 方法用于添加单个语句(可以是不同的语句)到批处理。
executeBatch() 方法用于启动执行所有组合到一起的语句。返回一个整数数组,数组中每个元素代表了各自的更新语句的更新数目。

批处理和 Statement 对象
使用 createStatement() 方法创建一个 Statement 对象。
使用 setAutoCommit() 方法将自动提交设为 false。
被创建的 Statement 对象可以使用 addBatch() 方法来添加你想要的所有SQL语句。
被创建的 Statement 对象可以用 executeBatch() 将所有的 SQL 语句执行。
最后,使用 commit() 方法提交所有的更改。

批处理和 PrepareStatement 对象
使用占位符创建 SQL 语句。
使用任一 prepareStatement() 方法创建 prepareStatement 对象。
使用 setAutoCommit() 方法将自动提交设为 false。
被创建的 Statement 对象可以使用 addBatch() 方法来添加你想要的所有 SQL 语句。
被创建的 Statement 对象可以用 executeBatch() 将所有的 SQL 语句执行。
最后,使用 commit() 方法提交所有的更改。