变量只能在此位置为null结果集

时间:2019-06-25 06:24:18

标签: java jdbc prepared-statement

对编码来说是新手,只想使用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只能在此位置为空。

2 个答案:

答案 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();