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

Java MySQL返回NPE从表中获取ID(作为字符串),java,sql,jdbc,Java,Sql,Jdbc,下表: id用户名密码创建日期 id=c235a95d-58e7-4454-90ea-58396a00a3c5用户名=我的用户名 密码=[BLOB-16 B]创建日期=2017年4月28日星期五09:34:49英国夏令时 那么为什么它会返回null呢?我认为我在结果集字符串应该介于两个'username'之间,并且您已经使用了PreparedStatement,因此请改用: private UUID getClientID(String username) { try {

下表:

id用户名密码创建日期

id=c235a95d-58e7-4454-90ea-58396a00a3c5用户名=我的用户名 密码=[BLOB-16 B]创建日期=2017年4月28日星期五09:34:49英国夏令时


那么为什么它会返回null呢?我认为我在
结果集

字符串应该介于两个
'username'
之间,并且您已经使用了
PreparedStatement
,因此请改用:

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

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

  • 字符串应该介于两个
    'username'
    之间,并且您已经使用了
    PreparedStatement
    ,因此请改用:

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

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

  • 它返回null,因为您的方法正在捕获错误,然后返回null。NPE在哪里?是否有堆栈跟踪?您需要先执行查询,然后才能获得结果集。它返回null,因为您的方法正在捕获错误,然后返回null。NPE在哪里?你有堆栈跟踪吗?你需要先执行查询才能得到结果集。简短有效的回答:)+1非常感谢!当我没有学习教程,也没有导师时,自己解决MySQL问题是非常困难的。@J.Doe你可以使用我已经分享的链接,你可以理解更多的好运:)简短有效的回答:)+1非常感谢!当我没有遵循教程,也没有导师时,自己解决MySQL问题非常困难。@J.Doe您可以使用我已经分享的链接,您可以了解更多的好运:)