2012-11-18 41 views
-1

我在MySql中有一個名稱列中包含幾個單詞(描述)的數據庫。我通過eclipse與java連接到數據庫。我有一個搜索,返回結果,如果只有名稱字段包含一個單詞。 id:.................. name:.............. info:........... ...........類型:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>> 1 ...................氣球..........大紅色氣球............ ....大>>>>>>>>>>>>>>>>>>> 2 ....................房子... .......昂貴漂亮............奢侈品>>>>>>>>>>>>>>>>>>>>>>>>> 3。 ...............雞翅膀.......油炸翅膀...............好吃JAVA MySql多字搜索

這些只是隨機詞,但作爲一個例子,我的搜索只能看到前。氣球,然後顯示信息, 但如果我鍵入雞翅膀,它什麼都不做。所以它可能以某種方式從多個詞的列搜索? 這低於

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

你現在要進行搜索的方式搜索代碼,你在第一易受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」也將被發現。

希望這可以幫助你!