java - 插入之前检查数据库中是否有重复项

标签 java

在插入表之前,我需要检查数据库中的记录是否已存在。我有两张表,一张用于插入数据,一张是引用主表的日志表。在这个日志表中,我有 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);

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

相关文章:

java - 由于外键损坏,Hibernate 无法重建表

java - 发送数据时,在 Android 应用程序中从 Firebase 检索 ServerValue.Timestamp

java - 使用 SWT 在新浏览器中使用新 session 和 cookie 打开 URL

java - 如何在 http ://jqueryui. com 中使用 RadioButton 场景的相对 Xpath 定位元素

java - 使用 Apache PDFBox 将实心圆添加到 PDF 页面

java - 对于 JNI 专家,我将如何使用 JNI 调用 ReadProcessMemory? (从Windows应用程序读取内存)

java - 我应该升级 JBoss 还是完全避开它并迁移到 Tomcat?

java - 如何在java中用cypher加载CSV文件?

java - 查询 ActiveMQ 队列的峰值大小

java - 打开到 "final"(非重定向)URL 的 HTTP 连接