Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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程序在循环唯一行结果集时未进入内部_Java_Jdbc_Oracle9i - Fatal编程技术网

java程序在循环唯一行结果集时未进入内部

java程序在循环唯一行结果集时未进入内部,java,jdbc,oracle9i,Java,Jdbc,Oracle9i,我有一个结果集,应该包含1行(我已经测试过了)。我的程序没有进入而(rs2.next())循环,调试后我注意到了这一点。这就是为什么我得到SQLException:不是所有变量都绑定 ResultSet constitues = cnx.createStatement().executeQuery(Request.getConstitues()); while(constitues.next()){ PreparedStatement p

我有一个结果集,应该包含1行(我已经测试过了)。我的程序没有进入
而(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.”。这样做有时会起作用并得到结果。。