指定されたテーブルの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());
}