有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    这里的困惑可能是“运行时”实际发生的情况。如果您在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。您正在运行时通过JOOQAPI动态构造SQL语句。与语句创建相关的所有元素都可以动态更改