我有一个连接并加载数据库的方法。它将所有的用户名和分数保存到一个ResultSet中。目前,我只能逐行将其单独打印到控制台。如何将整个ResultSet保存到一个字符串中,以便可以将其打印到JTextField中?
模型类:
public static void loadDatabase() {
try {
getDb().connectDB();
getDb().createDB();
ResultSet rs = getDb().getScores();
while (rs.next()) {
System.out.print("Username: "+rs.getString(1));
System.out.println(" Score: "+rs.getString(2));
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
控制器类:
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == view.getSubmitButton()) {
Model.getDb().insertScores(view.getUsernameTextField().getText(), Model.getScore()); //insert scores into table
view.getInstructions().setText("Scores: ");
}
}
getInstructions()是一个JTextArea。我想要这句话:
view.getInstructions().setText("Scores: ");
显示分数的完整列表
发布于 2018-05-31 19:38:19
您可以在loadDatabase()
中返回包含所需文本的字符串:
public static String loadDatabase()
在内部,您只需将这些结果保存到一个字符串,而不是打印到控制台:
StringBuilder resultText = new StringBuilder();
while (rs.next()) {
resultText.append("Username: ").append(rs.getString(1)).append(" Score: ").append(rs.getString(2));
}
return resultText.toString();
然后,您需要在调用view.getInstructions().setText("Scores: ");
之前调用loadDatabase()
,并将其添加到该setText。
发布于 2018-05-31 19:41:59
没有比这更简单的了。在迭代时使用StringBuilder连接字符串:
final StringBuilder builder = new StringBuilder();
while( rs.next() ) {
builder
.append("Username: ").append( rs.getString(1) )
.append( "Score: " ).append( rs.toString(2) )
;
}
String allResults = builder.toString();
但是:在问这个问题之前,你有没有问过谷歌?
发布于 2018-05-31 19:42:42
loadDatabase()
内部:
而不是
while (rs.next()) {
System.out.print("Username: "+rs.getString(1));
System.out.println(" Score: "+rs.getString(2));
}
您应该放入:
String[] arrayofScores = null;
while (rs.next()) {
String score= rs.getString(2);
arrayofScores = score.split("\n");
for (int i =0; i < arr.length; i++){
System.out.println(arrayofScores [i]);
}
}
或者你可以按照@Alex GS的建议使用StringBuilder
https://stackoverflow.com/questions/50623261
复制相似问题