从数据库中检索数据并将结果保存为java列表中的行

问题描述 投票:0回答:2

我使用Java查询Oracle数据库,其中每个我选择500行40列。当我在结果集(rs)中有它时,我想将结果作为扁平线保存到java列表中。我有这样的事情:

    while(rs.next()){
        String row="";
        for(int i=1; i<=columnCount; i++){
            row += " " + rs.getString(i);           
        }
         javaLIst.add(row);
    }

它工作正常,但根本没有效率。这需要大约16秒,所以我负担不起,因为我做了很多次。

谁能告诉我如何从数据库中检索数据并以更有效的方式将结果保存到java列表中,好吗?

java database oracle
2个回答
1
投票

我之前有一个类似的问题,我发现问题不在于逻辑或它的实现方式。问题在于获取大小。 Oracle JDBC(如果我没记错的话)是10,所以你在每10条记录之后从数据库中检索记录,即500条记录的50次。

增加Statement.Fetchsize让我们说50,看看这是否会提高你的表现。根据您的性能要求调整此参数。

看看这个链接是否有助于https://docs.oracle.com/cd/E18283_01/java.112/e16548/resltset.htm#i1023619

希望这可以帮助。


0
投票

如果你想将所有40列连接成一个单独的字符串,那么我看不到在某处进行连接的方法。要考虑的另一种方法可能是直接在Oracle中构建您想要的字符串,例如:

SELECT col1 || ', ' || col2 || ', ' || ... || col40 AS output
FROM yourTable

然后,您的Java代码只关注单个字符串字段output。除了从每个记录的冗长串联中节省Java之外,在将结果集从Oracle发送到Java方面,您还可以节省一些开销。

根据@JBNizet的评论,如果你想坚持你当前的方法,你可以尝试使用StringBuilder来连接而不是原始的String

while (rs.next()) {
    StringBuilder sb = new StringBuilder("");
    sb.append(rs.getString(0));
    for (int i=1; i <= columnCount; i++) {
        sb.append(", ").append(rs.getString(i));
    }
    // add a complete row string here
    javaList.add(sb.toString());
}
© www.soinside.com 2019 - 2024. All rights reserved.