代码之家  ›  专栏  ›  技术社区  ›  prabhu r

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

  •  0
  • prabhu r  · 技术社区  · 7 年前

    我声明我的声明为 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 回复  |  直到 7 年前
        1
  •  3
  •   Mark Rotteveel    7 年前

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

    要生成可更新的结果集,请执行以下操作:

    [..]

    • 查询无法使用 SELECT * .
      然而,有一个解决方法。

    [..]

    作为 挑选* 限制,您可以使用表 别名,如以下示例所示:

    SELECT t.* FROM TABLE t ...
    

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

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