2016-11-04 3 views
1

Book Id(データを追加すると自動的にインクリメント)などのmysqlデータベースがあります。私はjLabelにインクリメントされた値を取得するためのコードを書いていますが、それもうまくいきますが、もう少し小さな問題があります。私は5冊の本の詳細を入力したと仮定します。だから私は(データベースに詳細を保存するために)保存ボタンを押すと、それは正常に保存され、jLabelは6としてインクリメントされた値を表示します(それはうまく動作します)。自動インクリメントされたID値をJLabelに取得する方法

問題は、アプリケーションを終了して再起動するたびに、jLabelの値が1と表示されます。次に、別のブックの詳細を保存すると、番号7(これは正しい自動インクリメントID)にスキップされます。しかし、アプリケーションを再起動するとIDが1と表示されるのはなぜですか?私はそれを再起動しても7を読み込む必要があります。ここにコードサンプルがあります。私はクラスのコンストラクターでも呼び出すことができます。しかし、それは更新するようではありません。 :(

private void autoGenerateId() { 
    if (true) { 
     try { 
      ResultSet result = new JDBC().getData("SELECT * FROM newbookstock"); 
      if (!result.next()) { 
       jLabel5.setText("1"); 
      } else { 
       ResultSet result2 = new JDBC().getData("SELECT LAST_INSERT_ID() AS bookid FROM newbookstock"); 
       if (result2.next()) { 
        int id = result2.getInt("bookid") + 1; 
        String ss = String.valueOf(id); 
        jLabel5.setText(ss); 
       } else { 
        System.out.println("OOOOO"); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } else { 
     System.out.println("Set focus to Jtext1"); 
    } 
} 

答えて

0

はのは、あなたのコードをダイジェストしましょう。

 ResultSet result = new JDBC().getData("SELECT * FROM newbookstock"); 
     if (!result.next()) { 

これは、条件が偽と評価される場合は、テーブルが空の場合。だから、これはあなたが1

} else { 
       ResultSet result2 = new JDBC().getData("SELECT LAST_INSERT_ID() AS bookid FROM newbookstock"); 
としてラベルを設定しているところではありません

最初にプログラムを起動したときに何が表示されますか?0.現在の接続でテーブルに値を挿入していないため、なぜですか。

何をするべきことは、あなたが

SELECT * FROM newbookstoc 

または多分あなたの代わりにカウントMAX(ID)(*)が、選択は* definitelly何をすべきではない場合がありますを行う

SELECT COUNT(*) FROM newbookstock 

です使用している。

この値を初期値として使用してください。他のニュースでは、

new JDBC().getData(...) 

の2か所にあります。このように複数の接続を開くべきではありません。接続を一度開き、再使用してください。

更新:初期値を設定するためのスニペットは、次のようになります。

 JDBC conn = new JDBC(); 
     ResultSet result = jdbc.getData("SELECT COUNT(*) as C FROM newbookstock"); 
     jLabel5.setText(result2.getString("C")); 
+0

MAX(ID)が動作していないと私は理由を知りません。自動増分IDが0ではなく1から増分しています。 –

+0

ありがとうございました。それは本当に働いた:) –

+0

1つの問題があります。 try { ResultSet result = new JDBC()。getData( "SELECT COUNT(*)FROM author"); if(result.next()){ String id = result.getString( "authorid"); int v = Integer.parseInt(id); int add = v + 1; 文字列追加= String.valueOf(追加); jLabel3.setText(追加); System.out.println(追加); 「著者」テーブルに書き込んだ新しいコードです。しかし、 "Column 'authorid' not found"と表示されます。 –

関連する問題