我建立了和数据库的连接然后运行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);

}

|

必须先建立好光标的类型和并发性!

其中类型有三种:

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的标准。

更多推荐