MySQL返回NPE从表中获取ID(作为字符串)

J. *_*Doe 0 java sql jdbc

private UUID getClientID(String username) {
    try {
        String query = "SELECT id FROM `client_table` WHERE username=" + username;
        stmt = connection.prepareStatement(query);
        ResultSet rs = stmt.getResultSet();
        return UUID.fromString(rs.getString(2));
    } catch (Exception e) {
        e.printStackTrace();
    }

    return null;
}
Run Code Online (Sandbox Code Playgroud)

桌子:

id用户名密码create_date

id = c235a95d-58e7-4454-90ea-58396a00a3c5用户名= myUsername密码= [BLOB - 16 B] create_date = Fri Apr 28 09:34:49 BST 2017

那为什么它会返回null?我想我做错了ResultSet.

YCF*_*F_L 5

字符串应该在两个之间'username',你已经使用了,PreparedStatement所以改为使用:

String query = "SELECT id FROM `client_table` WHERE username= ?";
stmt = connection.prepareStatement(query);
stmt.setString(1, username);
ResultSet rs = stmt.executeQuery();
if(rs.next()){
   return UUID.fromString(rs.getString(1));
}else{
   return null;//id not found
}
Run Code Online (Sandbox Code Playgroud)

注意

  1. 您的查询只返回一个字段,因此使用rs.getString(2)没有第二个字段是错误的
  2. 您必须执行该语句,然后使用它rs.next()来获得结果