结果集更新错误

Viv*_*vek 2 java jdbc

我为可滚动的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,但在尝试更新数据时会出错.任何人都可以让我知道同样的原因是什么?

Siv*_*ran 6

原因是您正在使用Select查询并尝试执行Update操作

ResultSet rs = stmt.executeQuery("select * from EMPLOYEE");
Run Code Online (Sandbox Code Playgroud)

另一点是"SELECT*"使Resultset成为ReadOnly

如果要执行更新操作,则需要在" 选择查询"中指定列