我正在用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);
}
}
});
答案 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;
}