0

ユーザーがログインするたびに日付ログを保存しています。日付ログはレコードに日付を保存しますが、私が望むのは重複がないことです。レコードが既に存在するかどうかを確認し、存在する場合は日付を保存しません。レコードがまだ存在しない場合は、日付が保存されます。

これが私のコードです:

 SimpleDateFormat dnow2 = new SimpleDateFormat("MMMMM dd, yyyy");

 ResultSet ds = MyDB.rsFetch("SELECT * FROM `date-logs` WHERE `Date` = '"+dnow.format(new java.util.Date())+"'");

 try {
   ds.next() ; 

   if (ds.getMetaData().getColumnCount() == 0) {
     MyDB.exSQL(  "INSERT INTO `date-logs` (`Date Code`, `Date`) " 
                + "VALUES ('"+dnow.format(new java.util.Date())+ "',"
                + "'"+dnow2.format(new java.util.Date())+"')");   
   }
 } catch (SQLException ex) {
   Logger.getLogger(FrmLogIn.class.getName()).log(Level.SEVERE, null, ex);
 }
4

3 に答える 3

1

ついにできた !!!

 SimpleDateFormat dnow2 = new SimpleDateFormat("MMMMM dd, yyyy");

    ResultSet ds = MyDB.rsFetch("SELECT * FROM `date-logs` WHERE `Date Code` = '"+dnow.format(new java.util.Date())+"'");


  int resultsCounter = 0;  
    try {
        while(ds.next())  
        {  
        //procedure when results were returned  
        resultsCounter++;  
        }

        if (resultsCounter ==0)  
        {  

      MyDB.exSQL("INSERT INTO `date-logs` (`Date Code`, `Date`) VALUES ('"+dnow.format(new java.util.Date())+ "',"
                     + "'"+dnow2.format(new java.util.Date())+"')");
        }  
    } catch (SQLException ex) {
        Logger.getLogger(FrmLogIn.class.getName()).log(Level.SEVERE, null, ex);
    }
于 2013-02-21T03:37:35.250 に答える
0

あなたがしなければならないことは、テーブルにユーザー用の別の外部キーを追加することです(それもプライマリにします)date-logs。同じデータを 2 回挿入しても、主キーがデータベースに既に存在するため、クエリは無視されます。

于 2013-02-21T02:46:07.137 に答える
0

どのデータベース抽象化を使用しているかはわかりませんが、準備済みステートメントを使用するように更新する必要があります。

次に、次のような MySQL 固有のクエリを使用する必要があります。

insert into date logs ... on duplicate key ignore 

日付が主キーであることを確認してください。キーがデータベースに既に存在する場合、この種のクエリは挿入を無視します。

于 2013-02-21T01:12:20.400 に答える