【发布时间】:2021-08-22 20:25:48
【问题描述】:
package com.jooq.demo;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
import com.jooq.utils.DBUtils;
import static org.jooq.impl.DSL.*;
import org.jooq.*;
import org.jooq.impl.*;
public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection conn = null;
conn=DBUtils.getConnection();
DSLContext create = DSL.using(conn, SQLDialect.MYSQL);
Query query = create.select(val(1),val(2),val(3),val(4),val(5),val(6),val(7),val(8),val(9),val(10),val(11),val(12))
.from(table("T"));
query.bind(1,"C1");
query.bind(2,"C2");
List<Object> val = query.getBindValues();
System.out.println(val.get(0));
}
}
Output:-
null
我使用的是 JAVA 8,mysql 连接器版本为 5.1.8, JOOQ 版本 3.14.11
它在输出中打印空值。我期待绑定发生并且 在输出中打印 C1。
我的代码有什么错误?
【问题讨论】:
-
你实际上想做什么,即这个例子代表什么实际问题?
-
我希望 select() 中的那些字段采用存储在数组中的值。像 select(?,?,?.等) 和问号将被查询字符串中的数组值替换
-
但是为什么不将整个选择的创建延迟到数组已知时呢?您将获得更具可读性/可维护性的结果。如果您有兴趣,可以提出一个新问题,即“在给定的情况下,我如何才能最好地创建动态查询……”,我很乐意向您展示我的意思的示例。
-
好的,感谢您的帮助。我创建了一个新问题link
-
我很高兴我问了。所以你的实际问题根本不是关于bind values,而是关于列引用。
标签: java sql binding null jooq