トップページ -> 実践知識 -> JDBC によるデータベース・プログラミングと Spring JDBC -> DatabaseMetaData, CREATE TABLE, INSERT の例
[サイトマップへ]  

JDBC での DatabaseMetaData, CREATE TABLE, INSERT の例

サイト構成 連絡先,業績など 実践知識 データの扱い コンピュータ 教材 サポートページ

テーブルの構成情報の取得

getMetaData を使います.

package hoge.hoge.com;

import java.sql.*;
import java.text.DecimalFormat;
import java.util.Properties;

public class HelloWorld {
	// 決まり文句 (ドライバクラス)
	final private static String PostgresJDBCDriver = "org.postgresql.Driver";
	final private static String MySQLJDBCDriver = "org.gjt.mm.mysql.Driver";
	final private static String JavaDBJDBCDriver = "org.apache.derby.jdbc.EmbeddedDriver";
	final private static String HiRDBDriver = "JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDriver";
	// 下記の変数を正しく設定する
	// DBNAME, DBDIR, USER, PASS, JDBCDriver, DBURL


		// PostgreSQL 用デフォルト
		// Eclipse で PostgreSQL を使いたいときは,次の手順で,WebContent\WEB-INF\lib にインポートしておく.
		//     WebContent\WEB-INF\lib を右クリック.「一般」→「ファイルシステム」
		//     その後インポートすべきファイルとして,次のファイルを指定
		//       C:\Program Files\psqlJDBC\postgresql-8.3-603.jdbc4.jar
		final private static String DBNAME = "testdb"; // Database Name
		final private static String USER = "testuser"; // user name for DB.
		final private static String PASS = "hoge$#34hoge5"; // password for DB.
		final private static String JDBCDriver = PostgresJDBCDriver;
		final private static String DBURL = "jdbc:postgresql://localhost/" + DBNAME;


		// MySQL 用デフォルト
		// Eclipse で MySQL を使いたいときは,次の手順で,WebContent\WEB-INF\lib にインポートしておく.
		// http://dev.mysql.com/downloads/connector/ から,Connector/J をダウンロード
		// c:\Program Files\Java\mysql-connector-java-5.1.6\ に置く.
		//     WebContent\WEB-INF\lib を右クリック.「一般」→「ファイルシステム」
		//     その後インポートすべきファイルとして,次のファイルを指定
		//       c:\Program Files\Java\mysql-connector-java-5.1.6\mysql-connector-java-5.1.6-bin.jar を追加
		// final private static String DBNAME = "testdb"; // Database Name
		// final private static String USER = "testuser"; // user name for DB.
		// final private static String PASS = "hoge$#34hoge5"; // password for DB.
		// final private static String JDBCDriver = MySQLJDBCDriver;
		// final private static String DBURL = "jdbc:mysql://localhost/" + DBNAME;   

		// JavaDB用デフォルト
		// final private static String DBNAME = "dbdir;create=true"; // Java DB の場合は,Java DB データベースディレクトリ(相対)
		// final private static String DBDIR = "C:\\Program Files\\eclipse3.5\\eclipse\\"; // データベースが存在するディレクトリ
                // DTP, DBViewer などを使ってデータベースを生成した場合は Eclipse インストールディレクトリ
                // ij などを使ってデータベースを生成した場合は,c:\\<ワークスペース>\\<プロジェクト名>
		// final private static String USER = ""; // user name for DB. Java DB (Derby) の場合は空
		// final private static String PASS = ""; // password for DB. Java DB (Derby) の場合は空
		// final private static String JDBCDriver = JavaDBJDBCDriver;
		// final private static String DBURL = "jdbc:derby:" + DBDIR + DBNAME;

