我在MySql中有一个数据库,其中包含一个名称列,其中包含多个单词(描述)。我通过eclipse用java连接到数据库。我有一个搜索,如果只有名称字段包含一个单词,则返回结果。 ID:..................名:..............信息:............ ..........型产品:>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> 1 ...................气球..........大红气球................大>>>>>>>>>>>>>>>>>>> 2 ....................房子..........昂贵的美丽............豪华>> >>>>>>>>>>>>>>>>>>>>>>> 3 ................鸡翅.......油炸的翅膀...............美味
这些只是随机的单词,但作为一个例子,我的搜索只能看到ex。气球,然后显示信息, 但如果我打字鸡翅,它什么都不做。所以有可能以某种方式从具有多个单词的列中搜索? 这是我在下面的搜索代码
import java.io.*;
import java.sql.*;
import java.util.*;
class Search {
public static void main(String[] args) {
Scanner inp``ut = new Scanner(System.in);
try {
Connection con = DriverManager.getConnection(
"jdbc:mysql://example/mydb", "user", "password");
Statement stmt = (Statement) con.createStatement();
System.out.print("enter search: ");
String name = input.next();
String SQL = "SELECT * FROM menu where name LIKE '" + name + "'";
ResultSet rs = stmt.executeQuery(SQL);
while (rs.next()) {
System.out.println("Name: " +rs.getString("name"));
System.out.println("Description: " + rs.getString("info") );
System.out.println("Price: " + rs.getString("Price"));
}
} catch (Exception e) {
System.out.println("ERROR: " + e.getMessage());
}
}
}
答案 0 :(得分:1)
您现在正在执行搜索的方式,您最初容易受到sql injection的攻击,并且可能希望使用JDBC的PreparedStatement而不是正常语句。
其次,我建议在空格处拆分用户输入,并单独用“或”搜索所有条款。
示例:用户输入house expensive beautiful
搜索将是:
SELECT * FROM menu where name LIKE '%house%' OR name LIKE '%expensive%' OR name LIKE '%beaufitful%'
我已经设置了百分号,因为如果您要搜索“房子”,则只会匹配确切的“房子”一词。通过搜索“%house%”,还可以找到字符串“somethingbeforehouse”和“houseandsomethingafter”。
希望这能帮到你!