数据库中的每一行都是一个JList项?

时间:2016-09-27 20:27:33

标签: java sql

我目前有一个运行良好的数据库。它将数据库每列中的文本显示在应用程序用户界面上的5个标签中。有些时候,根据用户输入的内容,我希望它显示数据库中的行列表,我正在考虑使用JList。

要显示给标签的当前代码是:

String sqlQuery = "select Column1, Column2, Column3, Column4, Column5 from APP.DATA123 " + 
"where (Column1 = ?) AND (Column2 = ?) AND (Column3 = ?) OR (Column1 = ?) AND (Column2 = ?)";

String abc = jTextField2.getText();
String cba = (String)jComboBox1.getSelectedItem();
String cab = (String)jComboBox2.getSelectedItem();
String data = "jdbc:derby://localhost:1527/sample";
    try (
          Connection conn = DriverManager.getConnection(
          data, "app", "app");
          PreparedStatement st = conn.prepareStatement(sqlQuery))   { 

      Class.forName("org.apache.derby.jdbc.ClientDriver");
      st.setString(1, abc);
      st.setString(2, cba);
      st.setString(3, cab);       
      st.setString(4, cba);
      st.setString(5, cab);
      ResultSet rec = st.executeQuery();
        while (rec.next())  {
          jLabel1.setText(rec.getString("Column1"));
          jLabel2.setText(rec.getString("Column2"));
          jLabel3.setText(rec.getString("Column3"));
          jLabel4.setText(rec.getString("Column4"));
          jLabel5.setText(rec.getString("Column5"));

      }
      st.close();

有没有更简单的方法来实现它,以便如果要向用户显示数据库的多行,我可以创建一个JList,以便一行的所有列(可能还有一个图像但是我稍后会想到这一点,在JList上显示为一个项目。所以Columns1-5是一个JlistItem,然后下一个数据库行的1-5列是下一个JList项目等?

或者其他人都知道的类似方式?

每列只有大约5-15个字符。

1 个答案:

答案 0 :(得分:0)

您必须将JList绑定到ListModel实现并填充该ListModel。在您的情况下 - ListModel中的每个项都是ResultSet中每行的所有项的串联字符串。如下所示:

DefaultListModel<String> model = new DefaultListModel<>();
JList list = new JList(model);
JScrollPane pane = new JScrollPane(list);//add the "pane" to your form next line

String abc = jTextField2.getText();
String cba = (String) jComboBox1.getSelectedItem();
String cab = (String) jComboBox2.getSelectedItem();
String data = "jdbc:derby://localhost:1527/sample";
    try(
Connection conn = DriverManager.getConnection(
        data, "app", "app");
PreparedStatement st = conn.prepareStatement(sqlQuery))

{

    Class.forName("org.apache.derby.jdbc.ClientDriver");
    st.setString(1, "abc");
    st.setString(2, "cba");
    st.setString(3, "cab");
    st.setString(4, "cba");
    st.setString(5, "cab");
    ResultSet rec = st.executeQuery();

    // may want to make it constant (final static)
    final String SPACE = " ";
    StringBuilder sBuilder = new StringBuilder();

    while (rec.next()) {
        sBuilder.setLength(0);
        sBuilder
             .append(rec.getString("Column1")).append(SPACE)
             .append(rec.getString("Column2")).append(SPACE)
             .append(rec.getString("Column3")).append(SPACE)
             .append(rec.getString("Column4")).append(SPACE)
             .append(rec.getString("Column5")).append(SPACE);

        model.addElement(sBuilder.toString());

    }
    st.close();

查看this文章,可能对您的案例非常有帮助。而且,BTW,谷歌搜索或阅读文档要快于在SO上写一个问题并等待答案=)。欢呼声。