【问题标题】:Java - Update query does not work everytimeJava - 更新查询并非每次都有效
【发布时间】:2017-08-10 06:08:39
【问题描述】:

此查询在开始时有效,但当我一次又一次地更新它时它停止工作。我正在使用 netbeans 并使用 xampp 服务器。
还有一件奇怪的事情,现在当值更新时,最后两行和最后一列保持不变。

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

    String val = txt_val.getText();
    String col = txt_col.getText();
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection("jdbc:mysql://localhost/net", "root", "");

        pstmt = conn.prepareStatement(
        "update userdetail set 
            name =  ?
        , username =  ? where  name =  ? AND  username =  ? ")

        pstmt.setString(1, val);
        pstmt.setString(2, val);

        pstmt.setString(3, col);
        pstmt.setString(4, col);

        int i = pstmt.executeUpdate();
        if (i > 0) {
            JOptionPane.showMessageDialog(null, "done");
        } else {
            JOptionPane.showMessageDialog(null, "query failed");
        }

    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }

}

【问题讨论】:

    标签: java mysql jdbc xampp netbeans-8


    【解决方案1】:

    这个查询在开始时有效,但是当我一次又一次地更新它时 它停止工作

    这是逻辑,问题出在您的查询中:

    问题

    update userdetail set name = ?, username = ? where name = ? AND username = ?
    

    假设如果你的 name = "name" and username = "username" 在数据库中
    新值name = "name1" and username = "username1"

    第一次更新

    .. set name = "name1", username = "username1" where name = "name" AND username = "username"
    

    第二次更新

    如果您再次重复,您将使用 name 和 username 的旧值重复您的查询:

    .. set name = "name2", username = "username2" where name = "name" AND username = "username"
    

    名称和用户名是第一次更改,数据库中没有这样的值:name = "name" AND username = "username"


    解决方案

    在更新之前,您必须从数据库中获取信息,这样您就可以毫无问题地更新您的记录。

    或者

    最佳做法是使用不变的主键更新您的记录,例如:

    update ... where id = something
    

    希望你明白我的意思。

    【讨论】:

    • 我没有在我的表中使用任何主键,因为如果名称匹配,我需要更新整个表。例如,如果在整个表中存在名称“joey”,我会将其替换为“x”
    • 是的,所以当你第一次更换它时,你不能第二次更换它,因为它已经改变了@SnehaP,对吧?
    • 对...所以我将不得不使用不同的参数进行比较?
    • 不,如果您的记录已经更新,为什么还要再次更新,为什么还要再次更新? @SnehaP
    • 我理解你的解释。但是当我在不同的桌子上尝试时,代码仍然没有运行。除此之外,代码中还有其他问题吗?
    猜你喜欢
    • 2023-01-31
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多