java - 需要有关修复我的 JAVA 查询语句的建议吗?

标签 java oracle rft

我的 JAVA 脚本包含 2 个 JAVA 类:RMSqueryRMSRMS 类中,我调用了 queryRMS 类中的方法

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

    for (int i = 1; i <= itemCount; i++) {
        GlobalVariables.numberRow = i;
        JavaDatapool.settings();

        String item = queryRPM.connectDB_Multi(configFile,"SELECT ITEM FROM ORDSKU WHERE ORDER_NO  = '" + orderNo + "' ORDER BY ITEM ASC",i);
        JavaDatapool.writeXLS("item",item,GlobalVariables.sheetXLS);
        sleep(1);

    }

查询RMS JAVA类

public static String connectDB_Multi(String configFile, String query, int i) throws FileNotFoundException, IOException, SQLException, ClassNotFoundException{
    Properties p = new Properties();
    p.load(new FileInputStream(configFile));

    String serverName = (p.getProperty("RMS_DBServerName"));
    String portNumber = (p.getProperty("RMS_PortNumber"));
    String sid = (p.getProperty("RMS_SID"));
    String url = "jdbc:oracle:thin:@//" + serverName + ":" + portNumber + "/" + sid;
    String username = (p.getProperty("RMS_Username"));
    String password = (p.getProperty("RMS_Password"));
    //  jdbc:oracle:thin:@//localhost:1521/orcl

    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection connection = DriverManager.getConnection(url,username,password);     
    String setr = null;
    try {      
        Statement stmt = connection.createStatement();

        try {ResultSet rset = stmt.executeQuery(query);
            try {
                while(rset.absolute(i))   
                    setr = rset.getString(1);
                    return setr;  
            }        
            finally {
                try { rset.close(); 
                } 
                catch (Exception ignore) {}

            }
        } 
        finally {
            try { stmt.close(); 
            } 
            catch (Exception ignore) {}
        }
    } 
    finally {
        try { connection.close(); 
        } 
        catch (Exception ignore) {}

    }
}

所以它所做的是调用 connectDB_multi 类,然后返回字符串,下一部分将其保存在 Excel 工作表中。

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

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

原始包含部分 while(rset.next()) 而不是 while(rset.absolute(i)) 但接下来每次只返回第一行。因此,当仅从数据库中检索到一列和一行时,该脚本可以正常工作。

最佳答案

你的逻辑看起来有点困惑。

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

从 ORDSKU 中选择商品,其中 ORDER_NO = '"+ orderNo + "' ORDER BY ITEM ASC

itemCount 次数。每次执行它时,您都在尝试访问第 n:th 行,n 是循环计数器。你看到那里有问题吗?您如何知道查询将返回 itemCount 行数?因为如果不存在,它将失败,因为您试图访问不存在的行。

我怀疑你想做的是这样的

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

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

关于java - 需要有关修复我的 JAVA 查询语句的建议吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8266124/

相关文章:

java - Hibernate Validation 6.0 ListValueExtractor.extractValues 似乎对大型列表的性能很差

java - 像这样使用继承是个坏主意吗

oracle - 如何在PL/SQL Developer中调试流水线函数?

java - 在 RFT 中输出数据池中的特定记录

java - 如何将 "regexp1 and regexp2"编码为正则表达式?

java - 较大的小数和浮点输出上的 "E"或 "e"字符是什么意思?

java - 尝试通过鼠标点击来切换灯光

sql - oracle —将oracle表中的多个用逗号分隔的值拆分为多行

sql - 特定部门员工的最高工资

java - 如何获取对应于notes、totalqtypctmin、totalqtypctmax、mismatchthresholdpct、prodgrp、prodid、locgroup、geoid的给定xml文件的数据?