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 : データベース | このブログの読者になる | 更新情報をチェックする

2014年12月10日


バッチ処理サンプル : Java sun.jdbc.odbc.JdbcOdbcDriver 用 各種 RDBMS 接続文字列

関連する記事

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



このサンプルは、Java をバッチでビルドして実行するサンプルです( SDK さえあれば実行できます )
ソースコードは SHIFT_JIS です。UTF-8 でビルドしたい場合は、UTF-8N で保存しなおして javac のパラメータに -encoding utf-8 を追加して下さい。ソースコード内のJDBC-ODBC ブリッジでの日本語設定用プロパティが必要がどうかは環境によって異なると思いますが、一応設定して動作しています。同様の機能が、RDBMS 側で用意されている場合(MySQL等)もあるので注意して下さい。
import java.util.*;
import java.sql.*;

public class Main {

	// ***************************
	// エントリポイント
	// ***************************
	public static void main(String[] args) {
		Main thisClass = new Main();
	}

	// ***************************
	// コンストラクタ
	// ***************************
	public Main() {
		super();
		my_acton();
	}

	// ***************************
	// 初期処理
	// ***************************
	private void my_acton() {

		// 接続用
		Connection con = null;
		// クエリー(SQL)用
		Statement stmt = null;
		// 結果セット用
		ResultSet rset = null;

		// 表示ツール
		MyTool out = new MyTool(">>>");
		out.println("処理開始");

		// 接続文字列
		String connectionString = "";

		// ***************************
		// ODBC 接続文字列
		// ***************************
		connectionString =
			"Provider=MSDASQL" +
			";Driver={Microsoft Access Driver (*.mdb, *.accdb)}" +
			";Dbq=" + System.getProperty("user.dir") + "\\販売管理B.accdb"+
			";";

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

		try {
			// 接続
			con = DriverManager.getConnection("jdbc:odbc:"+connectionString, prop);
			// ステートメント作成
			stmt = con.createStatement();
			// SQL より レコードセット取得
			rset = stmt.executeQuery ( "select * from 社員マスタ" );

			// 一覧表示
			while( rset.next() ) {
				out.println( rset.getString( "氏名" ) );
			}

			// 後処理
			rset.close();
			stmt.close();
			con.close();

		}
		catch (Exception ex) {
			ex.printStackTrace();
			return;
		}

		out.println("処理終了");

	}

	// ***************************
	// 内部用クラス
	// ***************************
	private class MyTool {

		private String mark = null;

		MyTool(String pm) {
			mark = pm;
		}

		public void println(String str) {
			System.out.println( this.mark + str );
		}

	}

}

以下は接続文字列のサンプルです。Oracle は 純正ドライバを使用したほうが無難です。
// *********************************************
// Java sun.jdbc.odbc.JdbcOdbcDriver 用
// 各種 RDBMS 接続文字列
// *********************************************
String connectionString = "";

// *********************************************
// MDB
// *********************************************
connectionString =
	"Provider=MSDASQL" +
	";Driver={Microsoft Access Driver (*.mdb, *.accdb)}" +
	";Dbq=" + System.getProperty("user.dir") + "\\販売管理B.mdb"+
	";";

// *********************************************
// MySQL
// *********************************************
connectionString =
	"Provider=MSDASQL" +
	";Driver={MySQL ODBC 5.3 Unicode Driver}" +
	";SERVER=localhost" + 
	";DATABASE=lightbox" +
	";UID=root" +
	";PWD=password" +
	";Charset=sjis" +
	";";

// *********************************************
// Oracle( 純正 )
// *********************************************
connectionString =
	"Provider=MSDASQL" +
	";Driver={Oracle in OraClient11g_home1}" +
	";DBQ=vpc-019/ORCL" + 
	";UID=LIGHTBOX" +
	";PWD=LIGHTBOX" +
	";";

// *********************************************
// SQLServer
// SERVER は別名
// *********************************************
connectionString =
	"Provider=MSDASQL" +
	";Driver={SQL Native Client}" +
	";SERVER=lightbox" +
	";DATABASE=lightbox" +
	";UID=sa" +
	";PWD=password" +
	";";

connectionString =
	"Provider=MSDASQL" +
	";Driver={SQL Server}" +
	";SERVER=lightbox" +
	";DATABASE=lightbox" +
	";UID=sa" +
	";PWD=password" +
	";";



関連する記事

ODBC ドライバの列挙

Eclipse + WindowBuilder : JDBC と ODBC を使った、オールマイティなデータベース接続サンプル( MySQL / SQLServer / Oracle / Postgres / MS Access)

javamail でメール送信と、付属のバッチビルド用のスクリプトの解説



posted by lightbox at 2014-12-10 11:00 | java : データベース | このブログの読者になる | 更新情報をチェックする

2009年10月04日


Java : ODBC への動的接続

Microsoft の仕様です。DSN の代わりに接続文字列を渡して、
動的に接続する事ができます
MySQL
String cstr = 
	"Provider=MSDASQL"+
	";Driver={MySQL ODBC 3.51 Driver}"+
	";Server=localhost"+
	";DATABASE=lightbox;";

try {
	Class.forName( DriverName );
	con = DriverManager.getConnection(
		"jdbc:odbc:"+cstr,	// ODBC MySQL
		"root",
		""
	);
	stmt = con.createStatement();
}
catch( Exception e  ) {
	System.out.println(e.getMessage());
}

MDB ( JSP )
String connectionString =
	"Provider=MSDASQL" +
	";Driver={Microsoft Access Driver (*.mdb)}" +
	";Dbq=" + application.getInitParameter("ConnectionUrl")+
	";";

cn = DriverManager.getConnection("jdbc:odbc:"+connectionString);

<?xml version="1.0" encoding="Shift_JIS"?>
<web-app>
	<context-param>
		<param-name>DriverName</param-name>
		<param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-value>
	</context-param>
	<context-param>
		<param-name>ConnectionUrl</param-name>
		<param-value>C:\user\localweb\tomcatpath6\販売管理B.mdb</param-value>
	</context-param>
	<context-param>
		<param-name>ConnectionDbname</param-name>
		<param-value></param-value>
	</context-param>
	<context-param>
		<param-name>ConnectionUser</param-name>
		<param-value></param-value>
	</context-param>
	<context-param>
		<param-name>ConnectionPass</param-name>
		<param-value></param-value>
	</context-param>
</web-app>

関連する記事
Java : ODBC 接続でキャラクタセットを指定する
VBS : XMLファイルのテキストノードの値の更新


posted by lightbox at 2009-10-04 20:20 | java : データベース | このブログの読者になる | 更新情報をチェックする

2009年10月02日


Java : ODBC 接続でキャラクタセットを指定する

これは、sun.jdbc.odbc.JdbcOdbcDriver のお話で、各RDBMS が提供しているドライバの場合は、必ずしもドライバで指定する必要は無いはずです。

JDBC-ODBC ブリッジの拡張
// 接続情報
Properties prop = new java.util.Properties();
prop.put("charSet", "MS932");
prop.put("user", "lightbox");
prop.put("password", "lightbox");

// 接続( Oracle は、DSN )
cn = DriverManager.getConnection("jdbc:odbc:Oracle", prop);

関連する記事

Java : ODBC への動的接続



タグ:java ODBC
posted by lightbox at 2009-10-02 16:35 | java : データベース | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



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

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり