显示

2015-05-05 23 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));