2016-11-04 80 views
1

我有一個mysql數據庫,其中書籍ID(當我添加數據時自動遞增)和其他行。我已經寫了一個代碼來獲得遞增的值到jLabel,它也可以正常工作,但仍然存在一個小問題。假設我輸入了5本書的詳細信息。所以當我按下保存按鈕(將詳細信息保存到數據庫)時,它會成功保存,並且jLabel將增加後的值顯示爲6(因此它可以正常工作)。如何檢索自動遞增的ID值到JLabel

現在的問題是,每當我關閉我的應用程序並重新啓動時,jLabel顯示值爲1.然後,當我保存另一本書的詳細信息時,它跳到數字7(這是正確的自動遞增ID)。但是當我重新啓動應用程序時,它爲什麼顯示ID爲1?即使重新啓動後,它也應該讀取7。這是代碼示例。我甚至在類Constructor中調用它。但它似乎並沒有更新。 :(

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 COUNT(*) FROM newbookstock 

,你做

SELECT * FROM newbookstoc 

或者你可能想MAX(ID),而不是COUNT(*),但選擇*是definitelly不是你應該正在使用。

並將該值用作初始值。在其他消息,你有

new JDBC().getData(...) 

在兩個地方。你不應該像這樣打開多個連接。打開連接一次並重新使用它。

更新:您的片段設置的初始值可能看起來像:

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

MAX(ID)不工作,我不知道爲什麼。我的自動遞增ID從1遞增而不是0. –

+0

非常感謝。它真的工作:) –

+0

有一個問題。 嘗試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 addition = String.valueOf(add); jLabel3.setText(addition); System.out.println(addition); 這是我爲「作者」表編寫的新代碼。但它說「Column'authorid'not found」 –