java - 如何使用嵌入式数据库填充 JTable?

标签 java sql jdbc derby embedded-database

我在 GUI 应用程序中显示数据库填充的 JTable 时遇到问题。

下面的代码运行并创建一个带有面板的 GUI,然后创建 JTable 并将其添加到我的应用程序中。然后我运行了一个据称可以填充该表的方法。填充完成后,没有任何显示。

剖析我的代码,我相信某个地方导致数据无法解析到我的表中,出于某种未知的原因,这就是我来到这里的原因。

单击按钮后,此代码需要:

JTable tigerTable = new JTable();

JPanel centerPanel = new JPanel();

centerPanel.add(tigerTable, new GridBagConstraints());

FillTable(tigerTable, "SELECT * FROM TIGER_INFO");

FillTable方法如下:

//Add buildTableModel method
public void FillTable(JTable table, String Query)
{
    try
    {

        Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
        Connection conn = DriverManager.getConnection("jdbc:derby:STOCK_CONTROL");
        Statement stat = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
        ResultSet rs = stat.executeQuery(Query);
        System.out.println("Connected");

        //Remove previously added rows
        while (table.getRowCount() > 0)
        {
            ((DefaultTableModel) table.getModel()).removeRow(0);
        }

        int columns = rs.getMetaData().getColumnCount();

        while (rs.next())
        {
            Object[] row = new Object[columns];

            for (int i = 1; i <= columns; i++)
            {
                row[i - 1] = rs.getObject(i);
            }
            ((DefaultTableModel) table.getModel()).insertRow(rs.getRow() - 1, row);
        }

        rs.close();
        stat.close();
        conn.close();         
    }
    catch (InstantiationException |
            IllegalAccessException |
            ClassNotFoundException |
            SQLException e)
    {
        System.out.println(e);
        e.printStackTrace();
    }
}

这样做会创建应用程序,但不会显示任何包含数据的表。我的数据库包含 3 列和 3 行,但我没有看到我的数据显示在 JTable 中。

我的问题是,如何使用数据库填充 JTable 并在 GUI 应用程序上正确显示它?

如果您需要其他任何东西,请告诉我,我会尽力提供。

提前谢谢您。

最佳答案

我认为你混合了操作,我建议使用这个指令:

  1. 创建一个 Bean 或实体来存储对象的信息
  2. 获取您的数据列表,
  3. 在 JTable 中显示您的数据,

因此您可以使用它在 JTable 中显示数据:

....
List<TIGER_INFO> list = new ArrayList<>();//create a List of data
while (rs.next()){
   //fill data in your List
   list.add(new TIGER_INFO(rs.getTYPExxx("att1"), rs.getTYPExxx("att2"), rs.getTYPExxx("att3"));        
}

//when you finish call your function which display your data :
fillData(list);
....

填充日期方法可以如下所示:

private void fillData(List<TIGER_INFO> list) {
    DefaultTableModel model = (DefaultTableModel) jTableName.getModel();

    while (model.getRowCount() > 0) {
        for (int i = 0; i < model.getRowCount(); i++) {
            model.removeRow(i);
        }
    }

    for (TIGER_INFO obj : list) {
        model.addRow(new Object[]{
            obj.getAttribute1(),
            obj.getAttribute2,
            obj.getAttribute3
        });
    }
}

关于java - 如何使用嵌入式数据库填充 JTable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42671454/

相关文章:

java - 使用 StepExecutionContext/JobExecutionContext 共享大值 Hashmap 的后果

sql - Illuminate\Support\Fluent 类的对象无法转换为 int

java - 我在 jdbc 中使用 localhost 时发现网络连接错误

java - keystore 被篡改,或密码不正确]仍然无法工作

java - 有哪些方法可以在 Android 上进行多核编程,而不仅仅是多线程?

java - 当我的测试运行时,我可以将信息发送到 testrail for selenium

sql - 转换和求和函数

sql - 查询 SQL Server 登录名或确定登录名是否为 SQL Azure 上的管理员

Spring 应用程序不在 Postgres 数据库上创建表

java - 在 NetBeans 中引用 .jar 文件