对编码来说是新手,只想使用Resultset接口创建登录验证,但一直得到NullPointerException。
public static void main(String[] args) {
Connection con = null;
PreparedStatement pstmt=null;
ResultSet rs=null;
int id;
String name;
String qry="select name from jejw5.test where id=? and name=?";
Scanner sc=new Scanner(System.in);
System.out.println("Enter your id");
id=sc.nextInt();
System.out.println("Enter your name");
name=sc.next();
try {
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306?user=root&password=Eagle");
System.out.println("connection established");
pstmt=con.prepareStatement(qry);
pstmt.setInt(1, id);
pstmt.setString(2, name);
if(rs.next()) {
int skill=rs.getInt(1);
System.out.println(skill);
}
else{
System.out.println("invalid user/PW");
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
例外- 线程“主”中的异常java.lang.NullPointerException 在org.rjn.Login.main(Login.java:32)
警告-rs只能在此位置为空。
答案 0 :(得分:4)
您先设置ResultSet rs=null;
,然后再调用方法rs.next()
,所以rs只能在此位置为空。
您需要先执行查询,并且应该没问题:
rs=pstmt.executeQuery();
答案 1 :(得分:3)
您使用变量rs,而没有为其赋予任何值:
ResultSet rs=null;
...
if(rs.next()) {
int skill=rs.getInt(1);
System.out.println(skill);
}
调用rs.next()
时,rs始终为null,从而为您提供NullPointerException。在使用结果集之前,您需要实际执行正在准备的查询:
rs = pstmt.executeQuery();