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