从表中删除行

时间:2014-10-09 06:10:45

标签: java jdbc

我想从表联系人中删除jframe中显示的当前行

我写了代码

try
    {
        conn = java.sql.DriverManager.getConnection(connectionURL, "usrnme", "pswd");
        Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);//also tried with ResultSet.TYPE_SCROLL_SENSITIVE
        rs.deleteRow();
        rs.next();//it may or may not include in code
    }
    catch(Exception e){System.out.println( "JDBC error: " + e );}

sql查询

 String sql="SELECT * FROM contact order by first_name, last_name";
        rs=stmnt.executeQuery(sql);

但是在运行时会抛出异常

 JDBC error: java.sql.SQLException: 'deleteRow' not allowed because the ResultSet is not an updatable ResultSet.

帮助我!

3 个答案:

答案 0 :(得分:0)

我建议在SQL中完全执行此操作,您需要另外选择每行的(内部)rowid

SELECT c.*, c.rowid FROM contact c ORDER BY first_name, last_name

然后按行ID

删除一行
DELETE FROM contact c WHERE c.rowid  = (?)

这适用于Oracle,但每个Databasetype都使用内部rowid。对于MYSQl,根据我记得

,你可以使用@rowid得到rowid

答案 1 :(得分:0)

尝试ResultSet.TYPE_SCROLL_SENSITIVE,而不是ResultSet.TYPE_SCROLL_INSENSITIVE。这可能会成功。如果这不起作用,请尝试使用SQL DELETE statement(w3schools.com)删除该行。

编辑:现在我重新阅读了您的代码:您需要在调用deleteRow之前移至下一行。打开语句会在第一行之前设置光标。如果对next的调用返回true,则光标指向第一行。只有当光标指向有效行时才能删除该行。 HTH。

答案 2 :(得分:0)

要使用updatable ResultSet,您的表格必须包含primary key列。它是ResultSet中存在的数据与DB之间的链接。由于我从您的注释中推断出您的表不包含主键,因此您可以使用sql查询删除行。

String sql = "DELETE FROM contact WHERE first_name='test'";
stmt.executeUpdate(sql);