【问题标题】:Changing label name from database value java.lang.NullPointerException从数据库值 java.lang.NullPointerException 更改标签名称
【发布时间】:2012-12-30 13:55:44
【问题描述】:

我有一个数据库表如下:

CREATE TABLE "AcademicInfo" ("academicid" INTEGER PRIMARY KEY  NOT NULL  UNIQUE , "Title" 
CHAR NOT NULL , "Forename" CHAR NOT NULL , "Surname" CHAR NOT NULL , "Role" CHAR NOT NULL,
"Room" CHAR NOT NULL , "Page" CHAR NOT NULL , "Hours" CHAR NOT NULL , "Phone" CHAR NOT NULL,     
"Mobile" CHAR NOT NULL , "Email" CHAR NOT NULL , "Image" BLOB, "Password" CHAR NOT NULL )

以下类:

public class MainMenu extends JFrame
{
    Academic ac = new Academic();
    Connection conn = JavaConnect.ConnectDB();
    PreparedStatement pst = null;
    String sql; 
    ResultSet rs = null;

    /**
     * Creates new form MainMenu
     */
    public MainMenu() {
        initComponents();
    }

    public void Update_table()
    {
        try {
            String sqlStatement = "SELECT Title, Forename, Surname, Role FROM AcademicInfo ";
            pst = conn.prepareStatement(sqlStatement);
            rs = pst.executeQuery();
            table_academic.setModel(DbUtils.resultSetToTableModel(rs));
        }
        catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
        finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (pst != null) {
                    pst.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException ex) {
                Logger lgr = Logger.getLogger(MainMenu.class.getName());
                lgr.log(Level.WARNING, ex.getMessage(), ex);
            }
        }
    }

    private void table_academicMouseClicked(MouseEvent evt)
    {
        try {
            int row = table_academic.getSelectedRow();
            String table_click = (table_academic.getModel().getValueAt(row, 2).toString());
            String sqlSt = "SELECT * FROM AcademicInfo WHERE Surname='"+table_click+"'";
            pst = conn.prepareStatement(sqlSt);
            rs = pst.executeQuery();

            if(rs.next()) {
                label_name.setText(""+rs.getString("Surname"));
            }
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }
}

我在“table_academicMouseClicked”遇到问题。我的目标是,当在表上单击记录时,它会从数据库中获取确切的姓氏,并适当地设置“label_name”,但在那个阶段我得到了 java.lang.NullPointerException。我只有事件处理程序方法有问题,没有别的问题。我在 AcademicMouseClicked() 做错了什么?

【问题讨论】:

  • 你能粘贴异常堆栈跟踪吗?
  • 您的数据库结构显示SurnameCHAR,而不是String
  • 似乎代码不完整? label_name 声明在哪里?
  • @MrLoreI 之前能够设置标签,尽管在另一个 GUI 上是“CHAR”。
  • @vels4j 一切正常,只是该方法出错

标签: java mysql database swing user-interface


【解决方案1】:

检查你是否在initialize方法中初始化了label_name

label_name = new JLabel();

【讨论】:

  • 是的,在 netbeans 上工作,自动初始化。即使我将label_name.setText(""+rs.getString("Surname")); 替换为System.out.println("Hello");,它也不会执行。之前的东西
  • 故障是没有关闭 pst, rs 每次在别处。
猜你喜欢
  • 2020-05-05
  • 1970-01-01
  • 2017-01-12
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
  • 2013-11-12
相关资源
最近更新 更多