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

使用代码从数据库创建jtable,并在其中显示数据库表记录

璩浩广
2023-03-14

我正试图在我的jFrame中添加一个jTable,我想将数据库表中的记录显示到jTable中。

我能够创建一个jTable(我将代码放在构造函数中),并在代码中手动输入要显示的值。奏效了。但是当我试图调用一个从数据库中检索数据的方法,并试图在JTable中显示这些数据时。它给我一个错误“NullPointerException”。

构造函数中创建表的代码:

    String[] columnname = {"Subject Code", "Prelim", "Midterm", "SemiFinal", "Finals"};
    setTable();
    Object[][] data = {};

    gradetable = new JTable(data, columnname){
        public boolean isCellEditable(int data, int columns){
            return false;
        }

        public Component prepareRenderer(TableCellRenderer r, int data, int columns){
            Component c = super.prepareRenderer(r, data, columns);

            if (data % 2 == 0){
                c.setBackground(Color.GRAY);
            }
            else{
                c.setBackground(Color.WHITE);
            }

            if (isCellSelected(data, columns)){
                c.setBackground(Color.ORANGE);
            }
            return c;
        }
    };
    gradetable.setPreferredScrollableViewportSize(new Dimension (400, 150));
    gradetable.setFillsViewportHeight(true);
    jsp = new JScrollPane(gradetable);

方法从数据库中检索数据并将其添加到表中:

private void setTable(){
    DefaultTableModel model = (DefaultTableModel)gradetable.getModel();
    try
    {
        Class.forName("com.mysql.jdbc.Driver");            
        Connection con = (Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/grading","root","");
        Statement st = con.createStatement();      
        String sql = "SELECT * FROM student INNER JOIN grade ON student.idnumber = grade.idnumber WHERE student.idnumber = '2010-00125'";
        ResultSet rs = st.executeQuery(sql);
        model.setRowCount(0);
        while (rs.next()){

            //this.setName(rs.getString("name"));
            //this.setCourse(rs.getString("course"));
            //this.setYear(rs.getString("year"));

            String d1, d2, d4, d3, d5;

            d1 = rs.getString("subjectcode");
            d2 = rs.getString("prelim");
            d3 = rs.getString("midterm");
            d4 = rs.getString("semifinal");
            d5 = rs.getString("finals");

            model.addRow(new Object[]{d1,d2,d3,d4,d5});
        }           
        rs.close();
        con.close();
    }catch(ClassNotFoundException | SQLException ex){
            JOptionPane.showMessageDialog(null, ex);            
    }
}

共有1个答案

谢璞
2023-03-14

出现NPE的原因是您正在调用settable,它试图在这里获得JTable模型:

DefaultTableModel model = (DefaultTableModel)gradetable.getModel();

这是在实际实例化gradeTable之前,因此抛出NPE

除此之外,在设置JTable的模型时,您需要使用DefaultTableModel,否则您将在这一行上得到ClassCastException

 类似资料:
  • 问题内容: 我正在使用jdbc编写程序,该程序将成为数据库的接口(类似于CRUD应用程序)。我假设我必须编写一个类(例如),该类将对数据库执行所有操作(以及可能会简化为这些操作的某些其他逻辑)。用户界面由一组表和一些按钮组成。要使用Jtable,我需要实现一个类(例如),它是AbstractTableModel的子类。因此,此类将向用户显示我的数据。我需要为数据库架构中的所有表实现这种模型。我不想

  • 我直接下载了C:\中的derby,并设置了DERBY_INSTALL和CLASSPATH变量: 因此它显示ij>,并且我能够使用命令行SQL语句创建数据库。但我必须使用Java代码创建数据库及其表。所以我在下面的源代码,但我不知道在哪里粘贴它和如何运行它。当我将它粘贴到db-derby-10.9.1.0-bin>bin文件夹中,并尝试使用'java MainClass komaldb c:\'在该

  • 数据库显示 show databases; mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | app_blogcurder | | auth_demo | | canzhieps

  • 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 知道怎样输入命令,便可以访问数据库了。 假定在你的家(你的“动物园”)中有很多宠物,并且你想跟踪关于它们各种类型的信息。你可以通过创建表来保存你的数据并根据所需要的信息装载他们,然后你可以从表中检索数据来回答关于动物不同种类的问题。本节显示如何做到所有这些事情: ·创建数据库 ·创建数据

  • 注意:用户界面已经在 Dreamweaver CC 和更高版本中做了简化。因此,您可能在 Dreamweaver CC 和更高版本中找不到本文中描述的一些选项。有关详细信息,请参阅此文章。 关于数据库记录 显示数据库记录涉及检索储存在数据库或其它内容源中的信息,以及将这些信息呈现到网页上。Dreamweaver 提供了许多显示动态内容的方法,并提供了若干内置的服务器行为,使您可以增强动态内容的表现

  • 我试图在phpmyadmin中为我的服务器构建一个数据库,但是当我完成构建后,我无法使用PHP访问它,并且当我在MySQL中列出数据库时,它也不会显示出来。但当我在mySql中创建数据库时,它会显示在phpmyadmin中。另外,我正在运行phpmyadmin版本4.0.3,页面底部有一条声明说