我为可滚动的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();
}
Run Code Online (Sandbox Code Playgroud)
}
错误
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)
Run Code Online (Sandbox Code Playgroud)
虽然我使用了ResultSet.CONCUR_UPDATABLE,但在尝试更新数据时会出错.任何人都可以让我知道同样的原因是什么?
原因是您正在使用Select查询并尝试执行Update操作
ResultSet rs = stmt.executeQuery("select * from EMPLOYEE");
Run Code Online (Sandbox Code Playgroud)
另一点是"SELECT*"使Resultset成为ReadOnly
如果要执行更新操作,则需要在" 选择查询"中指定列