java - MySql 使用 Java 中的查询查找单词之间的匹配项

标签 java mysql jdbc

我有连接到 mysql 数据库的 Java 程序。我想要做的是接受用户输入并显示与用户输入匹配的列。该列包含编程语言列表。我需要有关执行此操作所需的 sql 查询的帮助。例如,如果第一行中的列包含语言 Javascript、C++、C#,第二行中的列包含 Java,并且如果我使用查询

"SELECT * from Language WHERE Programming Languages LIKE'%"+input.getText()+"%'")

并且用户要搜索 Java,那么表格将显示包含 Java 和 Javascript 的列,因为它包含单词 Java。如果有第三行并且该列包含 C ,并且如果用户要搜索 C ,那么它将显示包含 C++ 和 C# 的列。

我尝试改用这个正则表达式

`"SELECT * from Language WHERE Programming Language REGEXP'[[<:]]"+input.getText()+"[[:>:]]'")`

它解决了 Java 和 Javascript 问题,但搜索 C 将显示包含 C# 和 C++ 的列。此外,搜索 C# 不会显示任何内容,搜索 C++ 会引发此错误重复运算符操作数无效。 My Table

表的列数据:

Javascript HTML CSS PHP
C# Java
C
C++ C#

我尝试在第一个查询中的 % 之前添加一个空格,以进行区分。我现在的问题是如何在列中搜索多个单词,上面的查询适用于按精确顺序排列的两个或三个输入。搜索 javascript 和 html 会显示,但 javascript 和 css 不会显示,因为它不按顺序

最佳答案

让我猜一下,您将所有开发人员存储到一个表中,其中一列存储该开发人员掌握的语言。

当有人输入一种语言时,你想搜索所有掌握该语言的开发者吗?

如果是这样,我会这样做,在您的语言列中,在您的语言列中,在末尾添加一个额外的空格(使用 _ 作为下面的空格)

Javascript_HTML_CSS_PHP_
C#_Java_
C++_C#_
C_
Python_Java_LUA_

然后在您的 Java 代码中,您可以使用以下代码来执行此操作。

SELECT * from Language WHERE Programming_Languages LIKE'%"+input.getText()+"_%'")

请注意,切勿在 Java 代码中连接 sql 字符串。您可以通过以下方式完成:

statment = con.prepare("SELECT * from Language WHERE Programming_Languages LIKE ?")
statment.setString(1, "%" + input.getText() + "_%")

关于java - MySql 使用 Java 中的查询查找单词之间的匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53474183/

相关文章:

java - 如何使用日历创建日期

mysql - 数据库还原不保留表情符号

java - 异常 : Can not read response from server. 预计读取 4 个字节,在连接意外丢失之前读取了 0 个字节

mysql - 从日期时间具有相同日期的位置获取结果

java - JDBC:使用 PreparedStatement 创建表,SQL 语法错误与否?

java - Jfree图表更改Y轴数据

java - Eclipse 中的 Napkin 自定义 LookAndFeel

spring - MySQL 查询在我的应用程序中失败,但在 MySQL 命令行工具中成功

postgresql - 如何在 PostgreSQL JDBC 连接上保持 float->String 转换的精度

java - Android FileOutputStream 似乎失败