我创建了一个包含 4 列的 MySQL 数据库。我想读取数据库的第二列并将其显示在文本区域中。我有当我单击按钮时调用的方法 display() 。该方法的代码为:
public void display(){
db=new Database();
try{
int n=Integer.parseInt(field.getText());
ResultSet rset=Database.conn.createStatement().executeQuery("select * from mymusic where trackNumber like'"+n+"'");
while(rset.next()){
area.setText(rset.getString("Songlocation"));
}
rset.close();
}catch(SQLException e){
JOptionPane.showMessageDialog(this,"Database error","Warning",JOptionPane.ERROR_MESSAGE);
}
catch(NumberFormatException numfom)
{
JOptionPane.showMessageDialog(this,"Invalid Entry","Warning",JOptionPane.ERROR_MESSAGE);
}
}
当我执行代码并且没有显示时,线程“AWT-EventQueue-0”java.Lang.NullPointerException 中抛出异常。数据库连接是完美的,因为我可以成功更新数据库。帮助我打印文本区域上的数据。
最佳答案
如果没有完整的堆栈跟踪,就很难确定到底是什么导致了 NullPointerException
。
查看源代码,Integer.parseInt
在传递null
时不会抛出NullPointerException
,而JTextArea#setText
也可以处理 null
值。
其余候选者:field
可以为 null
,rset
可以为 null
(不太可能,因为这会触发NPE 在代码中的其他位置),area
可以是 null
。应该非常直接地确定何时拥有堆栈跟踪或使用调试器。
接下来,还有一些其他建议:
- 您应该将
rset.close()
语句移至finally
block 中,以确保即使发生异常,它也会关闭 - 您不应在事件调度线程上查询数据库。请改用工作线程。数据库访问是一个缓慢的操作,这将导致 UI 阻塞,直到查询完成。请参阅Concurrency in Swing教程以获取更多信息
关于java - × 274612 使用 Java 应用程序在文本区域上检索和显示 Sql 数据库数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11639558/