gpt4 book ai didi

java - 如何使用java从mysql数据库中的多个列中进行搜索

转载 作者:行者123 更新时间:2023-11-29 04:08:52 26 4
gpt4 key购买 nike

我有以下用于搜索数据的代码。

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");
}
}

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

最佳答案

您有一个重大错误 - 当您构建 WHERE 子句时,您在 '% opening-quote & wildcard 之后和 %' closing-wildcard & quote 之前有虚假的 ' 撇号。

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

但整个代码根本不是好代码——每一处都错了。

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

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

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

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

您在这里得到的唯一一件事就是变量和参数命名。

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

关于java - 如何使用java从mysql数据库中的多个列中进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18943449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com