Java Sqlite数据库返回空指针异常,但返回数据除外

时间:2018-10-04 17:43:05

标签: java swing sqlite jdbc

我正在用Java编写桌面应用程序,并且正在使用SQLite数据库。我正在从SQLite Studio获取数据,并且已获取数据,但是当我在应用程序中获取数据时,我得到的是空指针。

下面是连接数据库并与db相关的函数的数据库管理器类:

数据库类:

public class DBManager {
Connection con=null;//build connection
Statement stmt=null;//execute query
static PreparedStatement pst= null;
public DBManager(){
    try {
        Class.forName("org.sqlite.JDBC");
        String url="jdbc:sqlite:mobileDB.db";
        con=DriverManager.getConnection(url);
        stmt=con.createStatement();
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }
}
public void insertUpdateDelete(String query){
    try{
        stmt.execute(query);
    }catch(Exception ex){
        System.out.print(ex.toString());
    }
}
public ResultSet select(String query){
    try{
        ResultSet rs= stmt.executeQuery(query);
        return rs;
    }catch(Exception ex){
        ex.printStackTrace();
        return null;
    }
}
public ResultSet getLogInRecord(String user,String pass, String role) throws SQLException {
    String query="select * from Users where Username=? and Password=? and Role=?";
    pst.setString(0, user);
    pst.setString(1, pass);
    pst.setString(2, role);
    pst=con.prepareStatement(query);
    ResultSet rs=pst.executeQuery();
    return rs;

}

函数调用:

btnLogin.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                String username=txtUsername.getText(),password=txtPass.getText(),role=cmbRole.getSelectedItem().toString();
                if(username.equals("")||password.equals("")||role.equals("Select")) {
                    JOptionPane.showMessageDialog(frame, "Please input all the data. No empty data allowed.","Empty Fields",JOptionPane.ERROR_MESSAGE);
                }else {
                    DBManager dbm= new DBManager();
                    //ResultSet rs= dbm.getLogInRecord(username, password, role);
                    ResultSet rs=dbm.select("select * from Users where Username='admin' and Password='admin' and Role='Admin'");
                    if(rs.next()) {
                        JOptionPane.showMessageDialog(frame, "True","Error",JOptionPane.ERROR_MESSAGE);
                    }else {
                        JOptionPane.showMessageDialog(frame, "False","Error",JOptionPane.ERROR_MESSAGE);
                    }
                }
            }catch (Exception e) {
                JOptionPane.showMessageDialog(frame, e,"Error",JOptionPane.ERROR_MESSAGE);
            }
        }
    });

1 个答案:

答案 0 :(得分:0)

pst.setString(0,user)是导致空指针的行。

pst = con.prepareStatement(query)必须先于它,因为它从未被初始化。

Sooooo

public ResultSet getLogInRecord(String user,String pass, String role) throws SQLException {
   String query="select * from Users where Username=? and Password=? and Role=?";
   pst=con.prepareStatement(query);
   pst.setString(0, user);
   pst.setString(1, pass);
   pst.setString(2, role);
   ResultSet rs=pst.executeQuery();
   return rs;
}