指定されたテーブルのCREATE文を生成する
DatabaseMetaDataを使用して作成。
接続しているデータベースから、指定されたテーブルのCREATE文を生成する。
少し手抜きなので、基本的な型しかうまくいかない。
public void outputCreateTableSql(String tableName, Connection con) throws SQLException { DatabaseMetaData metaData = (DatabaseMetaData) con.getMetaData(); StringBuffer sql = new StringBuffer(); sql.append("CREATE TABLE " + tableName + "(\n"); // Columnを生成 ResultSet columnRs = metaData.getColumns("", "", tableName, ""); while (columnRs.next()) { sql.append(" "); sql.append(columnRs.getString("COLUMN_NAME") + " "); sql.append(columnRs.getString("TYPE_NAME")); short dataType = columnRs.getShort("DATA_TYPE"); if (dataType == Types.DATE || dataType == Types.TIME || dataType == Types.TIMESTAMP) { } else if (dataType == Types.DECIMAL || dataType == Types.DOUBLE || dataType == Types.FLOAT) { sql.append("(" + columnRs.getString("COLUMN_SIZE") + "," + columnRs.getString("DECIMAL_DIGITS") + ")"); } else { sql.append("(" + columnRs.getString("COLUMN_SIZE") + ")"); } if (columnRs.getString("IS_NULLABLE").equals("NO")) { sql.append(" NOT NULL"); } if (!columnRs.isLast()) { sql.append(",\n"); } } columnRs.close(); // PrimaryKeyを生成 ResultSet primaryKeyRs = metaData.getPrimaryKeys("", "", tableName); while (primaryKeyRs.next()) { if (primaryKeyRs.isFirst()) { sql.append(",\n"); sql.append(" PRIMARY KEY("); } else { sql.append(","); } sql.append(primaryKeyRs.getString("COLUMN_NAME")); if (primaryKeyRs.isLast()) { sql.append(")\n"); } } sql.append(");"); primaryKeyRs.close(); System.out.println(sql.toString()); }