【问题标题】:Troubles getting results from ResultSet从 ResultSet 获取结果的问题
【发布时间】:2016-04-15 00:37:08
【问题描述】:

如何拥有一个包含从结果集中获得的所有记录的 var?

到目前为止,我有这个代码:

    while (rs.next()) {
        for (int i = 1; i <= columnCount; i++) {
            String resultado = "";
            resultado = rs.getString(i);
            columnValue += resultado;
        }
        jTextPane2.setText(jTextPane2.getText() + columnValue + ", ");
    }

我希望当 resultadors.getString(i) 获取值时,填充 var columnValue 以便我有一个 var 应该包含我从 rs 获得的所有记录,但不工作。有什么帮助吗?

我得到的结果是:

(id_tlf, cod_area)

1+58、1+582+104、1+582+1043+60

如您所见,前 2 个结果在每一行中重复

【问题讨论】:

标签: java sql resultset


【解决方案1】:

请更喜欢 StringBuilder 而不是创建大量 String 临时值(它们会污染实习生缓存)。接下来,您不需要将每一列存储在另一个局部变量中。基本上,我会做类似的事情

StringBuilder sb = new StringBuilder();
while (rs.next()) {
    for (int i = 1; i <= columnCount; i++) {
        if (i != 1) {
            sb.append(", ");
        }
        sb.append(rs.getString(i));
    }
    sb.append(System.lineSeparator());
}
jTextPane2.setText(sb.toString());

注意上面清除了jTextPane2,如果你打算追加,那么你可以将第一行更改为类似

StringBuilder sb = new StringBuilder(jTextPane2.getText());
sb.append(System.lineSeparator()); // <-- start the next line... and then iterate rs

【讨论】:

  • rs.getString(i) 将失败 i = 0。 JDBC 参数是从 1 开始的。
【解决方案2】:

不确定我是否理解正确,但可能是这样的:

while (rs.next()) {
    for (int i = 1; i <= columnCount; i++) {
         String resultado = "";
         resultado = rs.getString(i);
         columnValue+=resultado;
    }
    columnValue+=", ";
}
jTextPane2.setText(columnValue);

【讨论】:

  • 我建议不要在循环中执行string += string。使用StringBuilder()
【解决方案3】:

你的问题是你的 columnValue 和你的 jTextPane。

当您想将文本添加到 jTextPane 时,您正在添加文本窗格中已有的文本,并添加 columnValue 文本(已经在文本窗格中)。

在您的 for 循环中,您编写以下内容以获得结果:

columnValue+=resultado;

这里应该写

columnValue=resultado;

这应该可以解决您的问题。

希望能帮到你。

最好的问候。列夫卡兹

【讨论】:

    【解决方案4】:

    您在每次内部迭代中累积列值(每次外部迭代都不会重新初始化为空字符串):

    columnValue+=resultado;
    

    你正在累积每次外部迭代的总消息:

    jTextPane2.setText(jTextPane2.getText() + columnValue + ", ");
    

    选择一个:-)


    我建议使用 (Java 8) StringJoiner,并且只在循环结束时更新 jTextPane2

    StringJoiner sj = new StringJoiner(", ");
    while (rs.next()) {
        StringBuilder columnValue = new StringBuilder();
        for (int i = 1; i <= columnCount; i++) {
            columnValue.append(rs.getString(i));
        }
        sj.add(columnValue.toString());
    }
    jTextPane2.setText(sj.toString());
    

    【讨论】:

    • 我建议不要在循环中执行string += string。使用StringBuilder()。并删除双;
    猜你喜欢
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    相关资源
    最近更新 更多