JDBC之处理可滚动的结果集和可更新的结果集

来源:互联网 发布:通知栏网络图标不见了 编辑:程序博客网 时间:2024/05/17 05:04

(一)ResultSet

表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

默认的 ResultSet 对象不可更新,仅有一个向前移动的光标。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。但是,可以生成可滚动和/或可更新的ResultSet 对象。

ResultSet 接口提供用于从当前行获取列值的获取 方法(getBooleangetLong 等)。可以使用列的索引编号或列的名称获取值。一般情况下,使用列索引较为高效。

列从 1 开始编号。

Statement stmt = con.createStatement(                                      ResultSet.TYPE_SCROLL_INSENSITIVE,                                      ResultSet.CONCUR_UPDATABLE);       ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");       // rs will be scrollable, will not show changes made by others,       // and will be updatable
(二)ResultSet静态常量

1、TYPE_FORWARD_ONLY:默认类型,指示光标只能向前移动的 ResultSet 对象的类型。 

2、TYPE_SCROLL_INSENSITIVE:该常量指示可滚动并且通常受 ResultSet 底层数据更改影响的 ResultSet 对象的类型。

3、TYPE_SCROLL_SENSITIVE :该常量指示可滚动并且通常受 ResultSet 底层数据更改影响的 ResultSet 对象的类型。 

4、CONCUR_READ_ONLY:该常量指示不可以更新的 ResultSet 对象的并发模式。 即只读

5、CONCUR_UPDATABLE:该常量指示可以更新的 ResultSet 对象的并发模式。 可以进行更改


(三)处理可滚动的结果集

import java.sql.*;public class TestScroll {public static void main(String args[]) {try {new oracle.jdbc.driver.OracleDriver();String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";Connection conn = DriverManager.getConnection(url, "scott", "tiger");Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);  //设置结果集的状态ResultSet rs = stmt.executeQuery("select * from emp order by sal");rs.next();//将光标前移一行System.out.println(rs.getInt(1));rs.last(); //光标移到最后一行System.out.println(rs.getString(1));System.out.println(rs.isLast());System.out.println(rs.isAfterLast());System.out.println(rs.getRow());rs.previous(); //将光标移到该resultset对象的上一行System.out.println(rs.getString(1));rs.absolute(6); //将光标移动到该编号的resultSet对象System.out.println(rs.getString(1));rs.close();stmt.close();conn.close();} catch (SQLException e) {e.printStackTrace();}}}


(四)处理可更新的结果集(Oracle的classes12.jar包没有实现该功能


import java.sql.*;public class TestUpdataRs {    public static void main(String args[]){try{    new oracle.jdbc.driver.OracleDriver();    String url="jdbc:oracle:thin:@192.168.0.1:1521:SXT";    Connection conn=DriverManager.getConnection(url,"scott","tiger");    Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);        ResultSet rs=stmt.executeQuery("select * from emp2");        rs.next();    //更新一行数据    rs.updateString("ename","AAAA");    rs.updateRow();    //插入新行    rs.moveToInsertRow();  //将光标移动到插入行    rs.updateInt(1, 9999);    rs.updateString("ename","AAAA");    rs.updateInt("mgr", 7839);    rs.updateDouble("sal", 99.99);    rs.insertRow(); //将插入行的内容插入到此resultset对象和数据库中    //将光标移动到新建的行    rs.moveToCurrentRow();    //删除行(光标不位于插入行上时,不能调用此方法)    rs.absolute(5);    rs.deleteRow();    //取消更新    //rs.cancelRowUpdates();  }catch(SQLException e){    e.printStackTrace();  }    }}

(五)DataSource

1、作为DriverManager的替代,生成标准的Connection对象

2、连接池实现  (可以调高数据库的连接效率,提高系统的性能)

3、分布式事务实现   (生成一个 Connection 对象,该对象可用于分布式事务,大多数情况下总是参与连接池)


(六)RowSet

1、继承于ResultSet

2、支持断开的结果集

3、支持JavaBean标准

原创粉丝点击