JAVA MySql多字搜索

时间:2012-11-18 22:58:12

标签: java mysql search

我在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());
    }
}
} 

1 个答案:

答案 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”。

希望这能帮到你!