有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java deleterow()仅适用于可更新的结果集

我将我的语句声明为result.concur_update,但如果我尝试使用deleterow(),则表明deleterow()仅对resultset.concur_updatable有效是错误的

 public static void main(String args[]) throws 
 ClassNotFoundException,SQLException
{
    String driver="oracle.jdbc.OracleDriver";
    String url="jdbc:oracle:thin:@localhost:1521:XE";
    String user="system"; String pass="sysdb";
    Class.forName(driver);
    Connection con=DriverManager.getConnection(url,user,pass);
    Statement st=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    String query="SELECT * FROM employees";
    ResultSet rs=st.executeQuery(query);
    System.out.println("S.No\tid\tname");
    while(rs.next())
    {
        System.out.print(rs.getRow()+"\t");
        System.out.print(rs.getString(1)+"\t");
        System.out.println(rs.getString("emp_name"));
    }
    rs.absolute(3);

    rs.deleteRow();
}

}


共 (1) 个答案

  1. # 1 楼答案

    如《Oracle数据库JDBC开发人员指南》第章“结果集”第Resultset Limitations and Downgrade Rules节所述:

    To produce an updatable result set:

    [..]

    • A query cannot use SELECT * .
      However, there is a workaround for this.

    [..]

    As a workaround for the SELECT * limitation, you can use table aliases, as shown in the following example:

    SELECT t.* FROM TABLE t ...
    

    您当前的查询不符合这些要求(也不符合TYPE_SCROLL_SENSITIVE),因此它被降级为不可更新、滚动不敏感的结果集

    换句话说,您需要将查询更改为SELECT e.* FROM employees e或显式列出列。我建议您阅读该部分的其余部分,因为它提供了重要信息