使用JOOQ在运行时指定数据类型

时间:2016-03-09 12:37:52

标签: java jooq

我正在使用JOOQ从JAVA对象生成SQL。以下是我的代码 -

String tableName = "tabel1";
String columnName = "column1";
String dataType = "varchar";

CreateTableAsStep<Record> createStmt = create.createTable(tableName).column(columnName, dataType);

不允许设置字符串数据类型。但是使用SQLDatatype,我只得到枚举的数据类型列表,我只能在编译时提供它。是否可以在运行时或以任何方式设置数据类型以使用字符串名称获取枚举类型。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

这里的混乱可能是“运行时”真正发生的事情。如果您在Java中有变量,例如:

DataType<?> dataType = SQLDataType.VARCHAR;

这并不意味着这个值是一成不变的。您可以在运行时动态修改它,例如通过让用户从下拉列表中选择数据类型到底是什么。例如,您可以执行以下操作:

Map<String, DataType<?>> choices = new LinkedHashMap<>();
choices.put("integer", SQLDataType.INTEGER);
choices.put("timestamp", SQLDataType.TIMESTAMP);
choices.put("varchar", SQLDataType.VARCHAR);

然后将其提供给您的jOOQ声明:

String tableName = "tabel1";
String columnName = "column1";
String dataType = "varchar";

create.createTable(tableName).column(columnName, choices.get(dataType))...;

请记住,即使编写jOOQ语句感觉像静态SQL,它也是真正的动态SQL。您正在运行时通过jOOQ API动态构建SQL语句。与语句创建有关的所有元素都可以动态更改。