		// HiRDB用デフォルト
		// Eclipse で HiRDB を使いたいときは,次の手順で,WebContent\WEB-INF\lib にインポートしておく.
		//     WebContent\WEB-INF\lib を右クリック.「一般」→「ファイルシステム」
		//     その後インポートすべきファイルとして,次のファイルを指定
		//       C:\win32app\hitachi\hirdb_s\CLIENT\UTL\pdjdbc.jar
		// ユーザ名,パスワード: C:/windows/HiRDB.iniのPDUSERの値を調べておく
		// final private static String USER = "ユーザ名"; // user name for HiRDB. see C:/windows/HiRDB.ini
		// final private static String PASS = "パスワード"; // password for HiRDB. see C:/windows/HiRDB.ini
		// final private static String JDBCDriver = HiRDBDriver;
		// final private static String HiRDBServerName = "hitachi-664320D"; // HiRDB サーバのコンピュータ名
		// final private static String DBURL = "jdbc:hitachi:PrdbDrive://DBID=22200,DBHOST=" + HiRDBServerName + ",ENCODELANG=MS932"; // 'DBID=22200' is in "conf\pdsys";

	// この先は決まり文句
	private static Statement stmt = null;
	// 問い合わせ結果を System.out.print で,画面に出力
	public static void main(String[] args)
	    throws SQLException {
		// Connection
		try {
			connect( USER, PASS );
			// 実行するSQL文と,出力フォーマットを記述する

			conn.setReadOnly(true);
			DatabaseMetaData metadata = conn.getMetaData();
			ResultSet rs = metadata.getTables(null,"%","%", null);
			while(rs.next()){
				String t = rs.getString("TABLE_NAME");
				System.out.println("--------");
				System.out.println(t);
				System.out.println("--------");
				ResultSet rs2 = metadata.getColumns(null,null,t,"%");
				while(rs2.next()){
					String a1 = rs2.getString("COLUMN_NAME");
					String a2 = rs2.getString("TYPE_NAME");
					String a3 = rs2.getString("CHAR_OCTET_LENGTH");
					System.out.println(a1 + " " + a2 + " " + a3 );
				}
			}
			
			stmt.close();
			disconnect();
		}
		catch (Exception e) {
			// Error Message and Error Code
			System.out.print(e.toString());
			if (e instanceof SQLException) {
				System.out.println("Error Code:" + ((SQLException)e).getErrorCode());
			}
			// Print Stack Trace
			e.printStackTrace();
			if (conn != null) {
				conn.rollback();
				conn.close();
			}
		}	
	}
	
	/*
	 *  Service Functions
	 *  ここから先は,決まり文句を関数化したもの.
	 */
	static Connection conn = null;
	//
	// database open
	//
	public static void connect( String user, String pass ) 
	throws SQLException, ClassNotFoundException {
		try {
			// JDBC Driver Loading
			Class.forName(JDBCDriver).newInstance();
			System.setProperty("jdbc.driver",JDBCDriver);
		}
		catch (Exception e) {
			// Error Message and Error Code
			System.out.print(e.toString());
			if (e instanceof SQLException) {
				System.out.println("Error Code:" + ((SQLException)e).getErrorCode());
			}
			// Print Stack Trace
			e.printStackTrace();
		}
		try {
			// Connection
			if ( user.isEmpty() && pass.isEmpty() ) {
				conn = DriverManager.getConnection(DBURL);			
			}
			else {
				Properties prop = new Properties();
				prop.put("user", user);
				prop.put("password", pass);
				conn = DriverManager.getConnection(DBURL,prop);	
			}
		}
		catch (Exception e) {
			// Error Message and Error Code
			System.out.print(e.toString());
			if (e instanceof SQLException) {
				System.out.println("Error Code:" + ((SQLException)e).getErrorCode());
			}
			// Print Stack Trace
			e.printStackTrace();
			if (conn != null) {
				conn.rollback();
				conn.close();
			}
		}
	}
	//
	// database close
	//
	public static void disconnect()
	    throws SQLException {
		try {
			conn.close();
		}
		catch (Exception e) {
			// Error Message and Error Code
			System.out.print(e.toString());
			if (e instanceof SQLException) {
				System.out.println("Error Code:" + ((SQLException)e).getErrorCode());
			}
			// Print Stack Trace
			e.printStackTrace();
			if (conn != null) {
				conn.rollback();
				conn.close();
			}
		}
	}
	//
	// execute
	//
	public static ResultSet execute( String sql )
	    throws SQLException {
		try {	
			conn.setReadOnly(true);
			// Execute 'commit' Automatically after each SQL
			// conn.setAutoCommit(true);		 
			// Query Exection 		 
			stmt = conn.createStatement();
			return stmt.executeQuery(sql);
		}
		catch (Exception e) {
			// Error Message and Error Code
			System.out.print(e.toString());
			if (e instanceof SQLException) {
				System.out.println("Error Code:" + ((SQLException)e).getErrorCode());
			}
			// Print Stack Trace
			e.printStackTrace();
			if (conn != null) {
				conn.rollback();
				conn.close();
			}
			return null;
		}
	}
}

