如何使用java从mysql DataBase中的多列搜索

时间:2013-09-22 11:39:01

标签: java mysql jdbc jtable

我有搜索数据的follwinig代码。

public void advanceSearchMethod(String advanceName, int advanceTpNumber, String advanceAddress, String advanceDescription){
    Connection connection=null;
    try{  
        //for connect to database.
        connection=(Connection) DriverManager.getConnection("jdbc:mysql://localhost/contactbook","root","time1");
        //for communicate with database.
        Statement stmt=(Statement)connection.createStatement();
        String searchQuery="SELECT * FROM Contacts WHERE Name LIKE '%'"+advanceName+"'%' AND TelePhoneNumber LIKE '"+advanceTpNumber+"%' OR Address LIKE '%'"+advanceAddress+"'%' OR Description LIKE '%'"+advanceDescription+"'%'";
        rs=stmt.executeQuery(searchQuery);
        contactTableInDefaultForm.setModel(DbUtils.resultSetToTableModel(rs));
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, "Sorry! Connection Failed");
    }
}

此代码中没有错误。但是工作catch块。我无法想象我应该做些什么。我该如何搜索它们?

2 个答案:

答案 0 :(得分:3)

你有一个主要的错误 - 当你构建WHERE子句时,你会在'%opening-quote& amp;'之后出现虚假的'撇号'。通配符和%'结束 - 通配符&报价。

Your broken code:     "WHERE Name LIKE '%'"+advanceName+"'%'"
Corrected:            "WHERE Name LIKE '%"+advanceName+"%'"

但是整个代码根本不是好代码 - 每一件事都是错误的。

WHERE子句只能与您实际需要搜索的条件一起构建。应该使用PreparedStatement和?绑定参数,而不是在SQL中构建字符串文字。 (你已经建立了一个众所周知的安全漏洞。)

PhoneNumbers是字符串,而不是整数。 TelePhoneNumber的LIKE模式没有起始%。

应该从一个班级提供数据库连接。方法,而不是应用程序中的每个方法。

应检查单独操作中的错误(获取连接/执行查询和读取结果)和&单独报道。应该总是记录异常和堆栈跟踪(使用Log4J),或者在最坏的情况下,输出到控制台。

你唯一能做的就是变量&参数命名。

老实说,你应该使用Hibernate而不是写这种摇摇欲坠的废话。

答案 1 :(得分:1)

String searchQuery="SELECT * FROM Contacts WHERE Name LIKE '%'"+advanceName+"'%' AND TelePhoneNumber LIKE '"+advanceTpNumber+"%' OR Address LIKE '%"+advanceAddress+"%' OR Description LIKE '%"+advanceDescription+"%'";

你已经加入了单一的quatation .. 希望这是正确答案..