Z:\mysql5.0.67>mysql -h 192.168.0.33 -u tenin2 uri2 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.0.67-community-log MySQL Community Edition (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> SELECT * FROM denhyou; +---------+---------------------+-------+ | hinban | nitiji | kosuu | +---------+---------------------+-------+ | S000101 | 2003-07-02 12:24:30 | 5 | | S000102 | 2003-07-02 13:01:03 | 2 | | S000103 | 2003-07-02 13:10:50 | NULL | | S000103 | 2003-07-04 09:50:24 | 9 | | S000102 | 2003-07-04 14:40:20 | 10 | +---------+---------------------+-------+
上記のように実行できるMySQLデータベースがあるとする時、
これを同じレコードを取得するプログラムを示します。
次の手続きで行います。
・Class.forNameでJDBCドライバを読み込み。
・java.sql.DriverManager.getConnectionでデータベースへの接続します。
・java.sql.Statementオブジェクトを得て、静的なSQL 文を実行すます。
(上記で得られた作成された結果のResultSetを使います。)
各インターフェイスやクラスは次のリンクで調べましょう。
import java.sql.DriverManager;//JDBCドライバ管理用 import java.sql.Connection;//データベース接続用インターフェイス import java.sql.Statement;//静的 SQL 文を実行し、作成された結果を返すためのインタフェース import java.sql.ResultSet;//データベースの処理結果管理するインタフェース import java.sql.SQLException;//データベース関連のエラー用クラス import java.sql.Date;//SQL用日時管理クラス public class MySQLTest { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection( "jdbc:mysql://192.168.0.33:3306/uri2",//このIPアドレスにある「」のデータベースを指定 "tenin2",//接続するユーザー名 ""//上記ユーザーのパスワード無し ); Statement st = conn.createStatement();//静的 SQL 文を実行用 System.out.println("select実行"); //SQL 文を実行し、結果を得る ResultSet rs = st.executeQuery("select hinban,nitiji,kosuu from denhyou"); //取得したレコードの表示と切断処理 while (rs.next()){ String name = rs.getString(1); Date date = rs.getDate(2);//java.sql.Dateでjava.util.Dateの継承クラスを使います String tanka = rs.getString(3); System.out.printf("品番:%s, 日時:%s, 個数:%s\n", name, date.toString(), tanka ); } //レコードの表示と切断処理) rs.close(); st.close(); conn.close(); } catch (ClassNotFoundException e) {// 例外処理 System.out.println("ドライバを読み込めませんでした "+ e); } catch (SQLException e) { System.out.println("データベース接続エラー "+ e); } } }
上記のようにデータベースを扱う場合は、
そのデータベースに接続するために必要なコネクタと呼ばれる
ライブラリを使って実行させる必要があります。
それを使わない場合のエラー例を示します。
その後で、正常に実行させています。
ここで、mysql-connector-java-5.1.7-bin.jar が、MySQLで使用するコネクタです。
Z:\>java -classpath ".;Z:\dk1.5.0;." MySQLTest ドライバを読み込めませんでした java.lang.ClassNotFoundException: com.mysql.jdbc.Driver Z:\>java -classpath ".;Z:\dk1.5.0;.\mysql-connector-java-5.1.7-bin.jar;." MySQLTest select実行 品番:S000101, 日時:2003-07-02, 個数:5 品番:S000102, 日時:2003-07-02, 個数:2 品番:S000103, 日時:2003-07-02, 個数:null 品番:S000103, 日時:2003-07-04, 個数:9 品番:S000102, 日時:2003-07-04, 個数:10 Z:\>
"tencyou" のユーザー名で、"abc123"のパスワードで、 192.168.0.33のホストにあるuri2の名前のデータベースに接続します。 そして、INSTERとDELETEを行うプログラム例です。
import java.sql.DriverManager;//JDBCドライバ管理用
import java.sql.Connection;//データベース接続用インターフェイス
import java.sql.Statement;//静的 SQL 文を実行し、作成された結果を返すためのインタフェース
import java.sql.ResultSet;//データベースの処理結果管理するインタフェース
import java.sql.SQLException;//データベース関連のエラー用クラス
import java.sql.Date;//SQL用日時管理クラス
public class MySQLTest
{
public static void main(String[] args){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://192.168.0.33:3306/uri2",//このIPアドレスにある「」のデータベースを指定
"tencyou",//接続するユーザー名
"abc123"//上記ユーザーのパスワード
);
Statement st = conn.createStatement();//静的 SQL 文を実行用
System.out.println("");
int r;
//SQL 文を実行し、結果を得る
r = st.executeUpdate("INSERT INTO denhyou VALUES ('S000102', '2003-08-04 14:40:20',10);");
System.out.printf("INSERT 実行結果%d\n", r);
r = st.executeUpdate("DELETE from denhyou where nitiji = '2003-08-04 14:40:20';");
System.out.printf("DELETE 実行結果%d\n", r);
/* (1) */
//レコードの表示と切断処理
st.close();
conn.close();
}
catch (ClassNotFoundException e){// 例外処理
System.out.println("ドライバを読み込めませんでした " + e);
}
catch (SQLException e){
System.out.println("データベース接続エラー " + e);
}
catch (Exception e){
System.out.println("その他エラー " + e);
}
}
}
実行例を示します。
(挿入したレコードを、直後に削除しているので、変化しません)
Z:\>java -classpath ".;Z:\dk1.5.0;.\mysql-connector-java-5.1.7-bin.jar;." MySQLTest INSERT 実行結果:1 DELETE 実行結果:1 Z:\>
なお、列名の表示や日本語を含めた、全データを表示さるためには、 /* (1) */に次のコードを追加するとよいでしょう。 なお、これは日本語にシフトJISを使っている場合の例です。
ResultSet rs = st.executeQuery("SELECT * FROM syouhyou"); java.sql.ResultSetMetaData meta = rs.getMetaData(); //メタデータ取得 int columnNumber = meta.getColumnCount(); //列数を取得 String column[] = new String[columnNumber]; //列名記憶用 for (int i = 0; i < columnNumber; i++){ //列名 column[i] = meta.getColumnName(i + 1); System.out.printf("%20s", column[i]); } System.out.println(); while (rs.next()){ //結果のレコード集合を列ごとに処理する繰り返し for (int i = 0; i < column.length; i++){ byte[] a = rs.getBytes(column[i]); String data = ""; // for( int k = 0; k < a.length; k++)data += String.format("%2x ", a[k]); data = new String(a, "Shift_JIS");//Shift_JIS,UTF-8,UTF-16,UTF-16BE,UTF-16LE,ISO-8859-1 System.out.printf("%20s", data); } System.out.println(); }