実行結果

--------
SYSALIASES
--------
ALIASID CHAR 72
ALIAS VARCHAR 256
SCHEMAID CHAR 72
JAVACLASSNAME LONG VARCHAR null
ALIASTYPE CHAR 2
NAMESPACE CHAR 2
SYSTEMALIAS BOOLEAN null
ALIASINFO org.apache.derby.catalog.AliasInfo null
SPECIFICNAME VARCHAR 256
--------
SYSCHECKS
--------
CONSTRAINTID CHAR 72
CHECKDEFINITION LONG VARCHAR null
REFERENCEDCOLUMNS org.apache.derby.catalog.ReferencedColumns null
--------
SYSCOLPERMS
--------
COLPERMSID CHAR 72
GRANTEE VARCHAR 256
GRANTOR VARCHAR 256
TABLEID CHAR 72
TYPE CHAR 2
COLUMNS org.apache.derby.iapi.services.io.FormatableBitSet null
--------
SYSCOLUMNS
--------
REFERENCEID CHAR 72
COLUMNNAME VARCHAR 256
COLUMNNUMBER INTEGER null
COLUMNDATATYPE org.apache.derby.catalog.TypeDescriptor null
COLUMNDEFAULT java.io.Serializable null
COLUMNDEFAULTID CHAR 72
AUTOINCREMENTVALUE BIGINT null
AUTOINCREMENTSTART BIGINT null
AUTOINCREMENTINC BIGINT null
--------
SYSCONGLOMERATES
--------
SCHEMAID CHAR 72
TABLEID CHAR 72
CONGLOMERATENUMBER BIGINT null
CONGLOMERATENAME VARCHAR 256
ISINDEX BOOLEAN null
DESCRIPTOR org.apache.derby.catalog.IndexDescriptor null
ISCONSTRAINT BOOLEAN null
CONGLOMERATEID CHAR 72
--------
SYSCONSTRAINTS
--------
CONSTRAINTID CHAR 72
TABLEID CHAR 72
CONSTRAINTNAME VARCHAR 256
TYPE CHAR 2
SCHEMAID CHAR 72
STATE CHAR 2
REFERENCECOUNT INTEGER null
--------
SYSDEPENDS
--------
DEPENDENTID CHAR 72
DEPENDENTFINDER org.apache.derby.catalog.DependableFinder null
PROVIDERID CHAR 72
PROVIDERFINDER org.apache.derby.catalog.DependableFinder null
--------
SYSFILES
--------
FILEID CHAR 72
SCHEMAID CHAR 72
FILENAME VARCHAR 256
GENERATIONID BIGINT null
--------
SYSFOREIGNKEYS
--------
CONSTRAINTID CHAR 72
CONGLOMERATEID CHAR 72
KEYCONSTRAINTID CHAR 72
DELETERULE CHAR 2
UPDATERULE CHAR 2
--------
SYSKEYS
--------
CONSTRAINTID CHAR 72
CONGLOMERATEID CHAR 72
--------
SYSROUTINEPERMS
--------
ROUTINEPERMSID CHAR 72
GRANTEE VARCHAR 256
GRANTOR VARCHAR 256
ALIASID CHAR 72
GRANTOPTION CHAR 2
--------
SYSSCHEMAS
--------
SCHEMAID CHAR 72
SCHEMANAME VARCHAR 256
AUTHORIZATIONID VARCHAR 256
--------
SYSSTATEMENTS
--------
STMTID CHAR 72
STMTNAME VARCHAR 256
SCHEMAID CHAR 72
TYPE CHAR 2
VALID BOOLEAN null
TEXT LONG VARCHAR null
LASTCOMPILED TIMESTAMP null
COMPILATIONSCHEMAID CHAR 72
USINGTEXT LONG VARCHAR null
--------
SYSSTATISTICS
--------
STATID CHAR 72
REFERENCEID CHAR 72
TABLEID CHAR 72
CREATIONTIMESTAMP TIMESTAMP null
TYPE CHAR 2
VALID BOOLEAN null
COLCOUNT INTEGER null
STATISTICS org.apache.derby.catalog.Statistics null
--------
SYSTABLEPERMS
--------
TABLEPERMSID CHAR 72
GRANTEE VARCHAR 256
GRANTOR VARCHAR 256
TABLEID CHAR 72
SELECTPRIV CHAR 2
DELETEPRIV CHAR 2
INSERTPRIV CHAR 2
UPDATEPRIV CHAR 2
REFERENCESPRIV CHAR 2
TRIGGERPRIV CHAR 2
--------
SYSTABLES
--------
TABLEID CHAR 72
TABLENAME VARCHAR 256
TABLETYPE CHAR 2
SCHEMAID CHAR 72
LOCKGRANULARITY CHAR 2
--------
SYSTRIGGERS
--------
TRIGGERID CHAR 72
TRIGGERNAME VARCHAR 256
SCHEMAID CHAR 72
CREATIONTIMESTAMP TIMESTAMP null
EVENT CHAR 2
FIRINGTIME CHAR 2
TYPE CHAR 2
STATE CHAR 2
TABLEID CHAR 72
WHENSTMTID CHAR 72
ACTIONSTMTID CHAR 72
REFERENCEDCOLUMNS org.apache.derby.catalog.ReferencedColumns null
TRIGGERDEFINITION LONG VARCHAR null
REFERENCINGOLD BOOLEAN null
REFERENCINGNEW BOOLEAN null
OLDREFERENCINGNAME VARCHAR 256
NEWREFERENCINGNAME VARCHAR 256
--------
SYSVIEWS
--------
TABLEID CHAR 72
VIEWDEFINITION LONG VARCHAR null
CHECKOPTION CHAR 2
COMPILATIONSCHEMAID CHAR 72
--------
SYSDUMMY1
--------
IBMREQD CHAR 2
--------
COMMODITY
--------
TYPE INTEGER null
NAME VARCHAR 2000
PRICE INTEGER null
1 apple 50円
2 orange 20円
3 strawberry 100円
4 watermelon 150円
5 melon 200円
6 banana 100円

