Java:如何从mysql中的全文搜索中检索字符串
编辑4:问题源于使用列的字符串名称,而不是列编号,如下面nuzz所示 我搜索了一整天,不知道如何通过全文搜索返回字符串。当我直接在mysql命令提示符中键入它时,它可以正常工作;如果我只使用用户信息中的SELECT username,它也可以正常工作;但我对此一无所知Java:如何从mysql中的全文搜索中检索字符串,java,mysql,full-text-search,Java,Mysql,Full Text Search,编辑4:问题源于使用列的字符串名称,而不是列编号,如下面nuzz所示 我搜索了一整天,不知道如何通过全文搜索返回字符串。当我直接在mysql命令提示符中键入它时,它可以正常工作;如果我只使用用户信息中的SELECT username,它也可以正常工作;但我对此一无所知 String result = ""; String request = "SELECT username FROM user_info WHERE MATCH (username) AGAINST ('themanager')
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:oops错误的代码,但同样的问题
编辑3:刚刚列出了如何复制描述。输出为数据库中的所有用户提供了从用户_info;中选择用户名的信息;。我对数据库系统的细节一无所知,只是因为它是mysql的默认安装
+-----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| username | varchar(16) | NO | PRI | | |
| password | varchar(16) | YES | | NULL | |
| email | varchar(50) | NO | PRI | | |
+-----------------+-------------+------+-----+---------+-------+
好的,这适用于全文搜索。这是我跑的。首先我插入数据库(通过mysql控制台): 有一次,我跑了:
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();
}
}
}
上面印着:
找到:“经理”
试试看。如果失败,请告诉我。如果是这样,很可能是连接问题
请参阅:有关全文查询的更多信息请在表user_info上进行“描述”,并向我们显示列类型是什么?为什么不能复制描述结果的输出?您准备的语句看起来正确,您得到的错误是什么。还发布从用户信息中选择用户名的结果;您使用的是什么RDBMS以及如何执行这些sql语句,例如desc,意思是您使用的是squirrel还是sqlplus等。该示例根本不使用全文:(这只是一个例子谢谢你。问题是使用用户名而不是1。太糟糕了,我再也无法恢复我23小时的生活。我已经用mysql了。@shahzeb代码工作得很好,通过全文搜索重新插入它。
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();
}
}
}