有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java显示表由executeUpdate()修改

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

  1. # 1 楼答案

    My problem is when i execute an update i dont get a resultset ...

    没错。最多可以得到的是受影响的行数(例如,在您的示例中,已删除)

    ... is there anyway to do a select from the table that was udpated?

    我假设您正在询问是否有方法选择查找在上一条语句中删除/更新的行

    没有

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

    常规数据库没有版本控制。在插入/更新/删除之前,无法查看数据库的状态


    如果你需要知道哪些记录被删除或更新,我认为你最好的办法是重组你的a代码来做到这一点:

    1. 启动事务:
    2. 选择要更新或删除的行
    3. 阅读应用程序的结果集,选择并记录应用程序中需要的内容。。。或者在临时桌上
    4. 执行更新/删除
    5. 提交事务

    现在,您可以使用步骤3中记录的信息


    另见:

  2. # 2 楼答案

    My problem is when i execute an update i dont get a resultset, is there anyway to do a select from the table that was udpated?

    您需要再次使用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
     }
    

    另外,请注意,关闭finally块内的resultsetstatement对象是最佳做法