显示由executeUpdate()修改的表

时间:2016-11-13 00:26:23

标签: java jdbc

我正在做一个程序,用户可以手动进行查询,结果显示在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");
    }

我的问题是,当我执行更新时,我没有得到结果集,无论如何都要从更新的表中进行选择吗?

2 个答案:

答案 0 :(得分:1)

  

我的问题是当我执行更新时,我没有得到结果集......

这是正确的。您可以获得的最多是受影响的行数(即,在您的示例中删除)

  

...无论如何要从已经使用过的表中进行选择吗?

我假设您在询问是否有办法选择查找先前声明中删除/更新的行。

没有。

首先,如果已删除行,则不会查询它们。 (显然!)

常规数据库未进行版本控制。在插入/更新/删除之前,您无法看到数据库的状态。

如果您需要知道删除或更新了哪些记录,我认为您最好的选择是重新构建代码来执行此操作:

  1. 开始交易:
  2. 选择要更新或删除的行。
  3. 阅读选择的结果集并在应用程序中记录您需要的内容......或者在临时表中记录。
  4. 执行更新/删除
  5. 提交交易。
  6. 现在您可以使用在步骤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块中的statementfinally个对象。