指定されたテーブルのデータを、指定された件数だけ取得

ResultSetMetaDataを使用して作成。
指定された開始位置から終了位置までの、テーブルデータを取得する。

public List getRecordData(String tableName, int startIndex, int endIndex,
		Connection con) throws SQLException {

	List recordList = new ArrayList();

	String sql = "SELECT * FROM " + tableName;

	Statement stmt = con.createStatement();
	ResultSet rs = stmt.executeQuery(sql);

	ResultSetMetaData rsMetaData = rs.getMetaData();
	int columnCount = rsMetaData.getColumnCount();

	// column名を取得
	String[] column = new String[columnCount];

	for (int i = 0; i < columnCount; i++) {
		column[i] = rsMetaData.getColumnName(i + 1);
	}

	recordList.add(column);

	// 開始位置まで移動
	if (rs.relative(startIndex)) {

		do {
			//recordを取得
			String[] record = new String[columnCount];

			for (int i = 0; i < columnCount; i++) {
				record[i] = rs.getString(i + 1);
			}
			recordList.add(record);

			//終了位置までくれば終了
			if (rs.getRow() == endIndex) {
				break;
			}

		} while (rs.next());
	}
	rs.close();
	return recordList;

}

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

DatabaseMetaData指定されたテーブルのカラム名を取得する

DatabaseMetaDataを使用して作成。
接続しているデータベースから、指定されたテーブルのカラム名を取得する。

private List getColumnNameList(String tableName, Connection con) throws SQLException {

	List columnNameList = new ArrayList();

	DatabaseMetaData metaData = (DatabaseMetaData) con.getMetaData();

	ResultSet columnRs = metaData.getColumns("", "", tableName, "");

	while (columnRs.next()) {
		columnNameList.add(columnRs.getString("COLUMN_NAME"));
	}
columnRs.close();
	return columnNameList;
}

データベースからテーブル一覧を取得する

DatabaseMetaDataを使用して作成。
接続しているデータベースから、指定された条件に部分一致するテーブル名称を取得する。条件がブランクなら、全てのテーブルを取得する。

public List getTableNameList(String tableName, Connection con) throws SQLException {

	List tableNameList = new ArrayList();

	DatabaseMetaData metaData = (DatabaseMetaData) con.getMetaData();

	ResultSet tableRs = metaData.getTables("", "%" + tableName + "%", "", null);

	while (tableRs.next()) {
		tableNameList.add(tableRs.getString("TABLE_NAME"));
	}
	tableRs.close();
	return tableNameList;
}

MySQLのインストール

久しぶりに自宅でプログラミングを使用という気になった。
データベース周りのプログラミングをしたいので、
まずは、MySQLの準備をやってみた。

1.MySQLのダウンロード

下記URLの"MySQL Community Server"をダウンロード

http://dev.mysql.com/downloads/

2.MySQLのインストール

ダウンロードしたインストーラーをクリックし、
ウィザードに従えば、問題なくインストールできた。
途中理解せずに選択した項目もあったが、今後調べることにする。

GUIのテストパターン

検索系画面

  • デフォルト表示
    • ユーザ/権限等による、表示/非表示項目の確認。
    • プルダウン系は正しくマスタから取得しているかの確認
        • 抽出条件、ソート条件が正しいこと
  • 検索結果
    • 各検索項目での検索の確認
        • 1項目ずつ確認 + 組み合わせでの確認。必ず1項目ずつ確認する。
    • ソート条件
    • 抽出データ項目・編集仕様の確認。

登録・更新系画面

  • 登録・更新・削除が正しく動くこと
    • 複数同時アクションが可能であれば、それもチェック
  • 入力チェック
    • 限界値、数値項目に文字、未入力(未選択)