-1

私はいくつかの単語(説明)を含む名前列を持つMySqlのデータベースを持っています。私はEclipseを介してJavaでデータベースに接続しています。名前フィールドに1つの単語が含まれている場合に結果を返す検索があります。id:........name:........info:.......... ....タイプ:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >> 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 に答える