create table の発行

package hoge.hoge.com;

import java.sql.*;
import java.text.DecimalFormat;
import java.util.Properties;

public class HelloWorld {
	// 決まり文句 (ドライバクラス)
	final private static String PostgresJDBCDriver = "org.postgresql.Driver";
	final private static String MySQLJDBCDriver = "org.gjt.mm.mysql.Driver";
	final private static String JavaDBJDBCDriver = "org.apache.derby.jdbc.EmbeddedDriver";
	final private static String HiRDBDriver = "JP.co.Hitachi.soft.HiRDB.JDBC.PrdbDriver";
	// 下記の変数を正しく設定する
	// DBNAME, DBDIR, USER, PASS, JDBCDriver, DBURL


        // PostgreSQL 用デフォルト
        // Eclipse で PostgreSQL を使いたいときは,次の手順で,外部jarファイルの追加を行っておく.
        //     プロジェクトを右クリック.「プロパティー」→「Java コンパイラー」→「Java のビルド・パス」→「ライブラリ」
        //     「外部JARの追加」をクリックして、次のライブラリを追加.
        //      C:\Program Files\psqlJDBC\postgresql-8.3-603.jdbc4.jar を追加
        final private static String DBNAME = "testdb"; // Database Name
        final private static String USER = "testuser"; // user name for DB.
        final private static String PASS = "hoge$#34hoge5"; // password for DB.
        final private static String JDBCDriver = PostgresJDBCDriver;
        final private static String DBURL = "jdbc:postgresql://localhost/" + DBNAME;


