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

时间:2018-01-19 13:27:28

标签: java oracle jdbc

我声明我的声明为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 个答案:

答案 0 :(得分:3)

Oracle数据库JDBC开发人员指南结果集一章,Resultset Limitations and Downgrade Rules部分所述:

  

生成可更新的结果集:

     

[..]

     
      
  • 查询无法使用SELECT *   但是,有一种解决方法。
  •   
     

[..]

     

作为SELECT *限制的解决方法,您可以使用表格   别名,如以下示例所示:

SELECT t.* FROM TABLE t ...

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

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