14.6 批处理
批处理也是一个为了减轻开发员负担的设计,它不再需要开发员一次次进行类似的工作。它让所有相类似的工作一起干完,逐个处理的工作由后台来完成。
14.6.1 批处理规范
JDBC升级到2.0后增强了Statement接口,使它能够以批处理方式执行更新操作。批处理操作指的是一次可以提交多句更新语句,这些更新语句一起执行。批处理相对逐句提交,使性能大幅度提高。它的具体方法步骤如下:
con.setAutoCommit(false); |
14.6.2 批处理举例
看下面的程序,在程序中进一步学习批处理:
//引入SQL包
import java.sql.*;
public class Batch
{
public static void main(String args[])
{
try
{
//加载驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//打开数据库连接,aaa为数据源名称
Connection con =DriverManager.getConnection("jdbc:odbc:aaa","","");
//进行批处理
con.setAutoCommit(false);
Statement st=con.createStatement();
//插入3条语句
st.addBatch("insert into emp
values('0002','lucy','analyst','
1-5月-2005',3500)");
st.addBatch("insert into emp
values('0011','tom','clerk','
18-3月-2007',1000)");
st.addBatch("insert into emp
values('0007','wangqiang','
analyst','12-12月-2006',2800)");
st.executeBatch();
con.commit();
//恢复autoCommit设置
con.setAutoCommit(true);
//关闭Statement对象
st.close();
//关闭Connection对象
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
14.7 结果集处理
在前面的实例程序中,都是假设结果集是只读的。在本节中,将学习如何对结果集进行处理。对结果集处理分为可滚动的和可更新的。可滚动是指显示的结果集的游标所在行既可以向前移又可以向后移,也可以移动到指定的特定行;可更新是指允许客户程序对结果集中的数据进行修改。
14.7.1 可滚动结果集
JDBC驱动程序是否支持可滚动的结果集是由DatabaseMetaData对象决定的。DatabaseMetaData接口中定义了一个 supportsResultSetType(int type)方法,它的返回结果为boolean型,说明驱动程序所支持的结果类型。在实际的程序开发中,并不用DatabaseMetaData进行开 发,而是用Statement直接指定。如下面的程序代码:
Statement st=con.createStatement(type,concurrency); |
其中type也就是上面提到的那个type,它有3种类型。
TYPE_FORWARD_ONLY:结果集游标只能向前移动。
TYPE_SCROLL_INSENSITIVE:可滚动,对数据变化不敏感。
TYPE_SCROLL_SENSITIVE:可滚动,对数据变化敏感。
对结果集进行操作就是对结果集的游标进行操作,其中定义了很多的方法。
absolute(int row):把游标移至给定的行。
afterLast():把游标移动到最后一行后面。
beforeFirst():把游标移动到第1行前面。
isAfterLast():判断游标是否在最后一行后面。
isBeforeFirst():判断游标是否在第1行前面。
first():把游标移动到第1行。
last():把游标移动到最后一行。
isFirst():判断游标是否在第1行。
isLast():判断游标是否在最后一行。
previous():把游标移动到所在行的前一行。
next():把游标移动到所在行的后一行。
relative():把游标相对移动几行。
getRow():获取当前行数。
看下面的应用程序:
//引入SQL包 |
在本程序中,用到了一些方法,读者也可以把其他的方法都用一下。
14.7.2 可更新结果集
在ResultSet类中,用getConcurrency方法来确定结果集是否为可更新的。ResultSet接口中有很多的更新方法,介绍如下。
updateBoolean():用布尔类型的值更新指定的列。
updateByte():用字节值更新指定的列。
updateBytes():用字节数组值更新指定的列。
updateCharacterStream():用字符流的值更新指定的列。
updateDate():用date值更新指定的列。
updateDouble():用double类型的值更新指定的列。
updateFloat():用float类型的值更新指定的列。
updateInt():用int类型的值更新指定的列。
updateLong():用long类型的值更新指定的列。
updateNull():给可为null的列null值。
updateObject():用object值更新指定的列。
updateRow():用resultset对象的新内容更新。
updateShort():用short类型的值更新指定的列。
updateString():用字符串类型的值更新指定的列。
updateTime():用time值更新指定的列。
可更新结果集的程序和可滚动的结果集程序很相似,但是可更新的结果集远没有可滚动结果集重要,这里就不给出可更新结果集的代码了。