gpt4 book ai didi

java - 获取除 to_date 模式之外的绑定(bind)名称

转载 作者:太空宇宙 更新时间:2023-11-04 10:36:42 25 4
gpt4 key购买 nike

我正在开发一个带有数据库连接的java应用程序。我有一个带有绑定(bind)的查询,例如

select name from employee where salary >= :sal

获取我拥有的每个绑定(bind)的名称

List<String> getParameterNames(String query) {
Pattern p = Pattern.compile(":[^\\s\\%\\?']+");
Matcher m = p.matcher(query);
// without duplications
Set<String> bindings = new LinkedHashSet<>();
while (m.find()) {
bindings.add(m.group().substring(1));
}
return new ArrayList<>(bindings);
}

用户可以为每个绑定(bind)定义自己的值。查询和值(及其名称)存储在数据库中。该查询也是通过 EXECUTE IMMEDIATE 在数据库中执行的,因此我无法使用 JDBC。这工作正常,但如果查询包含像这样的日期格式,我会遇到一些麻烦

select name from employee where hire_date >= to_date(':date', 'YYYY-MM-DD HH24:MI:SS')

通过我的代码,我得到 date (正确)和 MI:SS (不正确)作为绑定(bind)。

如何排除此日期模式以获得绑定(bind)?

最佳答案

这可能不是您想要的,但您可以查看 spring-jdbc NamedParameterUtils.parseSqlStatement() 方法。不幸的是,它返回一个 ParsedSql 对象,该对象的方法在 org.springframework.jdbc.core.namedparam 包之外无法访问。

String sql = "select name from employee where hire_date >= to_date(:date, 'YYYY-MM-DD HH24:MI:SS')";
ParsedSql parsedSql = NamedParameterUtils.parseSqlStatement(sql);
List<String> paramNames = parsedSql.getParameterNames();

':date' 看起来不像有效的参数名称。它只是一个带有 :date 值的 SQL 字符串。通常情况下,不应该引用命名参数,因为使用它们的全部目的是让框架根据它们的类型找出正确的转义。您是否正在编写自己的框架来处理命名参数?

关于java - 获取除 to_date 模式之外的绑定(bind)名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49387683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com