簡體   English   中英

插入之前如何檢查數據庫是否重復?

[英]How to check database for duplicates before inserting?

我想在插入數據庫之前檢查數據庫是否重復。 僅當plateNo,driverID和resDate匹配時才被視為重復項。

這是我獲取將要插入數據庫的數據的方式

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

        String client = (String) clientCmb.getSelectedItem();
        String[] cparts = client.split("-");
        String cpart = cparts[0];

        String driver = (String) driverCmb.getSelectedItem();
        String[] dparts = driver.split("-");
        String dpart = dparts[0];

        String van = (String) vanCmb.getSelectedItem();

        java.util.Date oDate = jXDatePicker2.getDate();
        DateFormat oDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String date = oDateFormat.format(oDate);
        model2.addRow(cpart, dpart, van, date);


    } 

這是我的addRow方法的代碼

public void addRow(String client, String driver, String van, String res){

        try {
            String sqlRes =  "Select * from reservation";
            rs = st.executeQuery(sqlRes);
            rs.moveToInsertRow();

            rs.updateString("clientID", client);
            rs.updateString("plateNo", van);
            rs.updateString("driverID", driver);
            rs.updateString("resDate", res);
            rs.insertRow();
            rs.moveToCurrentRow();
            rs = st.executeQuery(sqlRes);
            this.fireTableDataChanged();
        } catch (SQLException ex) {
            Logger.getLogger(MyModel2.class.getName()).log(Level.SEVERE, null, ex);
        }

讓數據庫為您完成工作。 定義一個唯一的索引/約束,指定這三個值在表中是唯一的:

create unique index unq_reservation_3 on reservation(plateNo, driverID, resDate);

如果您嘗試插入重復項-或執行導致重復項的update -數據庫將返回錯誤。 您只需要捕獲錯誤。

使用MERGE語句: T-SQLORACLE ,或者對於MySQL:

PreparedStatement p = con.prepareStatement("
    INSERT INTO reservation tgt (clientID, plateNo, driverID, resDate)
    SELECT (? As clientID, ? As plateNo, ? As driverID, ? As resDate)
    FROM DUAL ins
    LEFT JOIN reservation ref
        ON  ref.resDate = ins.resDate
       AND (ref.plateNo = ins.plateNo OR ref.driverID = ins.driverID)
    WHERE ref.clientID IS NULL;
");
p.setString(1, client);
p.setString(2, van);
p.setString(3, driver);
p.setString(4, res);
return p.executeUpdate(); /* 1 - Success | 0 - Ignored Duplicate */

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM