java - 插入前检查重复数据

标签 java mysql sql swing

我正在创建一个 java swing 程序,用户可以在其中创建记录,但我希望能够在允许用户创建记录之前检查重复项。这是我的代码:

public boolean createAssignRequest(AssignmentRequests assignReq) {

    int id = assignReq.getReqId();
    String dutyName = assignReq.getDutyName();
    String volNric = assignReq.getVolNric();

    boolean success = false;
    DBController db = new DBController();
    String dbQuery = "";

    db.getConnection();

    dbQuery = "INSERT into assignrequests (dutyName, volNric)"
            + " VALUES ('" + dutyName + "','" + volNric + "')";

    if (db.updateRequest(dbQuery) == 1) {
        success = true;
    }
    db.terminate();

    return success;

}

如果已存在具有相同 DutyName 和 volNric 的行,则用户无法创建记录。 如果我要执行这行sql语句

ALTER TABLE `assignrequests` ADD UNIQUE `uniqueindex`(`dutyName`, `volNric`);

我会在 mySQL 中实现它(即使我截断我的数据,也只实现一次)还是在我的程序代码中实现它? (我使用的是 eclipse ) 我也使用三层架构:-) 最后,如果已经检测到重复记录,我将如何实现代码以显示 JOptionPane?感谢您的帮助!

最佳答案

如果您希望 DutyNamevolNric 具有唯一值,请使用唯一约束/索引来实现:

create index idx_assignrequests_dutyname_volnric on assignrequests(dutyname, volnric);

然后,当您执行插入时,您可以让它失败。或者,您可以使用重复 key 更新忽略它:

INSERT into assignrequests(reqId, dutyName, volNric)"
    VALUES ('" + id + "','" + dutyName + "','" + volNric + "')
    ON DUPLICATE KEY UPDATE dutyName = VALUES(dutyName);

正在更新的列被设置为其自身 - 因此该操作不会执行任何操作。

关于java - 插入前检查重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25245310/

相关文章:

java - 无法从电子邮件中读取自定义 header

java - 关于 ThreadGroup#activeCount() 的困惑

php - 为什么 php 中的以下 sql 查询不起作用?

PHP/MySQL : How to delete all data from database which contains specific id in one query

sql - 使用命令行SQLCMD从SQL函数返回输出

java - 多线程上传多个文件时面临空指针

java - 将两个 xml 文件合并到一个文件中

sql - MySQL - 限制连接中的行数?

如果两个不同的作者在书籍数据库中具有相同的名字,则出现 SQL 问题

mysql - 使用 SQL 从字段中的任意位置提取分隔的子字符串