可滚动、可更新的结果集(转)

时间:2021-02-06 12:06:13

 

 

14.6  批处理

批处理也是一个为了减轻开发员负担的设计,它不再需要开发员一次次进行类似的工作。它让所有相类似的工作一起干完,逐个处理的工作由后台来完成。

14.6.1  批处理规范

JDBC升级到2.0后增强了Statement接口,使它能够以批处理方式执行更新操作。批处理操作指的是一次可以提交多句更新语句,这些更新语句一起执行。批处理相对逐句提交,使性能大幅度提高。它的具体方法步骤如下:

con.setAutoCommit(false);
Statement st = con.createStatement( );
st.addBatch(insert int ……);
st.addBatch(insert int ……);
st.addBatch(insert int ……);
st.executeBach( );
con.commit( );
con.setAutoCommit(true);

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包
import java.sql.*;
public class JdbcText1
{
public static void main(String args[])
{
try
{
//加载驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//打开数据库连接,aaa为数据源名称
Connection con =DriverManager.getConnection("jdbc:odbc:aaa","","");
//提交查询
Statement st=con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
//取得查询结果
ResultSet rs=st.executeQuery("select * from emp");
//查看结果
rs.absolute(2);
System.out.println(rs.getString(1));
rs.previous();
System.out.println(rs.getString(1));
rs.first();
System.out.println(rs.getString(1));
rs.relative(3);
System.out.println(rs.getString(1));
System.out.println(rs.getRow());
//关闭ResultSet对象
rs.close();
//关闭Statement对象
st.close();
//关闭Connection对象
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

在本程序中,用到了一些方法,读者也可以把其他的方法都用一下。

 

 

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值更新指定的列。

可更新结果集的程序和可滚动的结果集程序很相似,但是可更新的结果集远没有可滚动结果集重要,这里就不给出可更新结果集的代码了。