如何阻止Java应用程序在数据库中插入相同的值-SQL server
我在一个应用程序中工作,该应用程序每次进程使用特定设备时都会将进程数据(processName、processID、sessionStart、sessionEnd、computerName、currentUser)保存到数据库中 我的问题是,数据进程被一次又一次地添加(根据runnable任务中的指定,每4秒添加一次),因此我会得到许多类似的行,我想为添加一次的进程找到一个解决方案,然后在设备停止使用时再添加一次sessionEnd datetime。我的代码如下:如何阻止Java应用程序在数据库中插入相同的值-SQL server,java,sql,jdbc,Java,Sql,Jdbc,我在一个应用程序中工作,该应用程序每次进程使用特定设备时都会将进程数据(processName、processID、sessionStart、sessionEnd、computerName、currentUser)保存到数据库中 我的问题是,数据进程被一次又一次地添加(根据runnable任务中的指定,每4秒添加一次),因此我会得到许多类似的行,我想为添加一次的进程找到一个解决方案,然后在设备停止使用时再添加一次sessionEnd datetime。我的代码如下: if(found){
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秒内看到的所有行,并在插入新行之前在该列表中搜索重复的行。每次遍历列表时,您都会删除任何太旧且不再感兴趣的条目