2016-04-15 58 views
0

如何获取包含从结果集中获取的所有记录的var?从ResultSet中获取结果的问题

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

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

我想,当resultado得到来自rs.getString(i)价值,填补了VAR columnValue让我应该有我从一开始记录的VAR rs,但不起作用。任何帮助?

结果我得到的是:

(id_tlf,cod_area)

1 + 58,1 + 582 + 104,1 + 582 + 1043 + 60

以便你会看到,前两个结果在每一行中重复出现

+0

感谢大家,这真的帮助过我! –

+0

*** FYI:***问题转贴为http://stackoverflow.com/questions/36636693/placing-a-coma-after-a-rs – Andreas

回答

0

您正积累每个内部迭代的列值(不重新初始化为每个外部迭代的空字符串):

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()); 
+0

我建议不要在字符串+ =字符串在一个循环。使用'StringBuilder()'。并删除双';'。 – Andreas

+0

@Andreas:公平点;制作精良。 – AJNeufeld

0

不知道我的理解对不对,但也可能是这样的:

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

我建议不要在循环中执行'string + = string'。使用'StringBuilder()'。 – Andreas

0

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

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

在您的for循环,你写的下面,以获得结果:

columnValue+=resultado; 

在这里,你应该写

columnValue=resultado; 

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

我希望我能帮助你。

此致敬礼。 Levkaz

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 
+1

'rs.getString(i)'将失败'i = 0'。 JDBC参数是基于1的。 – Andreas

+0

@Andreas你是对的。谢谢。编辑。 –