编辑 4:问题来自使用列的字符串名称而不是列号,如下面的 nuzz 所示
我一直在搜索一整天,但无法弄清楚如何进行全文搜索以返回字符串。当我直接在 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);
抱歉,我对此还是个新手,不知道如何在不发布打印屏幕的情况下从 desc user_info 复制代码。
编辑 2:哎呀错误的代码,但同样的问题。
编辑 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 | | |
+-----------------+-------------+------+-----+---------+-------+
最佳答案
好的,这适用于全文搜索。这是我跑的。首先我插入数据库(通过 mysql 控制台):
insert into user_info values('themanager', 'password', 'email@test.com');
一旦我有了它,我就跑了:
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 查询的更多信息
关于Java:如何从 mysql 中的全文搜索中检索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6727780/