我正在做一个程序,用户可以手动进行查询,结果显示在jtable中,例如:
userQuery= "DELETE FROM cds WHERE Nro_cd = 4;"
我正在使用此代码
if (statement.execute(userQuery)){
ResultSet rs = statement.executeQuery(userQuery);
table.setModel(DbUtils.resultSetToTableModel(rs));
JOptionPane.showMessageDialog(null, "Consulta Realizada");
rs.close();
}
else {
statement.executeUpdate(userQuery);
JOptionPane.showMessageDialog(null, "Modificacion Realizada");
}
我的问题是,当我执行更新时,我没有得到结果集,无论如何都要从更新的表中进行选择吗?
答案 0 :(得分:1)
我的问题是当我执行更新时,我没有得到结果集......
这是正确的。您可以获得的最多是受影响的行数(即,在您的示例中删除)
...无论如何要从已经使用过的表中进行选择吗?
我假设您在询问是否有办法选择查找先前声明中删除/更新的行。
没有。
首先,如果已删除行,则不会查询它们。 (显然!)
常规数据库未进行版本控制。在插入/更新/删除之前,您无法看到数据库的状态。
如果您需要知道删除或更新了哪些记录,我认为您最好的选择是重新构建代码来执行此操作:
现在您可以使用在步骤3中记录的信息。
另见:
答案 1 :(得分:0)
我的问题是,当我执行更新时,我没有得到结果集,是 无论如何要从已经使用过的表中做出选择?
您需要再次使用ResultSet
来获取数据库记录,如下所示:
try{
if (statement.execute(userQuery)){
ResultSet rs = statement.executeQuery(userQuery);
table.setModel(DbUtils.resultSetToTableModel(rs));
JOptionPane.showMessageDialog(null, "Consulta Realizada");
//rs.close(); //close in finally
}
else {
statement.executeUpdate(userQuery);
ResultSet rs = statement.executeQuery("SELECT * FROM cds");
while(rs.next()) {
//get data from resultset
}
//rs.close(); //close in finally
JOptionPane.showMessageDialog(null, "Modificacion Realizada");
}
} catch(SQLException sqlexe) {
//log exception
} finally {
//close resultset ad statements here
}
另外,请注意,最佳做法是关闭resultset
块中的statement
和finally
个对象。