如何在Java中存储数据库表模式(> 50列)

时间:2013-06-28 11:24:30

标签: java jdbc collections

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

例如文件包含

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

现在我需要使用JDBC执行查询在运行时创建表。假设我创建表使用数组半数组包含列名半数组包含数据类型然后我将不得不手工输入所有值是否有最佳效率方法?

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

请指导。提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果您的数据库定义确实只包含名称/类型对,并且没有其他信息,如索引,外键引用或其他约束,那么Map<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语句。但是,只要您没有数千个列和表,它就不会对性能产生太大影响。

要以有效的方式插入批量数据,请选择look at this answer

答案 1 :(得分:0)

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