将数据从 mySQL 数据库的两列依次打印到 jTextfield 的最佳方法
Best way to print data from two columns of mySQL database to jTextfield one after another
我正在尝试制作一个程序,在该程序中我从用户那里读取输入,即在名为 gname
的文本字段中,并将其值存储到名为 grammar
的字符串中。现在这个输入就是对我的数据库输出进行排序的东西。
数据库看起来像这样
所以当用户在文本字段中输入 G1
时,它应该以这种方式显示记录
A->ab,A-ab,B->b
但是当我使用 if(myRs.next)
时它只显示第一个元素,如果我使用 while(myRs.next()
时它只显示最后一个元素。
当前输出为
这里是代码:
它都在 try catch 块中
String grammar = gname.getText();
myCon = DriverManager.getConnection("jdbc:mysql://localhost:3306/grammar", "root", "");
JOptionPane.showMessageDialog(rootPane, "Connected to database");
mystmt = myCon.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
String query = "SELECT starting_symbol, value from starting_symbol where grammar= '" + grammar + "'";
String query2 = "SELECT non_terminals, terminals from input_values where grammar= '" + grammar + "'";
mystmt.addBatch(query);
mystmt.addBatch(query2);
myCon.setAutoCommit(false);
mystmt.addBatch(query);
mystmt.addBatch(query2);
myRs = mystmt.executeQuery(query);
while (myRs.next()) {
String s = myRs.getString("starting_symbol");
String val = myRs.getString("value");
output.setText(s + "-> " + val);
}
myRs = mystmt.executeQuery(query2);
ArrayList<String> list_one = new ArrayList<String>();
ArrayList<String> list_two = new ArrayList<String>();
while (myRs.next()) {
list_one.add(myRs.getString("non_terminals"));
list_two.add(myRs.getString("terminals"));
for (int i = 0; i < list_one.size(); i++) {
output_2.setText(list_one.get(i) + "->" + list_two.get(i));
}
}
请帮助我获得正确的输出
使用StringBuilder
卢克
StringBuilder b = new StringBuilder();
while (myRs.next()) {
String s = myRs.getString("starting_symbol");
String val = myRs.getString("value");
if (b.length() > 0) {
b.append(',');
}
b.append(s + "-> " + val);
}
output.setText(b.toString());
并对 output_2 字段执行相同操作
您的代码片段可以如下所示:
StringBuilder sb = new StringBuilder();
while (myRs.next()) {
if (sb.length() > 0) sb.append(",");
sb.append(myRs.getString("non_terminals"))
.append("->")
.append(myRs.getString("terminals"));
}
而不是多次调用 output_2.setText,只将文本设置为 non_terminals -> terminals
的最后一次提取值,在这种情况下 B->b.
我正在尝试制作一个程序,在该程序中我从用户那里读取输入,即在名为 gname
的文本字段中,并将其值存储到名为 grammar
的字符串中。现在这个输入就是对我的数据库输出进行排序的东西。
数据库看起来像这样
所以当用户在文本字段中输入 G1
时,它应该以这种方式显示记录
A->ab,A-ab,B->b
但是当我使用 if(myRs.next)
时它只显示第一个元素,如果我使用 while(myRs.next()
时它只显示最后一个元素。
当前输出为
这里是代码:
它都在 try catch 块中
String grammar = gname.getText();
myCon = DriverManager.getConnection("jdbc:mysql://localhost:3306/grammar", "root", "");
JOptionPane.showMessageDialog(rootPane, "Connected to database");
mystmt = myCon.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
String query = "SELECT starting_symbol, value from starting_symbol where grammar= '" + grammar + "'";
String query2 = "SELECT non_terminals, terminals from input_values where grammar= '" + grammar + "'";
mystmt.addBatch(query);
mystmt.addBatch(query2);
myCon.setAutoCommit(false);
mystmt.addBatch(query);
mystmt.addBatch(query2);
myRs = mystmt.executeQuery(query);
while (myRs.next()) {
String s = myRs.getString("starting_symbol");
String val = myRs.getString("value");
output.setText(s + "-> " + val);
}
myRs = mystmt.executeQuery(query2);
ArrayList<String> list_one = new ArrayList<String>();
ArrayList<String> list_two = new ArrayList<String>();
while (myRs.next()) {
list_one.add(myRs.getString("non_terminals"));
list_two.add(myRs.getString("terminals"));
for (int i = 0; i < list_one.size(); i++) {
output_2.setText(list_one.get(i) + "->" + list_two.get(i));
}
}
请帮助我获得正确的输出
使用StringBuilder
卢克
StringBuilder b = new StringBuilder();
while (myRs.next()) {
String s = myRs.getString("starting_symbol");
String val = myRs.getString("value");
if (b.length() > 0) {
b.append(',');
}
b.append(s + "-> " + val);
}
output.setText(b.toString());
并对 output_2 字段执行相同操作
您的代码片段可以如下所示:
StringBuilder sb = new StringBuilder();
while (myRs.next()) {
if (sb.length() > 0) sb.append(",");
sb.append(myRs.getString("non_terminals"))
.append("->")
.append(myRs.getString("terminals"));
}
而不是多次调用 output_2.setText,只将文本设置为 non_terminals -> terminals
的最后一次提取值,在这种情况下 B->b.