当前位置: 技术问答>java相关
jdbc 访问Oracle数据库中的ResultSet问题
来源: 互联网 发布时间:2015-06-30
本文导语: 我建立了和数据库的连接然后运行select语句返回一个ResultSet,我可以用next() 来移动光标,但是如果我用first(),last(),就会报错说:"java.sql.SQLException: 对只转发结果集的无效操作" 我的代码 private Connection con;//...
我建立了和数据库的连接然后运行select语句返回一个ResultSet,我可以用next()
来移动光标,但是如果我用first(),last(),就会报错说:"java.sql.SQLException: 对只转发结果集的无效操作"
我的代码
private Connection con;//数据库连接
private DatabaseMetaData ds;//数据库
private java.sql.ResultSet rs;//记录集
private ResultSetMetaData rsmd;//表记录集
private Statement st; //数据库综述对象
private PreparedStatement ps;//记录集状态
private CallableStatement cs;//存储过程
String url= "jdbc:oracle:thin:@202.49.96.2:1521:tmd";//url地址
String user = "leon"; //userName
String pass = "seawolf";
try
{
//Class.forName("com.sssw.jdbc.oracle8.Driver"); //数据库jdb驱动
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); //数据库jdb驱动
con = DriverManager.getConnection(url,user,pass); //创建连接
ds= con.getMetaData();//建立数据库对象
st= con.createStatement();
con.setAutoCommit(false);
//System.out.println(url);
if (con==null){
System.out.println("Could not establish connection.");
}
else{
System.out.println("Connection successfully established.");
}
}catch(Exception e)
{
System.out.println(e+"ht.pub.jdb.dbConnect Object::dbConnect");
System.out.println("Could not establish connection.");
}
int rc = 0;
try
{
rs = st.executeQuery(sql);
rs.next();// ok
rs.first();// error
rs.last();//error
}catch(Exception e)
{
System.out.println ("Sql error" + e);
}
来移动光标,但是如果我用first(),last(),就会报错说:"java.sql.SQLException: 对只转发结果集的无效操作"
我的代码
private Connection con;//数据库连接
private DatabaseMetaData ds;//数据库
private java.sql.ResultSet rs;//记录集
private ResultSetMetaData rsmd;//表记录集
private Statement st; //数据库综述对象
private PreparedStatement ps;//记录集状态
private CallableStatement cs;//存储过程
String url= "jdbc:oracle:thin:@202.49.96.2:1521:tmd";//url地址
String user = "leon"; //userName
String pass = "seawolf";
try
{
//Class.forName("com.sssw.jdbc.oracle8.Driver"); //数据库jdb驱动
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); //数据库jdb驱动
con = DriverManager.getConnection(url,user,pass); //创建连接
ds= con.getMetaData();//建立数据库对象
st= con.createStatement();
con.setAutoCommit(false);
//System.out.println(url);
if (con==null){
System.out.println("Could not establish connection.");
}
else{
System.out.println("Connection successfully established.");
}
}catch(Exception e)
{
System.out.println(e+"ht.pub.jdb.dbConnect Object::dbConnect");
System.out.println("Could not establish connection.");
}
int rc = 0;
try
{
rs = st.executeQuery(sql);
rs.next();// ok
rs.first();// error
rs.last();//error
}catch(Exception e)
{
System.out.println ("Sql error" + e);
}
|
必须先建立好光标的类型和并发性!
其中类型有三种:
TYPE_FORWARD_ONLY,TYPE_SCROLL_INSENSITIVE,TYPE_SCROLL_SENSITIVE
并发性只有两种:
CONCUR_READ_ONLY,CONCUR_UPDATABLE(可更新记录集)
所以你应该 是connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE ,ResultSet.CONCUR_READ_ONLY )
它是jdbc2.0才有的功能!
其中类型有三种:
TYPE_FORWARD_ONLY,TYPE_SCROLL_INSENSITIVE,TYPE_SCROLL_SENSITIVE
并发性只有两种:
CONCUR_READ_ONLY,CONCUR_UPDATABLE(可更新记录集)
所以你应该 是connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE ,ResultSet.CONCUR_READ_ONLY )
它是jdbc2.0才有的功能!
|
statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE ,ResultSet.CONCUR_READ_ONLY );
|
因为你建立的Statement是只能往前移动的只读光标,你需要建立可移动的。
connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, CONCUR_READ_ONLY),这样你的ResultSet就可以使用first和last了。
这是JDBC2.0的标准。
connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, CONCUR_READ_ONLY),这样你的ResultSet就可以使用first和last了。
这是JDBC2.0的标准。