问题描述
我知道使用这样的技术根本不是一个好习惯,因为它很容易进行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");
}