Java:如何从 mysql 中的全文搜索中检索字符串

标签 java mysql full-text-search

编辑 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/

相关文章:

Java:将对象突变限制在特定方法内

java - 在 Java/PHP/Python 框架内运行已编译的 C/C++ 代码中的算法?

c# - SQL Server 2008 FTS 问题,最好的选择

java - 抽象类中的私有(private)构造函数

java - 在 Beanshell 脚本中生成序列号

mysql - 启用 MySQL 性能监视器

sql-server - 无法在 Azure SQL 数据库 V12 上启用全文搜索

mysql - InnoDB 的始终索引的 MySQL 索引/搜索替代品?

php - 如何将原始输入放入动态下拉列表中

mysql - 为什么使用 Ruby 将 AES 加密字符串保存为空白到 MySQL 表?