需要关于修复JAVA查询语句的建议吗?

需要关于修复JAVA查询语句的建议吗?,java,oracle,rft,Java,Oracle,Rft,我的JAVA脚本由两个JAVA类组成:RMS,queryRMS 在RMS类中,我调用queryRMS类中的方法 RMS Java类(我省略了开始执行部分,下面只是方法) 因此,它所做的是调用connectDB\u multi类,然后返回下一部分保存在Excel工作表中的字符串 循环应返回所有行,一次一行,然后将其保存在Excel工作表中 在第二次In循环中,查询出现故障,尽管查询应返回由2行组成的1列 原始版本包含while(rset.next())部分,而不是while(rset.absolu

我的JAVA脚本由两个JAVA类组成:
RMS
queryRMS
RMS
类中,我调用
queryRMS
类中的方法

RMS Java类(我省略了开始执行部分,下面只是方法)

因此,它所做的是调用
connectDB\u multi
类,然后返回下一部分保存在Excel工作表中的字符串

循环应返回所有行,一次一行,然后将其保存在Excel工作表中

在第二次In循环中,查询出现故障,尽管查询应返回由2行组成的1列

原始版本包含
while(rset.next())
部分,而不是
while(rset.absolute(i))

但是下次每次只返回第一行。因此,当从数据库中只检索到一列和一行时,脚本就会工作。

您的逻辑看起来有点混乱

看看你发布的第一个循环。您正在有效地执行:

从ORDSKU中选择项目,其中订单号=“+orderNo+”,按项目ASC排序

itemCount
次数。每次执行它时,您都试图访问第n行,n是循环计数器。你觉得有什么问题吗?您如何知道查询将返回itemCount行数?因为如果不这样做,它将失败,因为您正试图访问一个不存在的行

我猜你想做的是这样的事情

Statement stmt = connection.createStatement();
ResultSet rset = stmt.executeQuery(query);
while(rset.next()) {
    JavaDatapool.writeXLS("item",rset.getString(1),GlobalVariables.sheetXLS);
}
....
while(rset.next()) {
    JavaDatapool.writeXLS("item",item,GlobalVariables.sheetXLS);
}

您还应该认真考虑使用某种形式的连接池来避免重新打开新连接,因为这是一个非常耗时的操作。

< P>此代码看起来非常低效,对于要从数据库中取出的每一行,您都要读取属性文件,创建连接,选择所有匹配的行,向前跳到所需的行并仅返回该行。(或者至少我认为这就是你想要做的)

你的代码

while(rset.absolute(i))   
    setr = rset.getString(1);
可能是一个无限循环,因为只要可以转到同一行,它将继续转到该行,因此该行不存在(while存在)或该行确实存在(while永远继续)

您可能应该重新构造您的程序,以便只执行一次选择并读取所需的所有行,并将它们存储在excel文件中。执行此操作时,您可以进行调试,以查看是否确实获得了预期的数据

除了创建新连接和每行查询一次的低效代码外,您如何知道需要多少行

我想最终你会想要这样的东西

Statement stmt = connection.createStatement();
ResultSet rset = stmt.executeQuery(query);
while(rset.next()) {
    JavaDatapool.writeXLS("item",rset.getString(1),GlobalVariables.sheetXLS);
}
....
while(rset.next()) {
    JavaDatapool.writeXLS("item",item,GlobalVariables.sheetXLS);
}

睡眠(1)支持实现了什么?

仅供参考:如果您在逻辑或pap的解决方案中频繁地打开和关闭语句,则会出现“java.sql.SQLException:ORA-01000:超过最大打开游标数”错误消息


我建议你不要“太笼统”。我看到很多OOP程序员过度概括,这很痛苦。你应该按照一个目标进行设计,目标不应该只是“对齐”或“代码看起来漂亮”,它必须有设计的目的。

GlobalVariables.numberRow
<代码>JavaDatapool.settings()
?这是什么类型的库?用于重置的行数和excel SheetName“查询出错”是什么意思?代码的构建方式是,没有JAVA经验的其他用户可以使用该代码。他们唯一需要做的就是调用不同的方法。这就是为什么它效率很低的原因,如果我按照自己的方式构建代码,它会容易得多。我尝试了您现在编写的代码,我又开始了,它只返回1个itemnumber(1行)而不是2 2。您确定查询实际返回多行吗?是的,我确定当我运行查询时,它返回列“item”的两个itemNumber,那么可能是您的JavaDatapool.writeXLS方法。此方法工作不正常,并用第二个值覆盖第一个值。