顯示

2015-05-05 56 views
0

我想在一個JTextField顯示來自數據庫的新ID的JTextField的值的查詢的結果,但它這麼想的.. 這是我的代碼顯示

public void actionPerformed(ActionEvent e) { 

    try { 
     DB con=new DB(); 
     con.connecte(); 

     String req = "SELECT Max(num) FROM condidat"; 
     ResultSet rs = stmt.executeQuery(req); 
     int num = rs.getInt("num"); 
     int nvNum=num+1; 
     txt_num.setText(valueOf(nvNum)); 

     } 
     catch (ClassNotFoundException ex) { 
      Logger.getLogger(Ajouter.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     catch (SQLException ex) { 
      Logger.getLogger(Ajouter.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 
    //To change body of generated methods, choose Tools | Templates. 

} 
+4

您能否更具體地瞭解發生了什麼問題? – fdsa

+0

在我的jTextField中沒有任何東西與jTextField.setText() –

+1

1)你有沒有添加一個System.out.println(...)語句到您的代碼來驗證從SQL查詢返回的值? 2)如果顯示一個值,那麼問題在於你沒有對添加到GUI的文本字段的引用。也許你有一個同名的本地變量和一個實例變量。 – camickr

回答

2

你不叫ResultSet.next()而在ResultSet列將不會被調用numMax(num),如果你想要一個更好的名字,在查詢中使用AS這種方式改變你的查詢/代碼:

String req = "SELECT Max(num) AS maxnum FROM condidat"; 
ResultSet rs = stmt.executeQuery(req); 
if (rs.next()) { 
    int num = rs.getInt("maxnum"); 
    ... 
} 

記住塔ResultSet在第一條記錄之前開始指向,因此必須至少調用next()至少一次(並且這還可以用於驗證是否存在實際數據,如果沒有更多記錄,它將返回false)。之後,如果,ResultSet已準備好被使用,並指向第一條記錄。

編輯:

因爲它看起來像actionPerformed甚至沒有叫,你註冊這個類作爲監聽一些JComponent,例如一個按鈕?

JButton b = new Button("Click me"); 
b.addActionListener(this); 

如果單擊此按鈕,而這一切的代碼是在同一個班,actionPerformed將被調用。

+0

非常感謝你這是一個好主意,但在jTextField中沒有任何東西!將該代碼放入actionPerformed中是否正確? –

+0

並不多,特別是在那裏執行數據庫連接不是一個好主意,這是比較慢的操作,甚至比執行查詢要慢。通常你會嘗試在事件回調中只做最基本的東西,比如'actionPerformed',可能會有其他的監聽器等待被調用,並且你延遲執行。 –

+0

@ViaTrasViaTras請將'valueOf'的代碼添加到您的問題中,那裏可能有問題:)它看起來像返回一個空字符串。 –

0

將您的整數值更改爲字符串,因爲jTextField只顯示文本 這樣: txt_num.setText(Integer.toString(nvNum));