如何从mysql过滤数据并使用java

时间:2017-01-23 06:01:07

标签: java mysql search jtable

我有一个JTable(t1)& JTextField(txtSearch)&我的Java程序中的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);
            }

        }
    });

2 个答案:

答案 0 :(得分:1)

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

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);,而n正在为第一个出现的1 ?设置SELECT ... FROM doctor WHERE name_doctor LIKE ? }。因此,您可能希望将查询字符串更改为:

ps.setString(1, "%" + search + "%");然后使用ResultSet rs = ps.executeQuery(query);设置参数,它应该有效。

代码中更重要的一点是您执行查询的地方:

?

在其中定义了包含ps.setString(n, search);的查询字符串,然后使用ps设置参数后,执行query的参数为{{1}是一个常见的错误}}!通过这种方式,ps忽略设置的参数,然后在其中运行带有?的原始查询。您没有收到此错误的原因是您没有使用?对查询字符串进行参数化。因此,在您设置ps.setString(n, search);之后,您应该在没有任何争议的情况下执行ps

ResultSet rs = ps.executeQuery();

希望这有帮助!

答案 1 :(得分:0)

这将搜索其中包含“A”的所有name_doctor。

String query="Select * From doctor where name_doctor like %A%";

此文档包含更多详细信息:https://www.tutorialspoint.com/mysql/mysql-like-clause.htm