regex - JetBrains Exposed (DSL Api):使用 .regexp() where 条件时出现问题
问题描述
我正在使用 Javalin & Exposed ORM 构建一个小型 API。我正在尝试使用正则表达式 where 条件但抛出异常,因为由于我的代码执行的 SQL 查询似乎不完整(模式丢失)。
fun getUsersByFilter(filter: String): List<User> {
val regex = StringBuilder("/")
.append(filter.toLowerCase())
.append("/i")
.toString()
/**
* The .regexp(someString) method take a string as argument (a pattern)
*/
val users = transaction {
User.find{ Users.pseudo.regexp(regex) }.toList()
}
return users
}
Position : 141. Statement(s): SELECT users.id, users.pseudo, users.email, users."password", users.admin, users.created_at, users.updated_at FROM users WHERE users.pseudo REGEXP ?
org.jetbrains.exposed.exceptions.ExposedSQLException: org.postgresql.util.PSQLException: ERREUR: erreur de syntaxe sur ou près de « REGEXP »
Position : 141
SQL: [SELECT users.id, users.pseudo, users.email, users."password", users.admin, users.created_at, users.updated_at FROM users WHERE users.pseudo REGEXP ?]
有人能帮助我吗?
解决方案
好的我明白了。即使在使用 StringBuilder 时,正则表达式参数也已正确传递给查询(异常消息中的问号只是指向参数...)。该错误来自 PostgreSQL,因为 PostgreSQL 中根本不存在“REGEXP”函数......
我终于使用了这段代码:
fun getUsersByFilter(filter: String): List<User> {
val regex = "%${filter.toLowerCase()}%"
val users = transaction {
User.find{ Users.pseudo.lowerCase().like(regex) }.toList()
}
return users
}
推荐阅读
- python-3.x - 突出显示 Plotly 热图单元格或更改 Plotly 中特定热图单元格的颜色
- drupal-7 - Drupal 中“文章”结构化数据的正确方法
- promise - 为什么没有显示 dexie 承诺解决方案中的错误?
- java - 如何打印和加载带有随机数的数组
- aws-lambda - 如何在 AWS lambdas 中保持状态?
- swift - 删除 Swift 5 中的转义“\”字符
- javascript - 我需要使用 JavaScript 或 HTML 链接到当前 HTML 页面中的另一个 HTML 页面
- apache - 基于健康检查 URL 的热备故障转移 Apache 模块
- python - python:MTCNN 没有保存所有文件
- java - getDeclaredMethods() + 创建数组 = 额外方法?