【问题标题】:How to use jTable to retrieve data from database [closed]如何使用 jTable 从数据库中检索数据 [关闭]
【发布时间】:2014-10-18 14:09:54
【问题描述】:

我是 Java 新手。我正在尝试编写一个搜索代码,它应该从数据库(MS Access)中检索特定的搜索数据并将其显示在 jTable 中。但它给了我一个空指针异常。 代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class GuestDetail extends javax.swing.JFrame {
      PreparedStatement ps;
      ResultSet rs;
      Connection conn;
      Statement stmt;
      TableModel tm;
      int sr;
/**
 * Creates new form GuestDetail
 */
public GuestDetail() {
    initComponents();
    try{
    conn = HotelManagement.ConnectDb();
    tm=new DefaultTableModel(4, 4);
    jTable1.setModel(tm);
    }catch(Exception ex)
    {
        JOptionPane.showMessageDialog(null, ex);
    }
}


 private void jButton3ActionPerformed(java.awt.event.ActionEvent evt)         {                                         

  // TODO add your handling code here:
     try{

       System.out.println("Searching Records..");
           String fn=jTextField1.getText();

        System.out.println("searching name="+fn);

      stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

     //  String query1="SELECT * FROM GuestDetails WHERE FirstName LIKE'fn%'";

      String query="select FirstName,LastName,City,ContactNo from GuestDetails where FirstName= ' "+jTextField1.getText()+" '";

      System.out.println("query:"+query);
              rs.next();
              int rows=rs.getInt(1);
              ResultSet rs= stmt.executeQuery(query);
              Object[][] data=new Object[rows][4];
              Object[] headers={"FirstName","LastName","City","ContactNo"};

              int i=0;
              while(rs.next())
              {
                 int j=0;
                 data[i][j++]=rs.getString(1);
                 data[i][j++]=rs.getString(2);
                 data[i][j++]=rs.getString(3);
                 data[i++][j]=rs.getLong(4);
              }
              DefaultTableModel tm=new DefaultTableModel(data, headers);
             jTable1.setModel(tm);    






   }catch (Exception ex) {
         Logger.getLogger(GuestDetail.class.getName()).log(Level.SEVERE, null, ex);
        ex.printStackTrace();

   }

【问题讨论】:

  • 你能发布异常堆栈跟踪吗?
  • 代码如下 你给我们的代码甚至无法编译。除此之外,仅仅说你有一个NullPointerException 并没有真正的帮助。我们需要知道您发布的代码中NullPointerException 发生在哪一行。但是如果你知道NullPointerException 出现在哪里,你也可以修复它。另见this question

标签: java swing jdbc jtable


【解决方案1】:

您似乎假设ResultSet 的第一行和第一列是行数。相反,创建一个空的DefaultTableModel 并为您在ResultSet 中遇到的每一行使用addRow() 方法。

【讨论】:

    【解决方案2】:

    您不应该从 EDT 访问数据库。我假设,由于所有这些活动都在事件处理程序中,它会作为按钮单击的结果被调用,并且它会被 EDT 调用。

    你需要把所有的数据检索和“data”数组的构建放到一个Swingworker runnable中,然后把数据模型的创建和安装到表中放到Swingworker的“done”方法中。

    【讨论】:

      猜你喜欢
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      相关资源
      最近更新 更多