Java 将mySQL数据库的两列数据逐个打印到jTextfield的最佳方法

Java 将mySQL数据库的两列数据逐个打印到jTextfield的最佳方法,java,mysql,swing,netbeans,resultset,Java,Mysql,Swing,Netbeans,Resultset,我试图制作一个程序,在其中读取用户的输入,即在名为gname的文本字段中,并将其值存储到名为grammar的字符串中。现在,这个输入是对数据库中的输出进行排序的 数据库看起来像这样 因此,当用户在文本字段中输入G1时,它应该以这种方式显示记录 A->ab,A-ab,B->b 但当我使用if(myRs.next)时,它只显示第一个元素,当我使用while(myRs.next()时,它只显示最后一个元素 电流输出为 以下是此操作的代码: 这一切都在试抓块里 String gramm

我试图制作一个程序,在其中读取用户的输入,即在名为
gname
的文本字段中,并将其值存储到名为
grammar
的字符串中。现在,这个输入是对数据库中的输出进行排序的

数据库看起来像这样

因此,当用户在文本字段中输入
G1
时,它应该以这种方式显示记录

A->ab,A-ab,B->b
但当我使用
if(myRs.next)
时,它只显示第一个元素,当我使用
while(myRs.next()
时,它只显示最后一个元素

电流输出为

以下是此操作的代码:

这一切都在试抓块里

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));

            }

        }
String grammar=gname.getText();
myCon=DriverManager.getConnection(“jdbc:mysql://localhost:3306/grammar“,”根“,”);
showMessageDialog(rootPane,“连接到数据库”);
mystmt=myCon.createStatement(
ResultSet.TYPE_SCROLL_敏感,ResultSet.CONCUR_可更新);
String query=“选择起始\u符号,从起始\u符号中选择值,其中语法='”+语法+“'”;
String query2=“选择非_端子,从输入_值中选择端子,其中grammar='”+grammar+'”;
mystmt.addBatch(查询);
mystmt.addBatch(查询2);
myCon.setAutoCommit(假);
mystmt.addBatch(查询);
mystmt.addBatch(查询2);
myRs=mystmt.executeQuery(查询);
while(myRs.next()){
字符串s=myRs.getString(“起始符号”);
字符串val=myRs.getString(“值”);
output.setText(s+“->”+val);
}
myRs=mystmt.executeQuery(查询2);
ArrayList_one=新的ArrayList();
ArrayList_two=新的ArrayList();
while(myRs.next()){
list_one.add(myRs.getString(“非_终端”);
list_two.add(myRs.getString(“终端”);
对于(int i=0;i”+list_two.get(i));
}
}

请帮助我获得正确的输出

使用
StringBuilder
Luke

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,只将文本设置为
非_终端->终端的最后一个获取值,在本例中为B->B