SQLの窓

2015年05月28日


Java 8 で、sun.jdbc.odbc.JdbcOdbcDriver を使う手順

さらに個別にしてテストしてみたところ、sun/jdbc と sun/security/action/LoadLibraryAction.class のみにして sun の見えるフォルダから、"C:\pleiades\java\8\bin\jar.exe" cvf jdbc.jar sun としても動作しました。あくまで対症療法なので、問題が出る可能性は残っています。ただ、sun の他のクラスを使っている場合はこの方法を取ったほうがいいと言うところです。
Java 7 までは、rt.jar の中に、sun/jdbc がありますが、java 8 では、jdbc を含めたいくつかが削除されています。そこで、 Java 7 の sun 以下を全て jdbc.jar として作成しなおして、プロジェクトのビルドパスで外部参照します。さらに、Java 7 までしかない JdbcOdbc.dll を Java 8 の jre/bin にコピーすると以前と同じように使えるはずです。Pleiades を使えば、java フォルダに 6 と 7 と 8 があるので、テストはすぐ可能です。 1) Java 7 の rt.jar を rt.zip にリネームして解凍 2) sun の見えるフォルダで、『"C:\pleiades\java\8\bin\jar.exe" cvf jdbc.jar sun』 ※ Pleiades の Java 8 の jar.exe を使用しています 3) ビルド・パスのライブラリタブの外部 jar で jdbc.jar を参照 4) JdbcOdbc.dll を Java 8 側にコピー 各 DB の JDBC ドライバ あればそちらを使うほうが今後は良いと思いますが、全てのデーベースに JDBC ドライバがあるとは限らないので、イザと言う時の為に検証しておいたほうがいいかもしれません MySQL でのテストコード ※ WindowBuilder の JFace のボタンクリックからの処理です
		Button btnNewButton = new Button(container, SWT.NONE);
		btnNewButton.addSelectionListener(new SelectionAdapter() {

			@Override
			public void widgetSelected(SelectionEvent ex) {

				boolean ret = true;

				Connection con = null;
				Statement stmt = null;
				ResultSet rset = null;

				String DriverName = "sun.jdbc.odbc.JdbcOdbcDriver";
				String connectionString =
						"Provider=MSDASQL" +
						";Driver={MySQL ODBC 5.3 Unicode Driver}" +
						";SERVER=localhost" +
						";DATABASE=lightbox" +
						";UID=root" +
						";PWD=パスワード文字列" +
						";Charset=cp932" +
						";";

				// 日本語設定用プロパティ
				Properties prop = new Properties();
				prop.put("charSet", "MS932");
				System.out.println(connectionString);

				// 接続
				try {
					Class.forName( DriverName );
					con = DriverManager.getConnection(
							"jdbc:odbc:" + connectionString,prop
					);

					stmt = con.createStatement();
				}
				catch( Exception e  ) {
					System.out.println(e.getMessage());
					ret = false;
				}
				// 接続失敗
				if ( !ret ) {
					return;
				}

				System.out.println("接続成功");

				// SQL 作成
				String Query = "select * from 社員マスタ where 社員コード = '0001'";
				try {
					rset = stmt.executeQuery ( Query );
					ret = rset.next();
				}
				catch( SQLException e ) {
					System.out.println(e.getMessage());
					ret = false;
				}

				// データが存在しないので処理終了
				if ( !ret ) {
					return;
				}

				System.out.println("SQL実行成功");

				try {
					System.out.println( rset.getString( "氏名" ) );
				}
				catch( SQLException e ) {
					System.out.println(e.getMessage());
				}

				System.out.println("列データ取得成功");

				try {
					stmt.close();
					con.close();
				}
				catch( SQLException e ) {
					System.out.println(e.getMessage());
				}

			}
		});

		btnNewButton.setBounds(205, 10, 81, 28);
		btnNewButton.setText("New Button");
Windows の日本語の環境の場合、ドライバ側がでいろいろ考慮されているようなので、キャラクタセットの指定が難解です。この環境では、MySQL が UTF-8 で、ソースコードが UTF8N ですが、prop.put("charSet", "MS932"); を指定しないと、日本語のテーブル名を理解してもらえません。まだ、ODBC ドライバ側の Charset=cp932 が無いと、読み込んだデータの日本語部分が使えません。他の組み合わせはうまく行きませんでした。おそらく、JdbcOdbc.dll の都合と、ODBC ドライバの都合だと思われます。

cp932 は、sjis でもかまいませんが、cp932 のほうが多くの文字をカバーするはずです。

関連する記事

Java sun.jdbc.odbc.JdbcOdbcDriver から Microsoft Access
Java sun.jdbc.odbc.JdbcOdbcDriver から Microsoft Excel

日本語 Eclipse 4.4 Pleiades で WindowBuilder


タグ:トラブル java
posted by lightbox at 2015-05-28 02:34 | java : データベース | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり