2011-07-18 26 views
1

編輯4串:這個問題從使用列而不是列數字的字符串名稱之際,由nuzz的Java:如何檢索從MySQL中的全文搜索

我如下所示一直在搜索整天,無法弄清楚如何獲得全文搜索返回一個字符串。它直接輸入到mysql命令提示符時工作正常,如果我只使用SELECT username FROM user_info,也可以正常工作;但我對此一無所獲。

String result = ""; 
String request = "SELECT username FROM user_info WHERE MATCH (username) AGAINST ('themanager');"; 

    Statement stmt = con.createStatement(); 
    ResultSet rs = stmt.executeQuery(request); 

    while (rs.next()) { 
     result += rs.getString("username") ; 
     result += "\n"; 
    } 

編輯1: 這裏的表的代碼:

Create table user_info (username varchar(16), 
          password varchar(16), 
          email varchar(16), 
          PRIMARY KEY(username,email)); 
    ALTER table user_info add FULLTEXT(username,email); 

對不起,我還是新的這一點,不知道如何從遞減USER_INFO複製代碼,而無需繳納打印屏幕。

編輯2:oops錯誤的代碼,但同樣的問題。

編輯3:只是想出瞭如何複製desc。輸出爲我提供了SELECT username FROM user_info;的數據庫中的所有用戶。我不知道我的數據庫系統的具體情況,只是因爲它默認安裝了mysql。

+-----------------+-------------+------+-----+---------+-------+ 
| Field   | Type  | Null | Key | Default | Extra | 
+-----------------+-------------+------+-----+---------+-------+ 
| username  | varchar(16) | NO | PRI |   |  | 
| password  | varchar(16) | YES |  | NULL |  | 
| email   | varchar(50) | NO | PRI |   |  | 
+-----------------+-------------+------+-----+---------+-------+ 
+0

能否請您做一個「遞減」在桌子上USER_INFO並向我們證明此列類型是什麼? – nuzz

+0

爲什麼你不能複製desc結果的輸出?你準備好的語句看起來是正確的,你得到的錯誤是什麼。同時發佈從user_info選擇用戶名的結果;你使用的是什麼RDBMS,以及你如何執行這個sql語句,例如,desc意思是你使用松鼠或sqlplus等 – Shahzeb

回答

2

好的,這適用於全文搜索。這是我跑過的。首先,我插入到數據庫中(通過mysql的控制檯):

insert into user_info values('themanager', 'password', '[email protected]'); 

有一次,我說我跑:

import static org.junit.Assert.*; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

import org.junit.Test; 

public class TestMysql { 

    private String dbUrl = "jdbc:mysql://localhost:3306/test"; 
    private String user = "root"; 
    private String password = "password"; 
    private String dbClass = "com.mysql.jdbc.Driver"; 
    private String query = "SELECT username, email FROM user_info WHERE MATCH (username, email) AGAINST ('themanager' IN BOOLEAN MODE)"; 


    @Test 
    public void test() { 

    try { 

     Class.forName(dbClass); 
     Connection con = DriverManager.getConnection (dbUrl, user, password); 
     Statement stmt = con.createStatement(); 
     ResultSet rs = stmt.executeQuery(query); 

     while (rs.next()) { 
      String username = rs.getString(1); 
      System.out.println("FOUND: '" + username + "'"); 
     } //end while 

     con.close(); 
    } //end try 

    catch(ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 

    catch(SQLException e) { 
     e.printStackTrace(); 
    } 


    } 

} 

那印: 找到: 'themanager'

嘗試。讓我知道它是否失敗。如果是的話,它很可能是一個連接問題

看到:http://www.petefreitag.com/item/477.cfm約FULLTEXT更多信息查詢

+0

這個例子根本不使用全文:(這只是一個例子 – Shahzeb

+0

更新爲顯示全文搜索... – nuzz

+0

THANK這個問題來自於使用用戶名而不是1,太糟糕了,我從來沒有得到過我23小時的生活回來,我用mysql做完了@shahzeb代碼很好地重新插入了全文搜索。 –