【问题标题】:JAVA DB: Display full row of resultset without iteration over columnJAVA DB:显示整行结果集而不在列上迭代
【发布时间】:2018-05-11 21:44:53
【问题描述】:

有没有什么方法可以显示结果集的所有列而无需遍历列。

基本上,我需要节省for循环部分消耗的处理时间。

【问题讨论】:

  • 您想要一种无需迭代的神奇迭代方式吗?为什么你认为这是可能的?你怎么知道迭代是昂贵的操作?提示,迭代并不昂贵。这是您在循环中编写的代码需要时间。您甚至确定存在性能问题吗?你是怎么决定的?你有什么证据?就目前而言,这个问题无法回答。
  • @JimGarrison 你刚刚用另外 6 个问题回答了他的问题 :(
  • 这叫要求澄清,这就是cmets的作用。
  • 我的代码基本上是从DB中读取数据(sql配置在XML文件中),并将数据写入文件。最初我使用了两次迭代,第一次在阅读时,第二次在写作时。 2 亿条记录需要 4 个多小时。然后我通过在读取过程中引入一个字符串生成器来删除第二次迭代,并将所有 250 列存储在该字符串中,并用管道分隔。现在需要一个多小时。我使用了其他一些性能增强过程,例如线程和并行运行作业。我想知道是否可以进一步提高性能。我希望这能回答你所有的问题。

标签: java resultset


【解决方案1】:

HAVE 遍历结果集行,获取列,没有办法绕过它,即使您使用任何可能给您所有列的包装器,在内部它仍然会迭代每个结果集的行以获取该数据。

如果您想要一种通用的方法来迭代表的所有列,您可以使用这种方法

ResultSetMetaData md = rs.getMetaData(); 
int colCount = md.getColumnCount();  

for (int i = 1; i <= colCount ; i++){  
String col_name = md.getColumnName(i);  
System.out.println(col_name);  
}

【讨论】:

    【解决方案2】:

    即使您的代码没有遍历行,您正在寻找的任何解决方案都可以。

    你不能打印你没有读过的东西。

    更新

    现在我在想,其实是有办法的,但这不是好的做法。但是,问题是您是否可以做到,而不是您是否应该应该,这里什么都没有:

    您可以修改 SQL 查询以将所有行合并为 1 行,在这种情况下,您可以显示结果集中的所有列,而无需遍历行。

    请记住,这不仅是不好的做法,而且您只会在其他地方进行迭代。

    使用 SQL ServerSQL Server: combining multiple rows into one row

    使用 MySQLCan I concatenate multiple MySQL rows into one field?

    使用 OracleSQL Query to concatenate column values from multiple rows in Oracle

    【讨论】:

    • 不能那样做。原因是我有一个逻辑可以在代码中动态转换几列。如果我使用一列并附加所有列,我将无法使用转换逻辑。
    猜你喜欢
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 2011-05-08
    • 2013-05-09
    • 2020-07-09
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多