我为可滚动的resultset写了一个简单的代码.但它给了我一个错误.
码:
import java.sql.*; import java.util.Properties; public class Scrollable_Resultset { public static void main(String[] args) throws Exception{ Properties p = new Properties(); p.put("user", "system"); p.put("password", "password"); DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",p); Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executeQuery("select * from EMPLOYEE"); System.out.println("Displaying all the rows of the result set forward"); while(rs.next()) { System.out.println(rs.getInt(1)); System.out.println(rs.getString(2)); System.out.println(rs.getInt(3)); System.out.println("--------------"); }//end of while System.out.println("****************"); System.out.println("Printing resultset in reverse order"); rs.last();//go to last row while(rs.previous()) { System.out.println(rs.getInt(1)); System.out.println(rs.getString(2)); System.out.println(rs.getInt(3)); System.out.println("--------------"); }//end of while System.out.println("****************"); System.out.println("Printing only 1st row"); rs.first(); System.out.println(rs.getInt(1)); System.out.println(rs.getString(2)); System.out.println(rs.getInt(3)); System.out.println("--------------"); System.out.println("****************"); System.out.println("Printing 3rd row of original data set"); System.out.println(rs.getInt(1)); System.out.println(rs.getString(2)); System.out.println(rs.getInt(3)); System.out.println("--------------"); System.out.println("****************"); System.out.print("No of rows before modification: "); rs.last(); System.out.println(rs.getRow()); System.out.println("****************"); System.out.println("Updating 3rd row"); rs.absolute(3); rs.updateInt(1, 999); rs.updateString(2,"John"); rs.updateInt(3, 99000); rs.updateRow(); System.out.println("****************"); System.out.println("Inserting a new row"); rs.moveToInsertRow(); rs.updateInt(1, 99); rs.updateString(2,"Michael"); rs.updateInt(3, 909); rs.insertRow(); System.out.println("Deleting the 6th row"); rs.absolute(6); rs.deleteRow(); System.out.println("****************"); con.close(); }
}
错误
Exception in thread "main" java.sql.SQLException: Invalid operation for read only resultset: updateInt at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java) at oracle.jdbc.driver.BaseResultSet.updateInt(BaseResultSet.java) at jdbc.Scrollable_Resultset.main(Scrollable_Resultset.java:64)
虽然我使用了ResultSet.CONCUR_UPDATABLE,但在尝试更新数据时会出错.任何人都可以让我知道同样的原因是什么?
原因是您正在使用Select
查询并尝试执行Update
操作
ResultSet rs = stmt.executeQuery("select * from EMPLOYEE");
另一点是"SELECT*"使Resultset成为ReadOnly
如果要执行更新操作,则需要在" 选择查询"中指定列