如何解决Java Sqlite数据库返回空指针异常,但返回数据?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (241)

下面是连接数据库的数据库管理器类,并调用与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);
            }
        }
提问于
用户回答回答于

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;
}

扫码关注云+社区

领取腾讯云代金券