JavaでResultSetから列名を取得する方法!MySQLを使ったgetMetaData()の実装例を解説
ResultSetから列名を取得するには?getMetaData()メソッドの基本
JavaでJDBCを使ってデータベース操作を行っていると、「検索結果(ResultSet)に含まれる列名(カラム名)を動的に知りたい」という場面によく出会います。そんなときに活躍するのが、getMetaData()メソッドです。
このメソッドを呼び出すと、結果セットの構造情報(列の数や名前、型など)を持つResultSetMetaDataオブジェクトを取得できます。プロトタイプ宣言は以下のとおりです。
ResultSetMetaData getMetaData() throws SQLException;
サンプル用テーブルの作成
まず、5つの列を持つMySQLテーブルを作成しましょう。テーブル作成用のSQLは次のとおりです。
mysql> create table javagetallcolumnnames
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(20),
-> Age int,
-> Salary float,
-> Address varchar(100),
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (1.34 sec)
このテーブルは「Id」「Name」「Age」「Salary」「Address」の5つの列で構成されています。
列名を取得するJavaサンプルコード
続いて、ResultSetからすべての列名を取得して表示するJavaプログラム全体を見てみましょう。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import com.mysql.jdbc.ResultSetMetaData;
public class GetAllColumnNames {
public static void main(String[] args) {
String JdbcURL = "jdbc:mysql://localhost:3306/test?useSSL=false";
String Username = "root";
String password = "123456";
Connection con = null;
Statement stmt = null;
ResultSet rs;
try {
con = DriverManager.getConnection(JdbcURL, Username, password);
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT * FROM javagetallcolumnnames");
ResultSetMetaData md = (ResultSetMetaData) rs.getMetaData();
int counter = md.getColumnCount();
String colName[] = new String[counter];
System.out.println("The column names are as follows:");
for (int loop = 1; loop <= counter; loop++) {
colName[loop - 1] = md.getColumnLabel(loop);
System.out.println(colName[loop - 1]);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
コードのポイント解説
このプログラムの処理の流れは以下の3ステップです。
- rs.getMetaData() … 結果セットからResultSetMetaDataオブジェクトを取得します。
- md.getColumnCount() … 結果セットに含まれる列の総数を取得します。
- md.getColumnLabel(loop) … 指定した位置の列名(ラベル)を取得します。
なお、ループの開始値が0ではなく1である点に注意してください。JDBCの列インデックスは1から始まります。そのため、配列への格納時にはloop - 1として調整しています。
また、サンプルではcom.mysql.jdbc.ResultSetMetaDataをインポートしていますが、現在のMySQL Connector/Jでは非推奨のため、java.sql.ResultSetMetaDataを使用するのが推奨されます。その場合はキャストも不要になります。
実行結果
上記プログラムを実行すると、コンソールには次のように5つの列名が出力されます。
The column names are as follows:
Id
Name
Age
Salary
Address
まとめ
ResultSetから列名を取得するには、getMetaData()メソッドでResultSetMetaDataを取得し、getColumnCount()とgetColumnLabel()を組み合わせるのが基本的な方法です。列数が不明なテーブルや、汎用的なDBツール・CSVエクスポート機能などを作成する際に非常に役立つテクニックなので、ぜひ覚えておきましょう。
-
MySQLで特定のカラム名を持つテーブルを検索する方法
MySQLで特定のカラム名(列名)を持つテーブルを探したい場合は、システムビューである information_schema.columns を利用します。このビューにはデータベース内のすべてのテーブルとカラムの情報が格納されているため、条件を指定して検索するだけで、目的のカラムを持つテーブルを簡単に特定できます。 基本構文 カラム名からテーブル名を検索する際の基本的な構文は以下の通りです。 select distinct table_name from information_schema.columns where column_name like %yourSearchValue% a
-
JavaでMySQLテーブルに1つのカラムのみを挿入する方法
JavaとMySQLを連携させる際、テーブルの一部のカラムだけにデータを挿入したいケースはよくあります。その場合は、JDBCのINSERT INTOステートメントを使用します。挿入対象のカラム名を明示的に指定することで、他のカラムには影響を与えずに1つのカラムのみへ値を登録できます。この記事では、実際にテーブルを作成し、Javaのコードから「Name」という1つのカラムだけにデータを挿入する手順を解説します。1. 挿入先のテーブルを作成するまず、MySQLで以下のようにテーブルを作成しておきましょう。ここでは、varchar型の「Name」カラムを1つだけ持つシンプルなテーブルを用意します。m