java - 空指针异常什么时候不应该出现?

标签 java mysql database null nullpointerexception

我正在尝试检索与 MySQL 数据库中的用户名关联的用户访问权限。但是我遇到了空指针异常。有人知道为什么吗?我已附加与该方法相关的类的部分。

JIOS_Login_Controller.java:

public class JIOS_Login_Controller extends javax.swing.JFrame {

static private JIOSModel model;
private JIOS_Login_Controller home;
static private String username;
static private String password;
static private String a;


public JIOS_Login_Controller() {
    initComponents();
    username = null;
    password = null;

}

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String sql = "Select * From user_Tbl";
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/abnd251?user=####&password=########");
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery(sql);

        String user = jTextField1.getText();
        String pwd = new String(jPasswordField1.getPassword());
        while (rs.next()) {
            String uname = rs.getString("Username");
            String pword = rs.getString("Password");
            if ((user.equals(uname)) && (pwd.equals(pword))) {
                java.awt.EventQueue.invokeLater(new Runnable() {

                    @Override
                    public void run() {

                        setUsername();
                        String user = new String(getUsername());

                        ArrayList<UPosition> list = null;
                        try {
                          list = model.getPositions(user);
                        } catch (SQLException ex) {
                            Logger.getLogger(JIOS_Login_Controller.class.getName()).log(Level.SEVERE, null, ex);
                        }
                        for (UPosition p : list) {
                            a = p.getPosition();
                        }

                        new JIOS_Home_Controller().setVisible(true);
                        dispose();
                    }
                });
            } else {
                if ((user == null ? (uname) != null : !user.equals(uname)) && (pwd.equals(pword))) {
                    JOptionPane.showMessageDialog(this, "Incorrect Username");
                } else {
                    if ((user.equals(uname)) && (pwd == null ? (pword) != null : !pwd.equals(pword))) {
                        JOptionPane.showMessageDialog(this, "Incorrect Password");
                    } else {
                        if ((user == null ? (uname) != null : !user.equals(uname)) && (pwd == null ? (pword) != null : !pwd.equals(pword))) {
                            JOptionPane.showMessageDialog(this, "Incorrect Username and Password");
                        }
                    }
                }
            }
        }
    } catch (ClassNotFoundException | SQLException | HeadlessException e) {
        JOptionPane.showMessageDialog(this, e.getMessage());
    }
}  

static public String getPosition(){
    return a;
} 

JIOS_Home_Controller.java:

public class JIOS_Home_Controller extends javax.swing.JFrame {

private JIOSModel model;
private JIOS_Home_Controller home;
static private String username;
static private String password;
static private String access;
private String position;


public JIOS_Home_Controller()  {
    initComponents();
    user.setText(""+ JIOS_Login_Controller.getUsername() +"");
    userPosition.setText(""+ JIOS_Login_Controller.getPosition() +"");

}

JIOSModel.java:

public ArrayList<UPosition> getPositions(String user) throws SQLException {
    Connection con = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;

    ArrayList<UPosition> list = new ArrayList<>();

    try {
        con = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/abnd251?user=####&password=########");
        stmt = con.prepareStatement("SELECT Position FROM user_tbl WHERE Username=  '"+ user +"' ");
        rs = stmt.executeQuery();
        while (rs.next()) {
            UPosition p = new UPosition();
            p.setPosition(rs.getString("Position"));
            list.add(p);
        }
    } finally {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException se) {
            }
        }
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException se) {
            }
        }
        if (con != null) {
            try {
                con.close();
            } catch (SQLException se) {
            }
        }
    }

    return list;
}

谁能帮帮我,我已经被这个问题困扰好几天了!!

附注我知道我的 SQL 语句并不出色,并且容易受到 SQL 注入(inject)攻击(所以我被告知),但这不是这里的问题!

最佳答案

您需要初始化

JIOSModel model;

类似这样的事情:

model = new JIOSModel();

关于java - 空指针异常什么时候不应该出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17502806/

相关文章:

java - 这个文件扫描器代码有什么问题?

java - 没有找到适合 write(String) 的方法

php - MySQL 表未找到或未显示

PHP MySQL 用表行显示数据(可点击)

php - 使用框架将独立脚本连接到 joomla DB

c# - 如何用新信息更新数据库

mysql - 哪个查询在 MySql 中执行得更快

java - InDesign Server (5.5),pdf 预设似乎不起作用

java - 点运算符 `.`(在通用参数之前)是什么意思?

php - 在 Yii2 中将记录插入数据库