2017-02-05 6 views
0

新月が来たら取引番号を1からリセットできますか?たとえば、最後のエントリは17020005が17030001になります。コードは動作していますが、トランザクションはリセットされません新月が来たときの番号。もしそうなら、あなたがするSQLクエリを変更することができます - ヘンリーが示唆するように、私が使用しています コードは、それはあなたの「id_sell」の値が年、月、一意の整数から構成されているように見える、新月が来ると取引数をリセットする方法

public void new(){ 
    Date date =new Date(); 
    SimpleDateFormat sdf = new SimpleDateFormat("yyMM"); 
    String time = sdf.format(date); 

try{ 
    Connection con = new Connection(); 
    con.openConnection(); 
    con.statement = con.dbConnection.createStatement(); 
    ResultSet rs = con.statement.executeQuery("select right(id_sell,4) as id from sell"); 

    if (rs.first()==false){ 
      txtId.setText(time+"0001"); 
     } 
    else 
    { 
      rs.last(); 
      int no = rs.getInt(1)+1; 
      String cno = String.valueOf(no); 
      int pjg_cno = cno.length(); 
      for (int i=0;i<4-pjg_cno;i++){ 
       cno = "0"+cno; 
      } 
      txtId.setText(time+cno); 
     }  

    }catch (Exception e){ 
     JOptionPane.showMessageDialog(null, "Fail!"); 
    } 
} 
+3

エラーが発生した場合はどうなりますか? –

+0

完全なID(最後の4桁だけでなく)を取り出し、最初の4桁が 'time'と同じであるかどうかを確認します。 – Henry

+0

コードは@jackで動作していますが、新しい月が来るとリセットする方法はidkです。 – lordshenlu0

答えて

0

ですあなたの時間文字列の最初の4桁(WHERE id_sell LIKE '1703%')と一致するWHERE句を含めます。

monthフィールドとtransaction_idフィールドを持っていれば、これを照会するほうがはるかに簡単で効率的になるはずです(DB構造を制御すると仮定します)。データ。

シーケンスを使用してデータベースにIDを生成できるかどうかを考えてみることをお勧めします。このJavaコードが一意性を保証するのは難しく、潜在的な並行性の問題が発生します。

関連する問題