-1

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

1 回答 1

1

您现在执行搜索的方式,一开始您很容易受到sql 注入的攻击,并且可能希望使用 JDBC 的 PreparedStatement 而不是普通语句。

其次,我建议在空格处拆分用户输入并使用“OR”单独搜索所有术语。

示例:用户输入house expensive beautiful

搜索将是:

SELECT * FROM menu where name LIKE '%house%' OR name LIKE '%expensive%' OR name LIKE '%beaufitful%'

我放了百分号,因为如果您要搜索“房屋”,则只会匹配确切的术语“房屋”。通过使用“%house%”搜索,还会找到字符串“somethingbeforehouse”和“houseandsomethingafter”。

希望这对你有帮助!

于 2012-11-18T23:05:27.560 回答