您的位置:首页 > 其它

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

2017-09-26 14:45 411 查看
(一)ResultSet

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

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


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

列从 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标准
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: