指定されたテーブルのデータを、指定された件数だけ取得
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の準備をやってみた。
GUIのテストパターン
検索系画面
- デフォルト表示
- ユーザ/権限等による、表示/非表示項目の確認。
- プルダウン系は正しくマスタから取得しているかの確認
-
- 抽出条件、ソート条件が正しいこと
-
- 検索結果
- 各検索項目での検索の確認
-
- 1項目ずつ確認 + 組み合わせでの確認。必ず1項目ずつ確認する。
-
- ソート条件
- 抽出データ項目・編集仕様の確認。
- 各検索項目での検索の確認
登録・更新系画面
- 登録・更新・削除が正しく動くこと
- 複数同時アクションが可能であれば、それもチェック
- 入力チェック
- 限界値、数値項目に文字、未入力(未選択)
働きたい人を邪魔してはいけない
お前が、そこまでやらなくていいとか、
うちの会社がそこまでやる必要ないとか言われると
非常にやる気がなくなる。