我想从表联系人中删除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.
帮助我!
答案 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);