jConnect と iAnywhere (現SQL Anywhere) JDBC ドライバーの違い – パート1 – SQL Anywhere (過去のブログ記事より)
このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。
この記事のオリジナルは、Glenn Paulley が sybase.com に 2009年3月に掲載したものです。この中で、Glenn は jConnect と SQL Anywhere JDBC ドライバーの違いについて述べています。
最近 jConnect、JDBC、SQL Anywhere の過去の特定のバージョンにおけるサポートについてまとめましたが、versions 12 と 16 の SQL Anywhere JDBC ドライバーでは、 JDBC 4.0 をサポートしていることをここでお伝えしたいと思います。
また、最新の jConnect のバージョンは 7.07 で、こちらも JDBC 4.0 をサポートしています。
最近、私は Sybase jConnect と、iAnywhere (現 SQL Anywhere) JDBC ドライバーとの違いについて質問を受けました。そこで、ここでポイントをまとめておこうと思います。
いずれテクニカルドキュメントとしてまとめたいと思います。
概要:
2つのJDBC の実装の違いについて、簡単にまとめると以下にとおりです。
- jConnect は、Type 4 JDBC ドライバです。 一方、iAnywhere (現 SQL Anywhere ) JDBC ドライバは Type 1 で、適切にインストールされた ODBC ドライバーの存在に依存します。
- jConnect は、Sybase Tabular Data Stream (TDS) ワイヤプロトコル を使用しています。一方、iAnywhere (SQL Anywhere) JDBC ドライバは、CMDSEQ と呼ばれるネイティブでプロプライエタリの SQL Anywhere アプリケーションレベルプロトコルを使用しています。
- SQL Anywhere は、TCP/IP ネットワークプロトコルでは、TDS のみをサポートしています。それとは異なり、 SQL Anywhere-specific の CMDSEQ プロトコルは、TCP/IP も、同一コンピューター通信用に設計された効率的なシェアードメモリープロトコルも、どちらもサポートしています。
- アプリケーションが SQL Anywhere に jConnect 経由で接続されると仮定すると、TDSを使うことになり、Sybase ASE の動作を望んでいることになります。そのため、SQL Anywhere のjConnect の実装では、アプリケーションがデータベースに接続するとすぐに ASE 互換の設定セットを設定するようサポートされています(以下参照)。
- jConnect の様々な動作は、Sybase ASE (現SAP ASE)のネイティブサポートに由来します。これは、jConnect がカーソルと特定のデータタイプ(詳細は後で述べます) をサポートしていることに特に明白です。
JDBC ドライバータイプ
jConnect は、Type 4 JDBC ドライバーで、完全に Java ベースです。反対に、iAnywhere (現 SQL Anywhere) JDBC ドライバーは、Type 1 ドライバーで、ベースとなる実際に SQL Anywhere サーバーと通信する (non-Java) のODBC ドライバーに依存します。iAnywhere (現 SQL Anywhere) JDBC ドライバーも、jConnect 6.0.5 も、JDBC 4.0 準拠です。
SQL Anywhere Version 11 では、JDBC 3.0 (JDK 1.4 以降) しかサポートしていません。
SQL Anywhere Version 10 では、JDBC 2.0 と 3.0 の両方をサポートしています。Version 10 で出荷される jodbc.jar は、どちらのサポートも含まれますが、どちらのバージョンが使用されるかは、ドライバーの名前に依存します。
- iAnywhere.ml.jdbcodbc.idriver は JDBC 2.0 をサポートします。
- iAnywhere.ml.jdbcodbc.jdbc3.idriver は、JDBC 3.0 をサポートします。
Windows CE上の Java アプリケーションを活用したい場合には、jConnect 5.5 の方がベストの選択でしょう。
Windows CE では、Java VM としてベストなのは IBM の J9 VM と「Mobile Database Option」で、(JDK Version 1.3 の) JDBC 2.0 をサポートします。
しかしながら、jConnect 5.5 だけが JDBC 2.0-準拠—jConnect 6.05 と SQL Anywhere 11 は JDBC 3.0 が必要 — なので、jConnect 5.5 (jconn2.jar) をデバイスにインストールする必要があります。
どのプラットフォームでも、SQL Anywhere で jConnect を使うには、データベース内に jConnect の JDBC メタデータスキーマのインストールが必要になります。
デフォルトでは、SQL Anywhere データベースは、jConnect メタデータのサポートで生成されますが、dbupgrad -j で明示的に追加することができます。
接続オプション
jConnect 経由で接続する場合には、SQL Anywhere サーバーは、自動的にいくつかのオプションの設定の値をリセットして、サーバーが ASE の動作をエミュレートできるようにします。
これは、sp_tsql_environment システムプロシージャー内で起こりますが、以下の SET OPTION
文を実行して接続します。
- SET TEMPORARY OPTION allow_nulls_by_default=‘Off’;
- SET TEMPORARY OPTION ansi_blanks=‘On’;
- SET TEMPORARY OPTION ansinull=‘Off’;
- SET TEMPORARY OPTION chained=‘Off’;
- SET TEMPORARY OPTION close_on_endtrans=‘Off’;
- SET TEMPORARY OPTION date_format=‘YYYY-MM-DD’;
- SET TEMPORARY OPTION date_order=‘MDY’;
- SET TEMPORARY OPTION escape_character=‘Off’;
- SET TEMPORARY OPTION isolation_level=‘1’;
- SET TEMPORARY OPTION on_tsql_error=‘Continue’;
- SET TEMPORARY OPTION quoted_identifier=‘Off’;
- SET TEMPORARY OPTION time_format=‘HH:NN:SS.SSS’;
- SET TEMPORARY OPTION timestamp_format=‘YYYY-MM-DD HH:NN:SS.SSS’;
- SET TEMPORARY OPTION tsql_variables=‘On’;
接続の初期またはデフォルトの値は、保持されないことに注意してください。
また、TDS 接続のデフォルトの分離レベルは、「1」(READ COMMITED 確定した最新データを常に読み取る ) であることに注意してください。
DBISQL と Sybase Central の古いバージョンでは、SQL Anywhere セマンティクスをできるだけ多く保持するために、データベースサーバーに接続した後にこれらのテンポラリオプション設定を undo にします。
そのため、違いについては気づかないかもしれません。
新しいバージョンの DBISQL と Sybase Central 管理ツール (SQL Anywhere Version 10 以降) では、jConnect 経由での接続はサポートしていません。
次は、: jConnect と iAnywhere (現 SQL Anywhere) JDBC ドライバのセマンティックとパフォーマンスの違いについて述べます。
(SQL Anywhere では、iAnywhere (現 SQL Anywhere) JDBC ドライバを推奨しています。)
過去のブログ記事より