java程序在循环唯一行结果集时未进入内部
我有一个结果集,应该包含1行(我已经测试过了)。我的程序没有进入java程序在循环唯一行结果集时未进入内部,java,jdbc,oracle9i,Java,Jdbc,Oracle9i,我有一个结果集,应该包含1行(我已经测试过了)。我的程序没有进入而(rs2.next())循环,调试后我注意到了这一点。这就是为什么我得到SQLException:不是所有变量都绑定 ResultSet constitues = cnx.createStatement().executeQuery(Request.getConstitues()); while(constitues.next()){ PreparedStatement p
而(rs2.next())
循环,调试后我注意到了这一点。这就是为什么我得到SQLException:不是所有变量都绑定
ResultSet constitues = cnx.createStatement().executeQuery(Request.getConstitues());
while(constitues.next()){
PreparedStatement ps = cnx.prepareStatement(Request.setNewConstitue());
PreparedStatement ps2 = cnx.prepareStatement(Request.getDossierFromNumeroParcelle());
ps2.setInt(1, constitues.getInt("NUM_ORDRE"));
ps2.setInt(2, constitues.getInt("NUM_PARCELLE"));
//rs2 contains one row
ResultSet rs2 = ps2.executeQuery();
// Program is not entering this loop
while(rs2.next()){
ps.setInt(1, rs2.getInt("NUM_DOSSIER"));
ps.setString(2, rs2.getString("INDICE"));
ps.setString(3, constitues.getString("OBSERVATIONS"));
ps.setInt(4, constitues.getInt("TYPE_CONSISTANCE"));
}
ps.executeUpdate();
rs2.close();
ps.close();
}
Request.getConstructions()
是:
select * from PARC_CONSTITUES
Request.setNewConstructe()
是:
Insert into CONSTITUE(NUM_DOSSIER,INDICE,Observation,CODE_CONSISTANCE) values(?,?,?,?)
请求。getDossierFromNumeroParcelle()
是:
select NUM_DOSSIER,INDICE from PARC_PARCELLES where num_ordre = ? and num_parcelle= ?
为什么程序没有进入while循环?我相信如果您将ps.executeUpdate()移动到while(rs2.next())循环中,您的代码将按预期工作。现在,无论您是否得到结果,它都将调用executeUpdate。如果rs2.next()!=如果为true,则您将获得所遇到的错误。我怀疑数据库中没有数据,或者无法从数据库中检索数据 但是在你进行while循环之前,无论如何要检查一下这个条件
boolean isEmpty = ! rs.first();
并打印isEmpty
进行调试
所以用这样的方法
if(!isEmpty)
{
while(rs2.next()){
ps.setInt(1, rs2.getInt("NUM_DOSSIER"));
ps.setString(2, rs2.getString("INDICE"));
ps.setString(3, constitues.getString("OBSERVATIONS"));
ps.setInt(4, constitues.getInt("TYPE_CONSISTANCE"));
}
}
什么是PS2SQL?您测试过SQL以确保它返回行吗?是的,我在dbms端测试过,它总是返回一行。如果rs2返回多行,则执行更新需要在while循环中。否,它总是只返回一条记录如果您发布了您正在准备的SQL语句,这将是有益的。实际上,准备好的语句没有返回任何结果,oracle jdbc驱动程序在绑定参数后无法记录SQL最终请求,这真是一个小问题,我正在尝试安装Log4JDBC作为代理驱动程序,拦截sql请求并显示它们。ya..有时将查询作为字符串传递给ps2.executeQuery();方法,如ps2.executeQuery(sql);其中sql=“some prapared statement.”。这样做有时会起作用并得到结果。。