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 にインポートしておく.
// https://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ファイルの追加を行っておく.
// https://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