JavaでMySQLデータベース内のすべてのテーブル一覧を取得・表示する方法
この記事では、Javaを使ってMySQLデータベース内のすべてのテーブルを表示する方法を解説します。テーブルの一覧を取得するには、JDBCのDatabaseMetaDataインターフェースを利用するのが一般的です。また、MySQL側ではSHOW TABLESコマンドでも同じ結果が得られるため、両方の方法を紹介し、最後に結果を照合して確認します。
前提条件
ここでは、サンプルデータベースとして「test」を使用します。JavaからMySQLに接続するために、MySQL Connector/J(JDBCドライバー)が必要です。
Javaでデータベース接続を確立する
まず、Class.forName()でJDBCドライバーを読み込み、DriverManager.getConnection()を使ってMySQLとの接続を確立します。以下のコードでは、ホスト「localhost」の「test」データベースに接続しています。
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.DatabaseMetaData;
public class GetAllTables {
public static void main(String[] args) throws SQLException {
Connection conn = null;
try {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
System.out.println(e);
}
conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/test", "Manish", "123456");
System.out.println("接続が正常に確立されました:");
} catch (Exception e) {
System.out.println(e);
}
ResultSet rs = null;
DatabaseMetaData meta = (DatabaseMetaData) conn.getMetaData();
rs = meta.getTables(null, null, null, new String[] {
"TABLE"
});
int count = 0;
System.out.println("testデータベース内のすべてのテーブル名:");
while (rs.next()) {
String tblName = rs.getString("TABLE_NAME");
System.out.println(tblName);
count++;
}
System.out.println(count + " 行が見つかりました ");
}
}コードのポイント
- getMetaData()メソッド: 接続オブジェクトからデータベースのメタ情報(構造情報)を取得します。
- getTables()メソッド: 第1引数にカタログ名、第2引数にスキーマパターン、第3引数にテーブル名パターンを指定できます。すべてnullにすると制限なしで全件を取得し、第4引数で種類を「TABLE」に限定しています。
- TABLE_NAMEカラム: 結果セットからは
rs.getString("TABLE_NAME")でテーブル名を1件ずつ取り出せます。 - SSL警告について: 実行時にSSL接続に関する警告が表示される場合は、接続URLに
?useSSL=falseを追加するか、信頼できるトラストストアを設定することで対応できます。
実行結果の出力例
上記のプログラムを実行すると、「test」データベース内のすべてのテーブル名が以下のように出力されます(一部抜粋)。
Wed Dec 12 14:55:28 IST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended... 接続が正常に確立されました: testデータベース内のすべてのテーブル名: add30minutesdemo addcolumn addoneday agecalculatesdemo aliasdemo allcharacterbeforespace allownulldemo appendingdatademo autoincrementdemo betweendatedemo ... student studentdemo studentmodifytabledemo studenttable subtract3hours ... zipcodepadwithzerodemo 103 Rows in set
この例では、合計103件のテーブルが検出されました。
MySQLのSHOW TABLESコマンドで確認する
Javaプログラムの結果が正しいかどうかを確認するには、MySQLクライアントでSHOW TABLESコマンドを実行します。
mysql> use test; Database changed mysql> show tables;
実行結果は次のようになります(一部抜粋)。
+------------------------------+ | Tables_in_test | +------------------------------+ | add30minutesdemo | | addcolumn | | addoneday | | agecalculatesdemo | | aliasdemo | | allcharacterbeforespace | | allownulldemo | | appendingdatademo | | autoincrementdemo | | betweendatedemo | | bigintandintdemo | | bigintdemo | | bookdatedemo | | changecolumnpositiondemo | | changeenginetabledemo | | charsetdemo | | concatenatetwocolumnsdemo | | constraintdemo | | cumulativesumdemo | | currentdatetimedemo | | customers | | ... | | zipcodepadwithzerodemo | +------------------------------+ 103 rows in set (0.01 sec)
まとめ
上記の出力結果を比較すると、JavaのDatabaseMetaData.getTables()による取得結果と、MySQLのSHOW TABLESコマンドによる結果が完全に一致していることがわかります。このように、Javaアプリケーションからでもデータベース内のテーブル構造を簡単に把握でき、動的な処理や管理ツールの開発などに活用できます。
-
MySQLでデータベース内のテーブル数を表示するクエリの書き方
INFORMATION_SCHEMA.TABLESを使ってテーブル数を取得するここでは例として、「WEB」というデータベースを使用しているものとします。このデータベース内に存在するテーブルの総数を調べたい場合、MySQLではINFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、MySQLサーバーが管理しているメタデータ(データベース名、テーブル名、カラム情報など)を格納する仮想データベースであり、これを参照することでスキーマに関する情報をSQLで簡単に取得できます。テーブル数を表示するクエリ「WEB」データベース内のテーブル数を表示す
-
Javaを使用してMySQLテーブルの値を表示する方法
MySQLデータベースのテーブル値をJavaで表示するには、ResultSetの概念を利用します。データベースへの接続には、MySQL JDBCドライバーを使用します。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table demo87 -> ( -> name varchar(20), -> age int -> )