java - × 274612 使用 Java 应用程序在文本区域上检索和显示 Sql 数据库数据

标签 java swing

我创建了一个包含 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 可以为 nullrset 可以为 null(不太可能,因为这会触发NPE 在代码中的其他位置),area 可以是 null 。应该非常直接地确定何时拥有堆栈跟踪或使用调试器。

接下来,还有一些其他建议:

  • 您应该将 rset.close() 语句移至 finally block 中,以确保即使发生异常,它也会关闭
  • 您不应在事件调度线程上查询数据库。请改用工作线程。数据库访问是一个缓慢的操作,这将导致 UI 阻塞,直到查询完成。请参阅Concurrency in Swing教程以获取更多信息

关于java - × 274612 使用 Java 应用程序在文本区域上检索和显示 Sql 数据库数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11639558/

相关文章:

java - 无法解析 org.apache.hadoop 的依赖关系 :hadoop-aws:2. 7.6

java - 在eclipse中调试Jar文件

java - Netty - 在 channel 之间共享附件

java - JVM 使用不同的 file.encoding 打开另一个 JVM

java - 从java中的另一个类访问变量

java - 在 NetBeans 中将 "Go to source"与本地 Maven 项目一起使用

java - SwingWorker.cancel(真);在java中不工作

java - TextField 中的 TextArea 中未显示字符串

java - 在java swing中重新绘制组件

java - 如何在 Java Swing 中的两个不同 MVC Controller 之间正确通信?