java.sql.SQLException:在结果集开始之前
这里我附上了我的代码,它显示了如下错误: java.sql.SQLException: 在结果集开始之前,我在这里做错了什么:java.sql.SQLException:在结果集开始之前,java,sql-server,Java,Sql Server,这里我附上了我的代码,它显示了如下错误: java.sql.SQLException: 在结果集开始之前,我在这里做错了什么: String qry = "SELECT * From register "; stmt = (PreparedStatement) conn.prepareStatement(qry); rs = stmt.executeQuery(); while (rs.next()) { String area = rs.getString("city");
String qry = "SELECT * From register ";
stmt = (PreparedStatement) conn.prepareStatement(qry);
rs = stmt.executeQuery();
while (rs.next()) {
String area = rs.getString("city");
if(city.equals(area)){
System.out.println("!!!!!!It matched: " + city);
String qry2="select state from register where city='"+city+"'";
System.out.println(qry2);
stmt = (PreparedStatement) conn.prepareStatement(qry2);
rs = stmt.executeQuery();
String state=rs.getString("state");
System.out.println("state: " + state);
break;
} else {
//System.out.println("No match with: " + area);
}
}
您可以在query1结果集循环中为query2使用新的ResultSet对象
String qry2="select state from register where city='"+city+"'";
System.out.println(qry2);
stmt = (PreparedStatement) conn.prepareStatement(qry2);
ResultSet rs2 = stmt.executeQuery();
String state=rs2.getString("state");
但是一般来说,更好地使用JDBC资源,一路迭代结果集1,收集返回的所有“城市”值,然后循环调用query2的“城市”结果,以获得与“城市”关联的“状态”,而不是您所显示的状态。代码中不需要第二个结果集。州和市都可以在同一个结果集中找到。您可以使用以下代码:
String qry = "select * from register";
PreparedStatement stmt = (PreparedStatement) conn.prepareStatement(qry);
rs = stmt.executeQuery();
while (rs.next()) {
String area = rs.getString("city");
if(city.equals(area)){
System.out.println("!!!!!!It matched: " + city);
String state=rs.getString("state");
System.out.println("state: " + state);
break;
} else {
//System.out.println("No match with: " + area);
}
}
这段JDBC代码毫无意义。不能在结果集上迭代并在中间流中更改值。你在干什么?达菲是对的,你应该在旧的查询之外进行新的查询。什么是
qry
?当查询WHERE子句中应包含area
时,为什么会出现if onarea
?为什么要问第二个问题?您可以更新qry
以加入注册表吗?同意目前为止的所有内容(您不应该在rs
的迭代中重新分配rs
,您应该在SQL查询中有一个WHERE
子句,而不是选择所有内容。)此外,决不,永远不要使用原始连接来生成具有来自任何用户的值的查询(例如可能来自city
列)。你必须,必须,必须使用参数化。去研究“SQL注入”来找出原因。