        // MySQL 用デフォルト
        // Eclipse MySQL を使いたいときは,次の手順で,外部jarファイルの追加を行っておく.
	    // http://dev.mysql.com/downloads/connector/ から、Connector/J をダウンロード
	    // c:\Program Files\Java\mysql-connector-java-5.1.6\ に置く。
        //     プロジェクトを右クリック.「プロパティー」→「Java コンパイラー」→「Java のビルド・パス」→「ライブラリ」
        //     「外部JARの追加」をクリックして、次のライブラリを追加.
        //       c:\Program Files\Java\mysql-connector-java-5.1.6\mysql-connector-java-5.1.6-bin.jar を追加
        final private static String DBNAME = "testdb"; // Database Name
        final private static String USER = "testuser"; // user name for DB.
        final private static String PASS = "hoge$#34hoge5"; // password for DB.
        final private static String JDBCDriver = MySQLJDBCDriver;
        final private static String DBURL = "jdbc:mysql://localhost/" + DBNAME;   

        // JavaDB用デフォルト
        // final private static String DBNAME = "dbdir;create=true"; // Java DB の場合は、Java DB データベースディレクトリ(相対)
        // final private static String DBDIR = "C:\\Program Files\\eclipse-SDK-3.3-win32\\eclipse\\"; // データベースが存在するディレクトリ
                                            // DTP, DBViewer などを使ってデータベースを生成した場合は Eclipse インストールディレクトリ
                                            // ij などを使ってデータベースを生成した場合は、c:\\<ワークスペース>\\<プロジェクト名>
        // final private static String USER = ""; // user name for DB. JavaDB の場合は空
        // final private static String PASS = ""; // password for DB. JavaDB の場合は空
        // final private static String JDBCDriver = JavaDBJDBCDriver;
        // final private static String DBURL = "jdbc:derby:" + DBDIR + DBNAME;

        // HiRDB用デフォルト
        // Eclipse で HiRDB を使いたいときは,次の手順で,外部jarファイルの追加を行っておく.
        //     プロジェクトを右クリック.「プロパティー」→「Java コンパイラー」→「Java のビルド・パス」→「ライブラリ」
        //     「外部JARの追加」をクリックして、次のライブラリを追加.
        //       C:\win32app\hitachi\hirdb_s\CLIENT\UTL\pdjdbc.jar
        // ユーザ名、パスワード: C:/windows/HiRDB.iniのPDUSERの値を調べておく
        // final private static String USER = "ユーザ名"; // user name for HiRDB. see C:/windows/HiRDB.ini
        // final private static String PASS = "パスワード"; // password for HiRDB. see C:/windows/HiRDB.ini
        // final private static String JDBCDriver = HiRDBDriver;
        // final private static String HiRDBServerName = "hitachi-664320D"; // HiRDB サーバのコンピュータ名
        // final private static String DBURL = "jdbc:hitachi:PrdbDrive://DBID=22200,DBHOST=" + HiRDBServerName + ",ENCODELANG=MS932"; // 'DBID=22200' is in "conf\pdsys";

	// この先は決まり文句
	private static Statement stmt = null;
	// 問い合わせ結果を System.out.print で,画面に出力
	public static void main(String[] args)
	    throws SQLException {
		// Connection
		try {
			connect( USER, PASS );
			// 実行するSQL文と,出力フォーマットを記述する
			
			/*
			 *
			int count = executeUpdate("create table EMPL ( "+
					"EID NUMERIC(6) primary key, " +
					"ENAME VARCHAR(20), " +
					"MANAGERID NUMERIC(6), " +
					"HIREDATE DATE, " +
					"SALARY INTEGER )");
			conn.commit();
			stmt.close();
			*/
			
			int count = executeUpdate("insert into EMPL values (1, 'Bill', 1, '2007-04-01', 100000)");
			conn.commit();
			stmt.close();
			
			ResultSet rs = execute("select * from EMPL");
			DecimalFormat dformat = new DecimalFormat ("#,###円");
			while(rs.next()){		 
				int id = rs.getInt("EID");
		        String n = rs.getString("ENAME");
		        int m = rs.getInt("MANAGERID");
		        Date d = rs.getDate("HIREDATE");
		        int s = rs.getInt("SALARY");
		        System.out.println(id + " " + n + " " + " " + m + " " + d + " " + dformat.format( s ) );
			}

			stmt.close();
			disconnect();
		}
		catch (Exception e) {
			// Error Message and Error Code
			System.out.print(e.toString());
			if (e instanceof SQLException) {
				System.out.println("Error Code:" + ((SQLException)e).getErrorCode());
			}
			// Print Stack Trace
			e.printStackTrace();
			if (conn != null) {
				conn.rollback();
				conn.close();
			}
		}	
	}
	
