0

您好我有一个场景,我从文件中读取表模式,我需要使用 JDBC 创建表。

例如文件包含

{"ColumnTypes":["int32","fstring32"],"ColumnNames":["ProductId",","ProductName"]}

现在我需要在运行时使用 JDBC 执行查询创建表。假设我使用数组半数组包含列名半数组包含数据类型创建表,那么我将不得不手动输入所有值有没有最有效的方法?

创建表 tb1 (arr[1],arr[26],arr[2],arr[26].....arr[25],arr[50])

请指导。提前致谢。

4

2 回答 2

1

如果您的数据库定义确实只包含名称/类型对,而没有进一步的信息,如索引、外键引用或其他约束,那么 aMap<String, String>就足够了。您可以创建一个类,例如TableDef

public class TableDef {
  private final String tableName;
  private final Map<String, String> colDef = new LinkedHashMap<String, String>();

  public TableDef(String tableName) {
     this.tableName = tableName;
  }

  public void addColumn(String name, String type) {
    if (colDef.containsKey(name))
      throw new IllegalArgumentException(name + " column already added");
    colDef.put(name, type);
  }

  public String getCreateTable() {
    String ddl = "CREATE TABLE " + tableName + "(";
    for (Map.Entry<String, String> col : colDef.entrySet()) {
      // add column to ddl
    }
    return ddl + ")";
  }
}

或者,如果您可以确定不存在重复的列名,则可以CREATE TABLE在读取架构定义时动态构建语句。但是,只要您没有数千个列和表,它不会对性能产生太大影响。

要以有效的方式插入批量数据,请查看此答案

于 2013-06-28T11:59:24.570 回答
0

如果您需要的只是创建表或迁移数据库,您可能需要查看http://flywaydb.org/http://www.liquibase.org/您不会后悔

于 2013-06-28T11:34:16.213 回答