[英]Check for duplicates in database before inserting
在插入表之前,我需要在数据库中检查记录是否已经存在。 我有两个表,一个表插入数据,另一个表引用主表。 在此日志表中,我具有ID,date_import和file_import。 所以我想检查file_import是否已经存在。
这是我的暂存代码:
//DATE
DateFormat dateF = new SimpleDateFormat("dd.MM.yyyy");
Date date = new Date();
//DATE
//DB INIT
String URL = "jdbc:mysql://192.168.1.128:3306";
Connection con = (Connection) DriverManager.getConnection(URL,user,pass);
Statement stmt = (Statement) con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
Statement stmt1 = (Statement) con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
String mySQL_log = ("CREATE TABLE IF NOT EXISTS dbtest.T_AJPES_TR_LOG"
+ "(ID INT unsigned PRIMARY KEY AUTO_INCREMENT, Date_import VARCHAR(45),"
+ "File_import VARCHAR(75)) ENGINE = INNODB");
String mySQL_new_table = ("CREATE TABLE IF NOT EXISTS dbtest.T_AJPES_TR "
+ "(row_count INT PRIMARY KEY AUTO_INCREMENT,"
+ "rn CHAR(15),sSpre CHAR(5),reg CHAR(5),eno VARCHAR(10),davcna VARCHAR(15),Ime VARCHAR(75),"
+ "Priimek VARCHAR(75),ID_LOG INT unsigned,"
+ "CONSTRAINT FOREIGN KEY(ID_LOG) references T_AJPES_TR_LOG(ID) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE = INNODB");
stmt1.executeUpdate(mySQL_log);
ResultSet uprs1 = stmt1.executeQuery("SELECT * FROM dbtest.T_AJPES_TR_LOG");
stmt.executeUpdate(mySQL_new_table);
ResultSet uprs = stmt.executeQuery("SELECT * FROM dbtest.T_AJPES_TR");
//SELECT INIT
//READ FILE
File folder = new File(readFolder);
String[] fileName = folder.list();
for (;k<fileName.length;k++) {
name = fileName[k];
if (name.contains(".xml")) {
FileInputStream fstream = new FileInputStream(readFolder + name);
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
//READ FILE
uprs.next();
file_exists = uprs1.getString("File_import");
if (!file_exists.equals(name)) {
uprs1.afterLast();
uprs1.moveToInsertRow();
uprs1.updateString("Date_import",dateF.format(date));
uprs1.updateString("File_import",name);
uprs1.insertRow();
i=0;
我可能误解了您的问题,但是如果您发送
SELECT * FROM dbtest.T_AJPES_TR_LOG WHERE file_import='MyFileName.xml';
到数据库,您将获得一个空结果集(=实际文件名是新的)或一个包含1..n项的集(=文件名已知且已记录1..n次)。
如Knubo所说,用引号引起来:
String query = String.format(
"SELECT * FROM dbtest.T_AJPES_TR_LOG WHERE File_import='%s'", name);
uprs1 = stmt1.executeQuery(query);
您正在艰难地做到这一点。 大多数数据库都有防止重复条目的能力(尽管我对mySQL并不特别了解)。 假设您的RDBMS支持它,只需为有问题的列设置“唯一键”,然后让数据库为您进行重复检测。 用您自己的代码来完成代码只是过度设计和冗余。
如果您的RDMS 不支持这种基本功能,那么该考虑升级了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.