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对象, PreparedStatement、 CallableStatement是Statement的子类,只有获得了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 7为Connection新增了setSchema(String schema)、 getSchema()两个方法,这两个方法用于控制该Connection访问的数据库SchemaJava 7还为Connection新增了setNetworkTimeou(Executor executor,int milliseconds)、 getNetworkTimeout()两个方法来控制数据库连接的超时行为。
Statement
Statement:用于执行SQL语句的工具接口。该对象既可用于执行DDL、DCL语句,也可用于执行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 7为Statement新增了closeOnCompletion()方法,如果Statement执行了该方法,则当所有依赖于该Statement的ResultSet关闭时,该Statement会自动关闭。Java7还为Statement提供了一个isCloseOnCompletion()方法,该方法用于判断该Statement是否打开了” closeOn Completion“功能。
Java 8新增方法
Java 8为Statement新增了多个重载的executeLargeUpdate()方法,这些方法相当于增强版的executeUpdate()方法,返回值类型为long——也就是说,当DML语句影响的记录条数超过Integer.MAX_VALUE时,就应该使用executeLargeUpdate()方法.
PreparedStatement
PreparedStatement:预编译的Statement对象。 PreparedStatement是Statement的子接口,它允许数据库预编译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也支持absolute、previous等方法
当把记录指针移动到指定行之后, 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)两个泛型方法,它们可以获取任意类型的值