通过将Java变量与sql WHERE标记结合使用,从结果集中获取主键值

问题描述

我知道使用这样的技术根本不是一个好习惯,因为它很容易进行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 retrieivng client id,please continue later!" + err);
            System.exit(0);

然后我遇到一个错误提示该值在结果集开始之前,我认为这意味着没有从数据库中检索到的数据,是否有解决此问题的方法解决此问题的方法,或者是一种更简单的方法?我没意识到吗?

如果出现任何问题,PS登录ID是主键。

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

我还看到了有关在Preparedstatement中使用占位符的帖子,但是我在普通语句中没有看到有关选择查询的任何内容

错误消息: 检索客户端ID时出错,请稍后再继续! java.sql.sqlException:结果集开始之前

解决方法

您可以将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");
}