java.sql.SQLException:对空结果集的非法操作。dor select语句

java.sql.SQLException:对空结果集的非法操作。dor select语句,java,sql,sql-server,jsp,servlets,Java,Sql,Sql Server,Jsp,Servlets,我试图从testcase表中获取值,但它抛出java.sql.SQLException:对空结果集和 这是我的密码 try { tcID=con.prepareStatement("select tc_id,tc_name from testcase where project_id=? and tc_id=? "); tcID.setString(1,project); tcID.setString(2,tciD);

我试图从testcase表中获取值,但它抛出java.sql.SQLException:对空结果集和 这是我的密码

try {
            tcID=con.prepareStatement("select tc_id,tc_name from testcase where project_id=?  and tc_id=? ");
            tcID.setString(1,project);
            tcID.setString(2,tciD);
            ResultSet rs = tcID.executeQuery();
            System.out.println("Loop TC ID....."+rs.getString("tc_id"));
            System.out.println("Loop TC Name......"+rs.getString("tc_name"));
            while(rs.next()){
                System.out.println("Inside While.....");
                ps = con.prepareStatement("insert into execution_testcases (project_id, Rel_id, testcase_id, testcase_name, Flag) values(?,?,?,?,?)");
                ps.setString(1, project);
                ps.setString(2, RelName);
                ps.setString(3, rs.getString("tc_id"));
                ps.setString(4, rs.getString("tc_name"));
                ps.setString(5, "true");
                ps.executeUpdate();
            }
            String cmd= "java -jar D:\\FrameworkCodeDev\\Backups\\WebDriverJarFiles\\Build Release\\Framework_TAF_V10.jar";
            Runtime.getRuntime().exec(cmd);
        } catch (SQLException e) {          
            e.printStackTrace();
        }

谢谢。

如果没有数据,您将无法从
ResultSet
中获取字符串。在调用
rs.getString()
之前,您需要检查是否有数据,您可以使用
isBeforeFirst()
来执行此操作

    ResultSet rs = tcID.executeQuery();
    if(rs.isBeforeFirst()) {
        System.out.println("Loop TC ID....."+rs.getString("tc_id"));
        System.out.println("Loop TC Name......"+rs.getString("tc_name"));
        while(rs.next()){
            System.out.println("Inside While.....");
            ps = con.prepareStatement("insert into execution_testcases (project_id, Rel_id, testcase_id, testcase_name, Flag) values(?,?,?,?,?)");
            ps.setString(1, project);
            ps.setString(2, RelName);
            ps.setString(3, rs.getString("tc_id"));
            ps.setString(4, rs.getString("tc_name"));
            ps.setString(5, "true");
            ps.executeUpdate();
        }
    } else {
        System.out.println("No data in RS!");
    }

原始答案链接:

当您试图打印空结果集的元素时,System.out.println语句中存在问题。您应该尝试删除它们:

try {
    tcID=con.prepareStatement("select tc_id,tc_name from testcase where project_id=?  and tc_id=? ");
    tcID.setInt(1,project);
    tcID.setInt(2,tciD);
    ResultSet rs = tcID.executeQuery();

    while(rs.next()){
        System.out.println("Inside While.....");
        ps = con.prepareStatement("insert into execution_testcases (project_id, Rel_id, testcase_id, testcase_name, Flag) values(?,?,?,?,?)");
        ps.setString(1, project);
        ps.setString(2, RelName);
        ps.setString(3, rs.getString("tc_id"));
        ps.setString(4, rs.getString("tc_name"));
        ps.setString(5, "true");
        ps.executeUpdate();
    }
    String cmd= "java -jar D:\\FrameworkCodeDev\\Backups\\WebDriverJarFiles\\Build Release\\Framework_TAF_V10.jar";
    Runtime.getRuntime().exec(cmd);
} catch (SQLException e) {          
    e.printStackTrace();
}

我认为您应该删除System.out.println(“循环tcid…”+rs.getString(“TC_ID”);System.out.println(“循环TC名称……”+rs.getString(“TC_名称”);在我删除while(rs.next())并处理i-Guneli之前,我已经删除了sout并运行了相同的程序,但它并没有进入while循环,但是所有corect只从jquery获取精确的参数,并且在bdHi中有值。您确定您的查询正在返回数据吗?从testcase中选择tc_id、tc_name,其中project_id=1和tc_id=250;id 1和250来自UI我在sql工作台中执行的上述查询,并返回数据。不确定是否有意义,但请尝试tcID.setInt(1,project);tcID.setInt(2,tcID);代替setString。@Suganth,你试过了吗?在rs中,isBeforeFirst()对我来说是false。你手动对服务器运行该查询,看看它是否提供任何结果。我已经设置了类似于tcID.setInt(1,1)的值;tcID.setInt(2250);现在,查询正在执行并返回值,但它对setString()不起作用??IIRC不是所有SQL server实现都会动态地键入stringint,因此如果您的
项目id
int
,那么您应该使用
setInt()
,既可以避免无关的类型转换,也可以避免将
250
“250”
进行比较,结果明显为false。