MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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エクスポート機能などを作成する際に非常に役立つテクニックなので、ぜひ覚えておきましょう。

  1. MySQLで特定のカラム名を持つテーブルを検索する方法

    MySQLで特定のカラム名(列名)を持つテーブルを探したい場合は、システムビューである information_schema.columns を利用します。このビューにはデータベース内のすべてのテーブルとカラムの情報が格納されているため、条件を指定して検索するだけで、目的のカラムを持つテーブルを簡単に特定できます。 基本構文 カラム名からテーブル名を検索する際の基本的な構文は以下の通りです。 select distinct table_name from information_schema.columns where column_name like %yourSearchValue% a

  2. JavaでMySQLテーブルに1つのカラムのみを挿入する方法

    JavaとMySQLを連携させる際、テーブルの一部のカラムだけにデータを挿入したいケースはよくあります。その場合は、JDBCのINSERT INTOステートメントを使用します。挿入対象のカラム名を明示的に指定することで、他のカラムには影響を与えずに1つのカラムのみへ値を登録できます。この記事では、実際にテーブルを作成し、Javaのコードから「Name」という1つのカラムだけにデータを挿入する手順を解説します。1. 挿入先のテーブルを作成するまず、MySQLで以下のようにテーブルを作成しておきましょう。ここでは、varchar型の「Name」カラムを1つだけ持つシンプルなテーブルを用意します。m