java - 如何使用java从mysql过滤数据并将其显示在jtable中

标签 java mysql search jtable

我的 Java 程序中有一个 JTable(t1) & JTextField(txtSearch) & JButton(btnSearch)。我想做的是,如果我在 JTextField 中输入字母 A(不区分大小写)并按下按钮,所有名字包含字母 A 的医生都会显示在我的 JTable 上。直到我在 JTable 上得到一个特定的名称。

这是我的代码,

    btnSearch = new JButton();
    btnSearch.setBackground(new java.awt.Color(51, 51, 255));
    btnSearch.setText("Search");
    btnSearch.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            // TODO Auto-generated method stub
                String search =txtSearch.getText(); 
                try{
                    conn = DriverManager.getConnection( "jdbc:mysql://localhost/bibodent", "root", "" );
                String query = "SELECT name_doctor, mobile_doctor, phone_doctor, mail_doctor, city_doctor, spec_doctor, adres_doctor, note_doctor FROM doctor WHERE name_doctor LIKE '%" + txtName.getText() + "%' ";

                ps = conn.prepareStatement(query);
                ps.setString(1, search);
                ResultSet rs = ps.executeQuery(query);
                t1.setModel(DbUtils.resultSetToTableModel(rs));

            }catch (Exception e){
                e.printStackTrace();
                JOptionPane.showMessageDialog(null, e);
            }

        }
    });

最佳答案

在您的代码中,查询字符串为:

SELECT ... FROM doctor WHERE name_doctor LIKE '%"+ txtName.getText() + "%' "

其中不包含任何?标记。因此,不需要 ps.setString(1, search); 因为您已经通过在中附加 txtName.getText() 来内联设置查询的参数您的查询字符串为:

SELECT ... FROM doctor WHERE name_doctor LIKE '%"+ txtName.getText() + "%' "

不建议采用这种在查询字符串中附加参数的方式,因为它会出现错误,而且其中没有类型检查。您使用的更优雅的方法是使用 PreparedStatement 并将查询的参数设置为查询中的 ? 标记。

然后,正如 MadProgrammer 所示,对于查询中的每个 ?,您应该设置参数 use ps.setString(n, search); while n 盯着 1 查找第一个出现的 。因此,您可能需要将查询字符串更改为:

SELECT ... FROM doctor WHERE name_doctor LIKE ? 然后使用 ps.setString(1, "%"+ search + "%"); 设置参数它应该可以工作。

代码中更重要的一点是执行查询的位置:

ResultSet rs = ps.executeQuery(query);

使用 ? 定义查询字符串,然后使用 ps.setString(n, search); 设置参数后,执行 ? 是一个常见的错误code>ps 带有 query 参数!通过这种方式,ps 会忽略设置的参数,然后运行其中包含 ? 的原始查询。您没有收到此错误的原因是您没有使用 ? 参数化查询字符串。因此,在设置 ps.setString(n, search); 后,您应该不带任何参数执行 ps:

ResultSet rs = ps.executeQuery();

希望这有帮助!

关于java - 如何使用java从mysql过滤数据并将其显示在jtable中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41800099/

相关文章:

java - 下载文件而不知道其大小

php - 关于存储/检索复杂页面数据的问题

php - 如何从 mysql 数据库字段中检索最后 4 个字符?

c++ - Windows SearchPath 函数

php如何进行部分搜索/输入和下拉菜单搜索?

java - 痛饮 : How to rename generated Java code according to a regex?

java - 在 Android 上创建一个轻量级的 openvpn 客户端(已经配置服务器)

java - 拆分字符串并将其解析为整数

mysql - 仅当具有相同值的所有其他条目都存在并匹配时,如何选择列的值? (MySQL)

php - 搜索数据库的用户界面