从数据库(我的SQL)获取ID返回null

时间:2017-04-21 22:43:53

标签: java sql

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

嗨,这是我的代码和我想要抓取的数据库部分:http://prntscr.com/ezbomi。我想要ID,但它返回null。我认为这是因为查询 - 任何想法?

3 个答案:

答案 0 :(得分:1)

  • 您需要致电(并查看结果)ResultSet#next以获取ResultSet的下一行(如果存在)
  • 获取列值时,您需要使用1而不是2,因为您只需要从1开始请求单个列和列索引
  • 您应该正确使用PreparedStatements,参数并将值绑定到语句
  • 您应该使用try-with-resources来管理您的资源,并确保在您完成后清理它们
  • 我考虑抛弃Exception而不是抓住它,它会有更多的意义而不仅仅是回归null

例如

try (PreparedStatement stmt = connection.prepareStatement("SELECT id FROM `client_table` WHERE username=?")) {
    stmt.setString(1, username);
    ResultSet rs = stmt.getResultSet();
    if (rs.next()) {
        return UUID.fromString(rs.getString(1));
    }
}

看看:

了解更多详情

答案 1 :(得分:0)

您应该在获取数据之前移动ResultSet游标。光标最初指向头部。

rs.next();
return UUID.fromString(rs.getString(2));

答案 2 :(得分:0)

试试这个。丢弃了报价。除非你有充分的理由不这样做,否则你应该总是使用准备好的陈述。您尝试从ResultSet访问第二个元素的任何特殊原因?

private UUID getClientID(String username) {
    try {
        //drop the extra quotes in the SQL statement
        String query = "SELECT id FROM client_table WHERE username = ?";
        //added prepared statement
        PreparedStatement stmt = connection.prepareStatement(query);
        stmt.setString(1, username);
        ResultSet rs = stmt.getResultSet();
        //use 1 to access the first result from the result set
        return UUID.fromString(rs.getString(1));
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
相关问题