	/*
	 *  Service Functions
	 *  ここから先は,決まり文句を関数化したもの.
	 */
	static Connection conn = null;
	//
	// database open
	//
	public static void connect( String user, String pass ) 
	throws SQLException, ClassNotFoundException {
		try {
			// JDBC Driver Loading
			Class.forName(JDBCDriver).newInstance();
			System.setProperty("jdbc.driver",JDBCDriver);
		}
		catch (Exception e) {
			// Error Message and Error Code
			System.out.print(e.toString());
			if (e instanceof SQLException) {
				System.out.println("Error Code:" + ((SQLException)e).getErrorCode());
			}
			// Print Stack Trace
			e.printStackTrace();
		}
		try {
			// Connection
			if ( user.isEmpty() && pass.isEmpty() ) {
				conn = DriverManager.getConnection(DBURL);			
			}
			else {
				Properties prop = new Properties();
				prop.put("user", user);
				prop.put("password", pass);
				conn = DriverManager.getConnection(DBURL,prop);	
			}
		}
		catch (Exception e) {
			// Error Message and Error Code
			System.out.print(e.toString());
			if (e instanceof SQLException) {
				System.out.println("Error Code:" + ((SQLException)e).getErrorCode());
			}
			// Print Stack Trace
			e.printStackTrace();
			if (conn != null) {
				conn.rollback();
				conn.close();
			}
		}
	}
	//
	// database close
	//
	public static void disconnect()
	    throws SQLException {
		try {
			conn.close();
		}
		catch (Exception e) {
			// Error Message and Error Code
			System.out.print(e.toString());
			if (e instanceof SQLException) {
				System.out.println("Error Code:" + ((SQLException)e).getErrorCode());
			}
			// Print Stack Trace
			e.printStackTrace();
			if (conn != null) {
				conn.rollback();
				conn.close();
			}
		}
	}
	//
	// execute
	//
	public static ResultSet execute( String sql )
	    throws SQLException {
		try {	
			conn.setReadOnly(true);
			// Execute 'commit' Automatically after each SQL
			// conn.setAutoCommit(true);		 
			// Query Exection 		 
			stmt = conn.createStatement();
			return stmt.executeQuery(sql);
		}
		catch (Exception e) {
			// Error Message and Error Code
			System.out.print(e.toString());
			if (e instanceof SQLException) {
				System.out.println("Error Code:" + ((SQLException)e).getErrorCode());
			}
			// Print Stack Trace
			e.printStackTrace();
			if (conn != null) {
				conn.rollback();
				conn.close();
			}
			return null;
		}
	}
	//
	// executeUpdate
	//
	public static int executeUpdate( String sql )
	    throws SQLException {
		try {	
			conn.setReadOnly(false);
			conn.setAutoCommit(false);
			// Execute 'commit' Automatically after each SQL
			// conn.setAutoCommit(true);		 
			// Query Exection 		 
			stmt = conn.createStatement();
			// executeUpdate() は int 値 (count) を返す.
			return stmt.executeUpdate(sql);
		}
		catch (Exception e) {
			// Error Message and Error Code
			System.out.print(e.toString());
			if (e instanceof SQLException) {
				System.out.println("Error Code:" + ((SQLException)e).getErrorCode());
			}
			// Print Stack Trace
			e.printStackTrace();
			if (conn != null) {
				conn.rollback();
				conn.close();
			}
			return -1;
		}
	}
}

参考Webページ http://www.atmarkit.co.jp/fjava/rensai2/jspservlet10/jspsevlet10_1.html

http://www.atmarkit.co.jp/fjava/index/index_jdbc.html