我有一个应包含 1 行的结果集(我已经对此进行了测试)。我的程序没有进入 while(rs2.next()) 循环,我在调试后注意到了这一点。这就是为什么我收到 SQLException :并非所有变量都绑定(bind)。
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.getConstitues()
是:
select * from PARC_CONSTITUES
Request.setNewConstitue()
是:
Insert into CONSTITUE(NUM_DOSSIER,INDICE,Observation,CODE_CONSISTANCE) values(?,?,?,?)
Request.getDossierFromNumeroParcelle()
是:
select NUM_DOSSIER,INDICE from PARC_PARCELLES where num_ordre = ? and num_parcelle= ?
为什么程序没有进入 while 循环?
最佳答案
我怀疑数据库中数据不可用或者无法从数据库检索数据。
但是在进行 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"));
}
}
关于java 程序无法进入 while 循环以获得唯一行结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23938276/