Java 带正则表达式的SQLite查询

Java 带正则表达式的SQLite查询,java,regex,sqlite,Java,Regex,Sqlite,我正在使用Java,我得到了一个数据库SQLite 3.8.5,有两列,ID(int-key)和note(string)。 我希望能够查询包含多个单词的所有注释 例如: 注1:“你好,这部电影是福” 注2:“你好,这部电影是黄色的” 注3:“喂,福,这部电影是”(尤达,不要打字!) 用户提供的过滤词:“foo”“movie” 查询结果应为注释1和注释2 这个正则表达式可以工作,但我似乎找不到如何将正则表达式作为查询来询问:*(?=.*movie)(?=.*foo)。* BRSQLite有一个RE

我正在使用Java,我得到了一个数据库SQLite 3.8.5,有两列,
ID(int-key)
note(string)
。 我希望能够查询包含多个单词的所有注释

例如: 注1:“你好,这部电影是福”
注2:“你好,这部电影是黄色的”
注3:“喂,福,这部电影是”(尤达,不要打字!)
用户提供的过滤词:“foo”“movie”

查询结果应为注释1和注释2

这个正则表达式可以工作,但我似乎找不到如何将正则表达式作为查询来询问:
*(?=.*movie)(?=.*foo)。*


BR

SQLite有一个
REGEXP
操作符,您可以使用它来比较值。问题是,默认情况下,SQLite不提供常规表达式比较的实现,因此必须提供一个。它是通过实现
regexp()
自定义SQL函数来完成的

要了解如何实现自定义SQL函数,请参阅:

换句话说,您必须通过提供执行该任务的Java函数来告诉SQLite它应该如何执行正则表达式匹配


一旦实现了
regexp
函数,您就可以开始在SQL查询中使用
regexp
操作符了。

除了上面的答案之外,为了完整起见,还可以使用Java解决方案。对于REGEXP操作符应该工作的每个连接,您都必须这样做

// Create regexp() function to make the REGEXP operator available
Function.create(connection, "REGEXP", new Function() {
  @Override
  protected void xFunc() throws SQLException {
    String expression = value_text(0);
    String value = value_text(1);
    if (value == null)
      value = "";

    Pattern pattern=Pattern.compile(expression);
    result(pattern.matcher(value).find() ? 1 : 0);
  }
});