java.sql.DatabaseMetaData
インターフェイスは、接続されたデータベースサーバーのメタデータを取得するためのメソッドを提供します。以下の例は、それを1つずつ行う方法を示しています。
java.sql.DatabaseMetaDataインスタンス
DatabaseMetaDataオブジェクトは、データベース接続オブジェクトから取得されます。
DatabaseMetaData dbmd = dbConn.getMetaData();
DBの名前とバージョン
String dbProductName = dbmd.getDatabaseProductName();
String dbProductVersion = dbmd.getDatabaseProductVersion();
int dbMajorVersion = dbmd.getDatabaseMajorVersion();
int dbMinorVersion = dbmd.getDatabaseMinorVersion();
JDBCドライバーバージョン
int jdbcDriverMajorVersion = dbmd.getDriverMajorVersion();
int jdbcDriverMinorVersion = dbmd.getDriverMinorVersion();
データベースリスト
ResultSet rs = dbmd.getCatalogs(); if(rs!=null) { while(rs.next()) { String catalogName = rs.getString(1); System.out.println("Database catalog : " + catalogName); } }
テーブルリスト
// Get all tables of this database. ResultSet tblRs = dbmd.getTables(catalogName, "", "", null); if(tblRs!=null) { while(tblRs.next()) { // Get table String tmpDBName = tblRs.getString(1); String tmpTblName = tblRs.getString(3); System.out.println("DB : " + tmpDBName + " , table : " + tmpTblName); } }
テーブル列リスト
// Get columns ResultSet columnRs = dbmd.getColumns(catalogName, "", tmpTblName, ""); if(columnRs!=null) { while(columnRs.next()) { // Get column type and name. String cType = columnRs.getString(6); String cName = columnRs.getString(4); System.out.println("Column Name : " + cName + " , Column Type : " + cType); } }
完全なサンプルコード
以下の例では、MySQLデータベースサーバーを使用します。
public class DatabaseMetaDataExample { public static void main(String[] args) { try { /* Below are db connection required data. */ String ip = "localhost"; int port = 3306; String dbName = "test"; String userName = "root"; String password = ""; DatabaseMetaDataExample dbmdExample = new DatabaseMetaDataExample(); // Get database connection. Connection dbConn = dbmdExample.getMySqlConnection(ip, port, dbName, userName, password); // Get database metadata. DatabaseMetaData dbmd = dbConn.getMetaData(); // Get db name. String dbProductName = dbmd.getDatabaseProductName(); System.out.println("DB product name : " + dbProductName); // Get db product version. String dbProductVersion = dbmd.getDatabaseProductVersion(); System.out.println("DB product version : " + dbProductVersion); // Get db major & minor version. int dbMajorVersion = dbmd.getDatabaseMajorVersion(); System.out.println("DB major version : " + dbMajorVersion); int dbMinorVersion = dbmd.getDatabaseMinorVersion(); System.out.println("DB minor version : " + dbMinorVersion); // Get jdbc driver major & minor version. int jdbcDriverMajorVersion = dbmd.getDriverMajorVersion(); System.out.println("JDBC driver major version : " + jdbcDriverMajorVersion); int jdbcDriverMinorVersion = dbmd.getDriverMinorVersion(); System.out.println("JDBC driver minor version : " + jdbcDriverMinorVersion); // Get all database catalogs. ResultSet rs = dbmd.getCatalogs(); if(rs!=null) { while(rs.next()) { String catalogName = rs.getString(1); System.out.println("Database catalog : " + catalogName); // Get all tables of this database. ResultSet tblRs = dbmd.getTables(catalogName, "", "", null); if(tblRs!=null) { while(tblRs.next()) { // Get table String tmpDBName = tblRs.getString(1); String tmpTblName = tblRs.getString(3); System.out.println("DB : " + tmpDBName + " , table : " + tmpTblName); // Get columns ResultSet columnRs = dbmd.getColumns(catalogName, "", tmpTblName, ""); if(columnRs!=null) { while(columnRs.next()) { // Get column type and name. String cType = columnRs.getString(6); String cName = columnRs.getString(4); System.out.println("Column Name : " + cName + " , Column Type : " + cType); } } } } } } dbmdExample.closeDBResource(null, dbConn); } catch (SQLException ex) { ex.printStackTrace(); } } /* This method return java.sql.Connection object from MySQL server. */ public Connection getMySqlConnection(String ip, int port, String dbName, String userName, String password) { /* Declare and initialize a sql Connection variable. */ Connection ret = null; try { /* Register for mysql jdbc driver class. */ Class.forName("com.mysql.jdbc.Driver"); /* Create mysql connection url. */ String mysqlConnUrl = "jdbc:mysql://" + ip + ":" + port + "/" + dbName; /* Get the mysql Connection object. */ ret = DriverManager.getConnection(mysqlConnUrl, userName , password); }catch(Exception ex) { ex.printStackTrace(); }finally { return ret; } } /* Close statement and connection after use, this can avoid resource waste. */ public void closeDBResource(Statement stmt, Connection conn) { try { if(stmt!=null) { stmt.close(); stmt = null; } if(conn!=null) { conn.close(); conn = null; } }catch(Exception ex) { ex.printStackTrace(); } } }
ソースコード:
- [download id =” 2567”]
参照:
- インターフェイスDatabaseMetaData