使用带有 SQL WHERE 子句的 Java 变量从结果集中获取主键值

Getting primary key value from resultset by using Java variable with SQL WHERE clause

我知道使用这样的技术根本不是很好的做法,因为它很容易 SQL 注入,但为了速度和测试,这是我目前正在做的。我正在创建一个将用户名、IP 和数据库名称保存到另一个数据库的程序。但是,当我尝试执行如下语句时:

ResultSet rs = stmt.executeQuery("SELECT LoginID, IPAddress FROM slavelogins WHERE IPAddress = '" + inputString + "';");
            String ClientID = String.valueOf(rs.getInt(1));
            System.out.println("Client ID: " + ClientID);
        } catch (SQLException err) {
            System.err.println("Error retrieving client id, please continue later!" + err);
            System.exit(0);

然后我 运行 进入一个错误,它说该值在结果集开始之前,我相信这意味着没有从数据库中检索到数据,有没有办法解决这个问题或解决方法这个还是我没有意识到的更简单的方法?

P.S LoginID 是主键,如果这会产生任何问题。

上面的代码检索登录 ID 并将其显示给用户 'ClientID: ' + rs.getInt(1) 其中 rs.getInt 应该是登录 ID。

我也看过关于在准备语句中使用占位符的帖子,但我还没有看到任何关于在普通语句中使用 select 查询的帖子。

错误信息:

Error retrieving client id, please continue later! java.sql.SQLException: Before start of result set

您可以将 ResultSet 视为您查询过的行上的光标。无论它的位置是什么,您都可以使用 next() 检查那里是否还有另一行,然后将光标移动到它。

结果的第一行没有什么不同 - 在第一行之前ResultSet开始,您需要使用next()移动到那一行:

if (rs.next()) {
    String clientID = String.valueOf(rs.getInt(1));
    System.out.println("Client ID: " + clientID);
} else {
    System.out.println("No such client");
}