データベース操作 MySQLを使う

SELECTで得たレコード表示を行う例 

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();
			}