当前位置: 首页 > 知识库问答 >
问题:

用数据库查询更新JTable

柴霖
2023-03-14

我正在处理的程序包含两个类,GUI和DatabaseHelper。使用的表模型是DefaultTableModel。

GUI包含一个简单的JTable。它在启动时使用来自DatabaseHelper的数据初始化。这管用。

然而,当尝试将新数据加载到表中时,就不是那么直接了当了。

到目前为止,我的做法是:

model = DatabaseHelper.LoadData() // returns a default table model with new data.
tabel = new JTable();
tabel.setModel();

现在发生的情况是,加载的数据被附加到已经存在的JTable上。

如果可能的话,我希望实现一个仅使用默认表模型的解决方案。谢谢您的任何建议!

编辑:

public void initGUI(){

        setJMenuBar(makeMenuBar()); 
        container   = new JPanel(new BorderLayout());

        model = db.initialiseTable();       // Load initialisation data from the database

        table = new JTable();
        table.setModel(model);
        table.setPreferredScrollableViewportSize(new Dimension(500, 70));
        table.setFillsViewportHeight(true);
        scrollPane  = new JScrollPane(table);

        container.add(scrollPane, BorderLayout.CENTER); 
        add(container);
    }

从数据库返回新模型:

public DefaultTableModel loadData(){
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/version1", "root", "root");
            System.out.println("\nDatabase Connection Established.\n");

            String query = "SELECT * FROM table WHERE test_number = 2";

            stmt        = con.createStatement();
            rs          = stmt.executeQuery( query );

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

            while (rs.next()) {
                Vector row = new Vector(columns);

                for (int i = 1; i <=columns-1; i++){
                row.addElement( rs.getObject(i+1) );
                }
                data.addElement( row );
            }
        }catch(SQLException e){
            e.printStackTrace();
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }

        columnNames.add(" ");
        columnNames.add("Column 1");
        columnNames.add("Column 2");

        DefaultTableModel model = new DefaultTableModel(data, columnNames);

        return model;
    }

ActionPerformed时,代码处理从DatabaseHelper返回的新模型

            model = new DefaultTableModel();
            model = db.loadData();

            table = new JTable();
            table.setModel(model);

共有1个答案

苏昊英
2023-03-14

databasehelper.loaddata()中可能存在一个bug。由于某种原因,它不创建新的模型,但总是返回相同的模型。

databasehelper.loaddata()中创建一个新模型,它应该可以工作。

 类似资料:
  • 本文向大家介绍java数据库连接、查询、更新等,包括了java数据库连接、查询、更新等的使用技巧和注意事项,需要的朋友参考一下 1、java数据库连接、查询、更新 2、连接数据库 这篇文章就介绍到这,下一篇将为大家更好的更相关的文章。

  • 问题内容: 当用户最初单击按钮时,将运行查询,并将每一行放入JPanel中并添加到显示中,以供用户查看。哪个工作正常。 我的问题是,我希望用户能够根据它们提供的值(通过JTextField)过滤这些结果,并且我希望显示的记录随着JTextField值的更改而更新。每次更改JTextField时都会形成并执行我的查询,但是我找不到更新显示记录的方法。 任何帮助,将不胜感激。 该代码花了一些时间进行编

  • 问题内容: 我看到这对笨论坛 考虑以下代码 这显然是您在Codeigniter中这样做的方式 实际上这是行不通的。我看了一下生成的SQL,结果甚至没有提到联接。 有谁知道如何使用Codeigniter的Active Record数据库类对联接进行更新? 问题答案: 我发现的一种解决方案是完全删除联接并将联接条件移到“ where”函数中,此外,您还需要更改更新字符串以包括新表。

  • 问题内容: 如何在相同的条件下运行 and 语句,而不必执行两个查询:一个选择对象一个更新对象 SQL中的等效内容如下所示: 问题答案: 使用queryset 对象方法:

  • 问题内容: 我有一张桌子,大约有17个字段。我需要在此表中执行频繁的更新。但是问题是 每次我可能只更新几个字段 。在这种情况下,编写查询以进行更新的最佳方法是什么?我正在寻找一个选项,其中 值仅在不为null时才更新 。 例如,我在数据库Say A,B,C,D中有四个字段。用户更新say D的值。所有其他值保持不变。因此,我需要一个更新查询,该查询仅更新D的值,而其他值保持不变。因此,如果我将a,

  • 问题内容: 我使用下面的代码 来更新查询 使用。 但是我越来越。 我尝试搜索一些SO链接,建议关闭数据库,但是我再次遇到相同的错误。我已经提到我在代码中出现错误的地方。 问题答案: 通常,如果您同时进行多个查询(您没有完成一些早期的SQL语句,或者您打开了多个线程,或者您多次打开了数据库),就会得到此信息。 这段代码对和的使用有些混乱,(和缺少),这可能是问题的根源。 在《 SQLite C /