繁体   English   中英

如何从数据库获取值到 jcombobox?

[英]How to get values from database to jcombobox?

我试图将 MySQL 数据库中的数据检索到 JComboBox 中,但我没有得到它,因为当我将一个 isbn 写入 JTextField 来搜索一本书时,所有的 id 出现了 4 次,最后出现了我想要的 id,但是 2次。 我想将数据输入 JComboBox,只是具有我正在搜索的 isbn 的 ID,boxBookId 是我的 JComboBox。 我使用 NetBeans。 有人可以帮助我吗? 提前致谢!

这是我的代码:

private void fieldIsbnKeyReleased(java.awt.event.KeyEvent evt) {                                      
    try {
        String url = "jdbc:mysql://localhost/library";
        Connection con = DriverManager.getConnection(url,"root","");
        Statement stm = con.createStatement();

        String sql = "SELECT id, book, author FROM books WHERE isbn LIKE '%" +fieldIsbn.getText()+ "%' ";
        String sql2 = "SELECT COUNT(isbn) FROM books WHERE isbn LIKE '%" +fieldIsbn.getText()+ "%' ";

        pstm = con.prepareStatement(sql);
        rs = pstm.executeQuery();
        pstm2 = con.prepareStatement(sql2);
        rs2 = pstm2.executeQuery();

        while (rs.next()) {
            boxBookId.addItem(rs.getString("id"));
            String val1 = rs.getString("book");
            fieldBook.setText(val1);
            String val2 = rs.getString("author");
            fieldAuthor.setText(val2);
        }
        while (rs2.next()) {  
                fieldAvailableBooks.setText(rs2.getString(1));
        } 
    } catch (Exception ex) {
        JOptionPane.showMessageDialog(null, ex);
    } 
}

在将查询结果添加到boxBookId之前,您需要删除任何现有元素,例如通过在 while 循环之前调用boxBookId.removeAllItems() (以防止在查询失败时删除它们)。

至于我提到的安全问题(你应该自己仔细阅读),使用PreparedStatement设置参数(只构造一次并重用它):

//outside your method: construct this only once and reuse inside your method
pstm = con.prepareStatement("SELECT id, book, author FROM books WHERE isbn LIKE ?");

//in your method:
pstm.setString(1, "%" + fieldIsbn.getText() + "%" );
rs = pstm.executeQuery();

如您所见,我重用了您已经创建的PreparedStatement pstm 关键是重用它,用它来设置参数。 否则使用PreparedStatement没有多大意义(我的意思是直接将参数值附加到 SQL 并在每次调用之前重新创建语句)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM