13.3 JDBC的典型用法 13.3.1 JDBC4.2常用接口和类简介

13.3 JDBC的典型用法

13.3.1 JDBC4.2常用接口和类简介

Java 8支持JDBC4.2标准,JDBC4.2在原有JDBC标准上增加了一些新特性。下面介绍这些JDBC API时会提到Java 8新增的功能.

DriverManager

DriverManager:用于管理JDBC驱动的服务类。程序中使用该类的主要功能是获取Connection对象,该类包含如下方法。

  • public static synchronized Connection getConnection(String url, String user, String pass) throws SQLException:该方法可以获得url对应数据库的连接。

Connection

Connection:代表数据库连接对象,每个Connection代表一个物理连接会话。要想访问数据库必须先获得数据库连接。该接口的常用方法如下。

1.获取Statement对象的方法

方法 描述
Statement createStatement() throws SQLExcetpion 该方法返回一个Statement对象。
PreparedStatement prepareStatement(String sql) throws SQLExcetpion 该方法返回预编译的Statement对象,即将SQL语句提交到数据库进行预编译。
CallableStatement prepareCall(String sql) throws SQLExcetpion 该方法返回CallableStatement对象,该对象用于调用存储过程。

上面三个方法都返回用于执行SQL语句的Statement对象, PreparedStatementCallableStatementStatement的子类,只有获得了Statement之后才可执行SQL语句。

除此之外, Connection还有如下几个用于控制事务的方法。

2.控制事务的方法

方法 描述
Savepoint setSavepoint() 创建一个保存点。
Savepoint setSavepoint(String name) 以指定名字来创建一个保存点
void setTransactionIsolation(int level) 设置事务的隔离级别。
void rollback() 回滚事务。
void rollback(Savepoint savepoint) 将事务回滚到指定的保存点。
void setAutoCommit(boolean autoCommit) 关闭自动提交,打开事务。
void commit() 提交事务。

3.Java 7中Connection新增方法

Java 7Connection新增了setSchema(String schema)getSchema()两个方法,这两个方法用于控制该Connection访问的数据库Schema
Java 7还为Connection新增了setNetworkTimeou(Executor executor,int milliseconds)getNetworkTimeout()两个方法来控制数据库连接的超时行为。

Statement

Statement:用于执行SQL语句的工具接口。该对象既可用于执行DDLDCL语句,也可用于执行DML语句,还可用于执行SQL查询。当执行SQL査询时,返回查询到的结果集。它的常用方法如下。

方法 描述
ResultSet executeQuery(String sql) throws SQLException 该方法用于执行查询语句,并返回查询结果对应的 ResultSet对象。该方法只能用于执行查询语句.
int executeUpdate(String sql) ) throws SQLExcetion 该方法用于执行DML语句,并返回受影响的行数;该方法也可用于执行DDL语句,执行DDL语句将返回0。
boolean execute(String sql) ) throws SQLException 该方法可执行任何SQL语句。如果执行后第一个结果为 ResultSet对象,则返回true;如果执行后第一个结果为受影响的行数或没有任何结果,则返回 false

Java 7新增方法

Java 7Statement新增了closeOnCompletion()方法,如果Statement执行了该方法,则当所有依赖于该StatementResultSet关闭时,该Statement会自动关闭。
Java7还为Statement提供了一个isCloseOnCompletion()方法,该方法用于判断该Statement是否打开了” closeOn Completion“功能。

Java 8新增方法

Java 8Statement新增了多个重载的executeLargeUpdate()方法,这些方法相当于增强版的executeUpdate()方法,返回值类型为long——也就是说,当DML语句影响的记录条数超过Integer.MAX_VALUE时,就应该使用executeLargeUpdate()方法.

PreparedStatement

PreparedStatement:预编译的Statement对象。 PreparedStatementStatement的子接口,它允许数据库预编译SQL语句(这些SQL语句通常带有参数),以后每次只改变SQL命令的参数,避免数据库每次都需要编译SQL语句,因此性能更好。相对于Statement而言,使用PreparedStatement执行SQL语句时,无须再传入SQL语句,只要为预编译的SQL语句传入参数值即可。所以它比Statement多了如下方法:

  • void setXxx(int parameterIndex,Xxx value):该方法根据传入参数值的类型不同,需要使用不同的方法。传入的值根据索引传给SQL语句中指定位置的参数。

注意
PreparedStatement同样有executeUpdate()executeQuery()execute()三个方法,只是这三个方法无须接收SQL字符串,因为PreparedStatement对象已经预编译了SQL命令,只要为这些命令传入参数即可。

Java 8还为PreparedStatement增加了不带参数的executeLargeUpdate()方法—执行DML语句影响的记录条数可能超过Integer.MAX_VALUE时,就应该使用executeLargeUpdate()方法。

ResultSet

ResultSet:结果集对象。该对象包含访问查询结果的方法, ResultSet可以通过列索引或列名获得列数据。它包含了如下常用方法来移动记录指针。

方法 描述
void close() 释放ResultSet对象。
boolean absolute(int row) 将结果集的记录指针移动到第row行,如果row是负数,则移动到倒数第row行。如果移动后的记录指针指向一条有效记录,则该方法返回true
void beforeFirst() ResultSet的记录指针定位到首行之前,这是ResultSet结果集记录指针的初始状态(记录指针的起始位置位于第一行之前)
boolean previous() ResultSet的记录指针定位到上一行。如果移动后的记录指针指向一条有效记录,则该方法返回true
boolean next() ResultSet的记录指针定位到下一行,如果移动后的记录指针指向一条有效记录,则该方法返回true
boolean last() ResultSet的记录指针定位到最后一行,如果移动后的记录指针指向一条有效记录,则该方法返回true
void afterLast() ResultSet的记录指针定位到最后一行之后

支持的Java版本

JDK1.4以前,采用默认方法创建的Statement所查询得到的ResultSet不支持absolute()previous()等移动记录指针的方法,它只支持next()这个移动记录指针的方法,即ResultSet的记录指针只能向下移动,而且每次只能移动一格。
Java5.0以后就避免了这个问题,程序采用默认方法创建的Statement所查询得到的ResultSet也支持absoluteprevious等方法

当把记录指针移动到指定行之后, ResultSet可通过getXxx(int columnIndex)getXx(Stringcolumn Label)方法来获取当前行、指定列的值,前者根据列索引获取值,后者根据列名获取值。

Java 7新增了<T> T getObject(int columnIndex, Class<T> type)
<T> T getObject(String columnLabel,Class<T>type)两个泛型方法,它们可以获取任意类型的值