Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何阻止Java应用程序在数据库中插入相同的值-SQL server_Java_Sql_Jdbc - Fatal编程技术网

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

如何阻止Java应用程序在数据库中插入相同的值-SQL server,java,sql,jdbc,Java,Sql,Jdbc,我在一个应用程序中工作,该应用程序每次进程使用特定设备时都会将进程数据(processName、processID、sessionStart、sessionEnd、computerName、currentUser)保存到数据库中 我的问题是,数据进程被一次又一次地添加(根据runnable任务中的指定,每4秒添加一次),因此我会得到许多类似的行,我想为添加一次的进程找到一个解决方案,然后在设备停止使用时再添加一次sessionEnd datetime。我的代码如下: if(found){

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

我的问题是,数据进程被一次又一次地添加(根据runnable任务中的指定,每4秒添加一次),因此我会得到许多类似的行,我想为添加一次的进程找到一个解决方案,然后在设备停止使用时再添加一次sessionEnd datetime。我的代码如下:

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是否与我尝试插入的相同,如果相同,则不要执行任何操作,但我发现这有点笨拙,因为所有这些都需要每4秒执行一次。我就是想不通


要澄清的是,strLineProcess包含一个类似于以下内容的字符串:Skype.exe pid:3068 WATCHOUT\tofetopo,我用regex除以该字符串,将每个值添加到相应的变量中。

从您提供的信息中不清楚,但是,只需在除datetime列之外的所有列上添加唯一索引,您就可以解决问题吗

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

异国情调的解决方案是在内存中维护一个列表,缓存您在最后X秒内看到的所有行,并在插入新行之前在该列表中搜索重复的行。每次遍历列表时,您都会删除任何太旧且不再感兴趣的条目