需要关于修复JAVA查询语句的建议吗?
我的JAVA脚本由两个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
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方法。此方法工作不正常,并用第二个值覆盖第一个值。