2017-03-15 10 views
0

データベースに挿入する前に、データベースの重複をチェックしたいと思います。これは、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); 
     } 
+0

あなたはsome_tblからplateNo = v1とdriverId = v2とv3のresDate = SELECT COUNT(*)を使用することができます。結果が1(= 1)の場合、挿入しないでください。 –

+0

どのデータベースエンジンですか? –

+0

@ Y.B。私はMysqlを使用しています –

答えて

2

してみましょうデータベースのコードです。これらの3つの値がテーブルに一意であることを指定する一意のインデックス/制約を定義します。

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

あなたは重複を挿入しようとすると - あるいは重複し、その結果updateを行う - その後、データベースが返されますエラー。あなたは単にエラーをキャッチする必要があります。

+0

これは魅力的なように働いた!ただし、driverIDまたはplateNoを変更するだけで、データが挿入されます。クライアントが同じ日に別の予約を追加しないようにするにはどうすればよいですか? –

+1

さらに制約を加えてください! :-) –

1

使用MERGE声明:T-SQLまたはORACLE、または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 */ 
関連する問題