我目前有一个运行良好的数据库。它将数据库每列中的文本显示在应用程序用户界面上的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个字符。
答案 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上写一个问题并等待答案=)。欢呼声。