java - 如何阻止 Java 应用程序在数据库中插入相同的值 - SQL Server

标签 java sql jdbc

我正在开发一个应用程序,每次进程使用特定设备时,该应用程序都会将进程数据(processName、processID、sessionStart、sessionEnd、computerName、currentUser)保存到数据库中。

我的问题是数据进程被一遍又一遍地添加(按照可运行任务中指定的每 4 秒一次),所以我最终得到了许多类似的行,我想为该进程找到一个解决方案添加一次,然后在设备停止使用时再次添加 sessionEnd 日期时间。我的代码如下:

if(found){
    while(found == true){
        System.out.println("\nALERT! Device in use!\nThe process currently using the device is: \n" + strLineProcess+"\n");

        final String regex = "^(\\S+) pid: (\\d+) ([^\\\\s]+)\\\\(.+)";
        final String processDetails = strLineProcess;
        String processName = null;
        String processID = null;
        String computerName = null;
        String currentUser = null;


        final Pattern pattern = Pattern.compile(regex);
        final Matcher matcher = pattern.matcher(processDetails);

        if (matcher.find()) {
            processName = matcher.group(1);
            processID = matcher.group(2);
            computerName = matcher.group(3);
            currentUser = matcher.group(4);
        }   

        //Array containing all the process data
        String[] processData = new String[6];

        processData[0]=""+processName;
        processData[1]=""+processID;
        processData[2]=getDateTime();
        processData[3]="";
        processData[4]=""+computerName;
        processData[5]=""+currentUser;

        String[] processRepeated = new String[1];


        insert.insertRow(processData);

        break;
    }
}

我虽然从应用程序中进行选择,检查 processID 是否与我尝试插入的 processID 相同,如果是,则不执行任何操作,但我发现这有点笨拙需要每 4 秒发生一次。我就是无法理解它!

为了澄清, strLineProcess 包含一个与此类似的字符串: Skype.exe pid: 3068 WATCHOUT\tofetopo ,我用正则表达式将其除以将每个值添加到其相应的变量中。

最佳答案

从您提供的信息中尚不清楚,但是您可以通过在除日期时间列之外的所有列上添加唯一索引来解决您的问题吗?

下一个最容易尝试的事情是在数据库中搜索已存在的行。每 4 秒或每 4 毫秒发生一次并没有什么问题,建议从最简单的解决方案开始,只有在简单的解决方案确实引起问题时才提供更奇特的修复。

异国情调的修复方法是在内存中维护一个列表,缓存您在过去 X 秒内看到的所有行,并在插入新行之前搜索该列表以查找重复项。每次迭代列表时,您都会删除所有太旧且不再感兴趣的条目。

关于java - 如何阻止 Java 应用程序在数据库中插入相同的值 - SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43396693/

相关文章:

java - 为什么这个 Spring Boot Web 应用程序不需要 @Repository?

sql - 将类型定义为变量 - DATEADD(type, value, date) - SQL

sql - .NET SqlConnection.Dispose() 可以抛出异常吗?

sql - INSERT INTO 插入一行全是空值

java - 如何使用联合运算符连接 sql 查询

java - DateUtils 无法解析

java - 在Ubuntu 16.04中使用JAVA中的MapReduce在文本文件中搜索给定单词

java - 如何通过java解析yaml文件(snakeYaml)

java - 尝试从 Firebase 获取由 UID 和 Push() 方法生成的两个唯一键下的数据并使用查询

java - java中如何为不同的数据库创建多个数据库连接