java.sql.SQLException:对空结果集的非法操作。dor select语句
我试图从testcase表中获取值,但它抛出java.sql.SQLException:对空结果集和 这是我的密码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);
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。