Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.sql.SQLException:在结果集开始之前_Java_Sql Server - Fatal编程技术网

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");

这里我附上了我的代码,它显示了如下错误: java.sql.SQLException:

在结果集开始之前,我在这里做错了什么:

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 on
area
?为什么要问第二个问题?您可以更新
qry
以加入注册表吗?同意目前为止的所有内容(您不应该在
rs
的迭代中重新分配
rs
,您应该在SQL查询中有一个
WHERE
子句,而不是选择所有内容。)此外,决不,永远不要使用原始连接来生成具有来自任何用户的值的查询(例如可能来自
city
列)。你必须,必须,必须使用参数化。去研究“SQL注入”来找出原因。