データベース定義に実際に名前と型のペアのみが含まれ、インデックス、外部キー参照、その他の制約などの追加情報が含まれていない場合は、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
、スキーマ定義を読み取りながらステートメントを動的に作成できます。ただし、数千の列とテーブルがない限り、パフォーマンスに大きな違いはありません。
大量のデータを効率的に挿入するには、この回答をご覧ください。