目次
この章では、クライアントプログラムから MySQL サーバへ接続するドライバ、MySQL コネクタについて説明します。現在使用されている MySQL コネクタは5種類あります。
Connector/ODBC は、Open Database Connectivity (ODBC) API を使用して MySQL サーバへ接続する際にドライバをサポートします。サポートは Windows、Unix、および Mac OS X プラットフォームで利用できます。
Connector/NET は、MySQL データベースに保存されたデータを使用する .NET アプリケーションの作成を可能にします。Connector/NET は完全な ADO.NET インターフェース を実装し、ADO.NET Aware ツールとの併用を支援します。開発者はサポートされた .NET 言語で、Connector/NET を使用するアプリケーションを作成することができます。
MySQL Visual Studio プラグインは、 Connector/NET と Visual Studio 2005 にインストールすることができます。このプラグインは MySQL DDEX プロバイダで、Visual Studio 内でスキーマやデータ操作ツールを使用して MySQL データベース内のオブジェクトを作成および編集することができます。
Connector/J は、Java アプリケーション から標準 Java Database Connectivity (JDBC) API を使用して MySQL に接続する際にドライバをサポートします。
Connector/MXJ は、Java アプリケーションを通して MySQL サーバとデータベースの開発と管理を容易にするツールです。
Connector/PHP は、MySQL 5.0.18
以降での使用を目的に、mysql
および mysqli
エクステンションを備えた PHP のための Windows
用コネクタです。
Perl や Python、他のフラットフォームや環境での PHP など、上記にある以外の言語やインターフェースを使用しての MySQL サーバへの接続に関しては、 章?23. APIとライブラリー を参照してください。
MySQL Connector/ODBC は、業界基準の Open Database Connectivity ( ODBC ) API を使用して、MySQL データベースへアクセスする MySQL ODBC ( 前称は MyODBC ドライバ ) の一種です。この資料では、ODBC 3.5x に対応して MySQL データベース へのアクセスを可能にするバージョン、Connector/ODBC 3.51 について説明します。
Connector/ODBC 3.51 以前のバージョンのマニュアルは、該当バイナリもしくはソース配布物に含まれている場合もあります。
ODBC API 標準と使い方についての詳細は、http://www.microsoft.com/data/ を参照してください。
この資料のアプリケーション開発に関する情報は、読み手が C 言語の実務知識、 DBMS に関する一般知識を持ち、なにより MySQL に精通していることを前提に記載されています。MySQL の機能とそのシンタックスの詳しい情報は、http://dev.mysql.com/doc/ をご覧ください。
通常、Connector/ODBC は Windows マシンのみにインストールされます。Unix および OS X では、ネイティブ MySQL ネットワークか、名前付きパイプを使用して、MySQL データベースと通信することができます。Unix か Mac OS X を使用するならば、データベースとの通信に ODBC インターフェイスが必要なアプリケーションには、Connector/ODBC が必要になることもあります。MySQL との通信に ODBC が必要なアプリケーションには、ColdFusion 、Microsoft Office 、Filemaker Pro などがあります。
Unix ホストに Connector/ODBC コネクタをインストールする場合は、ODBC マネージャーも忘れずにインストールしてください。
重要事項 :
Connector/ODBC のインストールのヘルプは 項24.1.2. 「Connector/ODBC のインストール」 を参照。
Windows ホストから、Connector/ODBC を使用して MySQL データベースへ接続する方法の詳細は 項24.1.4.2. 「Connector/ODBC を介する MySQL データベースとの接続のステップガイド」 を参照。
Connector/ODBC を使い、Microsoft Access を MySQL データベースへのインターフェイスとして利用する場合は 項24.1.4.4. 「Microsoft Access で Connector/ODBC を使用する」 を参照。
最後の自動インクリメント ID の取得方法等、Connector/ODBC の使い方の一般的なヒントは 項24.1.6.1. 「Connector/ODBC 一般機能」 を参照。
Connector/ODBC を特定のアプリケーションと使用する際のヒントやよくある質問は、項24.1.6.2. 「Connector/ODBC アプリケーション別情報」 を参照。
よくある質問に対する回答のリストは 項24.1.6.3. 「Connector/ODBC エラーコード と 解決法 :」 。
Connector/ODBC の利用に関して、さらにサポートが必要な場合は、項24.1.7. 「Connector/ODBC サポート」 を参照。
ODBC (Open Database Connectivity) はクライアント プログラムに、多様なデータベースやデータソースへのアクセスを提供します。ODBC は SQL データベースへの接続を可能にする、標準化された API です。SQL Access Group の規格に準じて開発され、関数呼び出しやエラー コード、データベース非依存アプリケーションの開発に使用されるデータタイプのセットを定義します。ODBC は通常、複数のデータソースへのデータベース非依存性、または同時アクセスが必要な場合に使用されます。
ODBC に関しての詳細は、http://www.microsoft.com/data/ を参照してください。
現在利用できる Connector/ODBC には 2 バージョンあります。
現在テスト段階にある Connector/ODBC 5.0 は、Connector/ODBC 3.51 ドライバの機能を拡大し、ストアド プロシージャやビューを含む、MySQL 5.0 server releas の機能の完全サポートを組み込むべくデザインされています。Connector/ODBC 3.51 を使用しているアプリケーションであれば Connector/ODBC 5.0 にも対応し、同時に Connector/ODBC 5.0 の新機能も利用できます。Connector/ODBC 5.0 ドライバの特性や機能は現在のところ、本ガイドには記載されていません。
Connector/ODBC 3.51 は 32-bit ODBC ドライバ の現行リリースで、MySQL ODBC 3.51 ドライバとしても知られています。このバージョンは、旧 Connector/ODBC 2.50 よりも拡大された機能を備えています。ODBC の MySQL へのアクセス機能を全て引き続き提供するため、ODBC 3.5x 規格レベル 1 ( 完全なコア API + レベル 2 機能 ) に対応しています。
MyODBC 2.50 は、ODBC 2.50 規格レベル 0 ( レベル 1 および 2 の機能を装備 ) を基にした MySQl AB の 32-bit ODBC ドライバの前バージョンです。MyODBC 2.50 ドライバの情報は、比較目的のみのために本ガイドに記載されています。
このセクション以降、このガイドの主要焦点は Connector/ODBC 3.51 ドライバについてになります。MyODBC 2.50 ドライバの詳細資料は、該当バージョンのインストール パッケージに含まれています。2.50 バージョンのみに影響する個別問題 ( エラーまたは既知の問題 ) があれば、参考として本資料に記載されている場合もあります。
MySQL 製品のバージョン ナンバーは X.X.X というように構成されています。しかし、Windows ツール ( コントロールパネル、プロパティ表示 ) では、バージョン ナンバーが XX.XX.XX. と表示されることがあります。例えば、MySQL の正式なバージョン ナンバーである 5.0.9 が、Windows ツールでは 5.00.09 と表示される場合があります。これは単にナンバーが異なって表示されるだけであり、バージョンそのものに違いはありません。
Open Database Connectivity (ODBC) は、データベース アクセスのためのアプリケーション プログラム インターフェース (API) として広く受け入れられています。データベース API には、X/Open および ISO/IEC の Call-Level Interface (CLI) 規格が基になっており、データベース アクセス言語には Structured Query Language (SQL) が使われています。
Connector/ODBC にサポートされた ODBC 関数の概括は 項24.1.5.1. 「Connector/ODBC API 参考資料」 に記載されています。ODBC の一般情報は、http://www.microsoft.com/data/ を参照してください。
Connector/ODBC の構造は、次の図のように 5 つのコンポーネントから成っています :
アプリケーション :
アプリケーションは ODBC API を使用して、MySQL サーバのデータにアクセスします。次に、ODBC API が ドライバ マネージャーと接続します。アプリケーションは 標準 ODBC セルを使って、ドライバ マネージャーとコミュニケーションを取ります。データが保存される場所、保存の方法、またはデータにアクセスするためのシステムがどのように構成されているかなども、アプリケーションは一切問いません。アプリケーションに必要な情報は Data Source Name (DSN) のみです。
ODBC をどのように使用している場合でも、アプリケーションは通常的に複数の作業をこなします。作業には以下のようなものがあります:
MySQL サーバを選択して接続する
SQL 文で実行を要求
( もし結果があれば ) 結果を検索
エラーを処理
SQL 文を含んだトランザクションを完遂もしくはロールバック
MySQL サーバの接続解除
ほとんどのデータアクセス作業は SQL で行うため、ODBC を使用するアプリケーションの主な役割は、SQL 文の発行とその結果の検索になります。
ドライバ マネージャー :
ドライバ マネージャーは、アプリケーションとドライバ間のコミュニケーションを管理するライブラリです。その役割には次のようなものがあります :
Data Source Names ( DSN ) の解読DSN は、所定のデータベース ドライバ、データベース、データベース ホスト、またオプションとして、標準化されたリファレンスを使ってデータベースへ接続する ODBC アプリケーションを有効にする承認情報、などを識別する構成ストリングです。
データベース接続情報は DSN で区別されるため、どの ODBC 準拠アプリケーションでも、同じ DSN リファレンスを使ってデータソースに接続することができます。これによって、所定のデータベースにアクセスする各アプリケーションを別々に構成する必要がなくなり、事前に設定された DSN を使用するようアプリケーションに指示するだけで済みます。
ドライバをロードおよびアンロードするには、DSN 内で定められた特定のデータベースにアクセスする必要があります。例えば、MySQL データベースへ接続する DSN を設定した場合、ドライバ マネージャーが Connector/ODBC ドライバをロードして ODBC API を有効にし、MySQL ホストと接続します。
ODBC 関数呼び出しを処理し、または呼び出しをドライバに送って処理させます。
Connector/ODBC ドライバ :
Connector/ODBC ドライバは、ODBC API にサポートされた機能を実現するライブラリです。ODBC 関数呼び出しを処理し、SQL リクエストを MySQL サーバにサブミットし、結果をアプリケーションに戻します。ドライバは必要に応じて、アプリケーションの要求を、MySQL にサポートされたシンタックスに適合するよう改修します。
DSN 設定 :
ODBC 設定ファイルは、サーバへの接続が必須のドライバとデータベースの情報を保管します。そのファイルは、ドライバ マネージャーが、DSN の設定によって、どのドライバをロードするかを決定するのに使われます。ドライバはこれを使用し、DSN の指定に沿って接続パラメータを読み取ります。詳細は 項24.1.3. 「Connector/ODBC の構成」 をご覧ください。
MySQL サーバ :
情報を保管する場所が、MySQL データベースです。データベースは、データの情報源 ( 問い合わせの間 ) 、そしてデータの宛先 ( 挿入または更新の間 ) として利用されます。
ODBC ドライバ マネージャーは、ODBC 認識アプリケーションと各種ドライバ間の通信を管理するライブラリです。以下がその主な機能です :
Data Source Names ( DSN ) の解決
ドライバのロードおよびアンロード
ODBC 関数呼び出しの処理、またはドライバへの呼び出し送信
Windows および Mac OS X のオペレーション システムには、ODBC ドライバ マネージャーが含まれています。また、ほとんどの ODBC ドライバ マネージャーには、DSN とドライバの設定を容易にする運用管理アプリケーションが実装されています。Unix ODBC ドライバ マネージャーを含む、これらのマネージャーの例と詳細については、以下の記述を参考にしてください :
Microsoft Windows ODBC ドライバ マネージャー (
odbc32.dll
)
http://www.microsoft.com/data/
Mac OS X
には、よりシンプルな構成メカニズムを
Unix iODBC ドライバ マネージャーに提供する
GUI アプリケーション、ODBC
Administrator
が組み込まれています。ODBC Administrator
もしくは iODBC 設定ファイルを介して、DSN
とドライバ情報を構成することができます。これはまた、iodbctest
コマンドを使用して、ODBC Administrator
の設定をテストできるということでもあります。
http://www.apple.com.
Unix 用 unixODBC
ドライバ
マネージャー ( libodbc.so
)
。詳細は http://www.unixodbc.org
をご覧ください。unixODBC
2.1.2.
以降のバージョンでは、unixODBC
ドライバ マネージャーのインストール
パッケージに Connector/ODBC ドライバ 3.51
が含まれています。
Unix 用 iODBC
ODBC ドライバ
マネージャー ( libiodbc.so
)
。詳細は http://www.iodbc.org
を参照。
Connector/ODBC ドライバのインストールには、バイナリ インストールとソース インストールという2種類の方法があります。バイナリ インストールは最も容易で簡潔なインストール法です。ソース インストール法は、プラットフォームにバイナリ インストールのパッケージがない場合か、インストールのプロセスや、Connector/ODBC ドライバをインストール前に変更・修正したい場合にのみ使用します。
MySQL AB では、General Public License (GPL) に基づくすべての製品を配布しています。Connector/ODBC バイナリやソースの最新バージョンを、MySQL AB ウェブサイト、http://dev.mysql.com/downloads/ で入手することができます。
Connector/ODBC の詳細は、http://www.mysql.com/products/myodbc/ を参照してください。
ライセンスに関する情報は、http://www.mysql.com/company/legal/licensing/ でご確認ください。
Connector/ODBC は、MySQL にサポートされた、すべての代表的なプラットフォームで使用が可能です。インストールできるプラットフォームは以下 :
Windows 95、98、Me、NT、2000、XP、2003
次を含むすべての Unix 互換のオペレーション システム :AIX、Amiga、BSDI、DEC、FreeBSD、HP-UX 10/11、Linux、NetBSD、OpenBSD、OS/2、SGI Irix、Solaris、SunOS、SCO OpenServer、SCO UnixWare、Tru64 Unix
Mac OS X および Mac OS X サーバ
バイナリ配布物が利用できないプラットフォームの場合は、項24.1.2.4. 「ソース配布物から Connector/ODBC をインストールする」
を参照して、オリジナルのソースコードからドライバを構築してください。独自に作成したバイナリを
MySQL
に提供し、他のユーザにも公開していただける場合は、<myodbc@lists.mysql.com>
までメールをお送りください。
バイナリ配布物を利用すると、簡潔に Connector/ODBC をインストールすることができます。ドライバやインストール ロケーションをもっと細かに調節したい、またもしくは、ドライバの要素をカスタマイズしたいという場合は、ソースから構築してインストールする必要があります。詳細は 項24.1.2.4. 「ソース配布物から Connector/ODBC をインストールする」 をご覧ください。
Windows に Connector/ODBC ドライバをインストールする前に、Microsoft Data Access Components (MDAC) がアップデートされているか確認してください。最新バージョンは Microsoft Data Access and Storage ウェブサイトから入手することができます。
Windows にインストールする場合、3つのタイプの配布物が利用できます。それぞれのコンテンツはまったく同じもので、インストールの方法だけが異なります。
Zip インストーラは、スタンドアロン インストール アプリケーションを含む Zip 形式のパッケージ から成ります。このパッケージからインストールするには、インストーラを解凍してから、インストール アプリケーションを実行してください。インストールの完全な方法については、項24.1.2.3.1.1. 「インストーラを使用して Windows Connector/ODBC ドライバをインストールする」 を参照してください。
MSI インストーラは、Windows 2000、Windows XP、Windows Server 2003 に含まれるインストーラとの併用が可能なインストール ファイルです。インストールの完全詳細は 項24.1.2.3.1.1. 「インストーラを使用して Windows Connector/ODBC ドライバをインストールする」 をご覧ください。
DDL ファイルを含む、Zip形式の DLL パッケージは、手動でインストールを行います。インストールの完全な方法については、項24.1.2.3.1.2. 「Zip 形式 DLL パッケージを使用して Windows Connector/ODBC ドライバをインストールする」 を参照してください。
インストール パッケージを使用すると、非常に簡単に Connector/ODBC ドライバをインストールすることができます。Zip 形式のインストーラをダウンロードした場合は、まずインストール アプリケーションを摘出してください。基本的なインストールの手順は、どちらのインストーラも同じです。
インストールを実行するには、次の手順に従ってください。
摘出したスタンドアロン インストーラか、ダウンロードした MSI ファイルをダブルクリック。
MySQL Connector/ODBC 3.51 - Setup Wizard が起動。
ボタンをクリックして、インストールを開始。インストールのタイプを選択。Typical インストールは標準ファイルを供給し、これを選択すると、ODBC を使用して MySQL データベースに接続することになります。Complete オプションは、デバッグとユーティリティーのコンポーネントを含む、すべての使用可能なファイルをインストールします。インストールを実行するには、このふたつのオプションから選択することをお勧めします。これらの方法を使用する場合は、
をクリックして、ステップ 5 へ進んでください。Custom インストールを選択すると、インストールしたいコンポーネントをそれぞれ自分で選択することができます。この方法を選んだ場合は、
をクリックしてステップ 4 へ進んでください。Custom インストールを選択した場合、ポップアップ画面からインストールしたいコンポーネントを選び、
をクリックして、必要なファイルをインストールします。ファイルがマシンにコピーされたら、インストールは完了です。
をクリックして、インストーラを終了します。以上でインストールは完了です。項24.1.3. 「Connector/ODBC の構成」 を参照して、引き続き ODBC 接続を作成することができます。
Zip 形式の DLL パッケージをダウンロードしたら、Connector/ODBC オペレーションに必要な各種ファイルを手動でインストールします。インストール ファイルを解凍したあと、手動でこの操作を行うか、各ステートメントをひとつずつ実行するか、もしくは組み込まれている Batch ファイルを使用して、デフォルトのロケーションにインストールすることもできます。
Batch ファイルを使用したインストールの手順 :
Connector/ODBC Zipped DLL パッケージを解凍。
Command Prompt を開く。
Connector/ODBC Zipped DLL パッケージを解凍した時に作成されるディレクトリに移動。
Install.bat:
を実行 :
C:\> Install.bat
以上で必要なファイルがデフォルトのロケーションにコピーされ、Windows ODBC マネージャーに Connector/ODBC ドライバが登録されます。
他のロケーションにファイルをコピーしたい場合、例えば同じマシン上でバージョンの異なる Connector/ODBC ドライバを実行、またはテストしたい場合などには、手動でファイルをコピーしなければなりません。しかし、これらのファイルの非標準ロケーションへのインストールはお勧めできません。ファイルを手動でデフォルト ロケーションへコピーするには、以下の手順に従ってください。
Connector/ODBC Zipped DLL パッケージを解凍。
Command Prompt を開く。
Connector/ODBC Zipped DLL パッケージを解凍した時に作成されたディレクトリに移動。
ライブラリ
ファイルを適切なディレクトリへコピー。初期設定では、ファイルのコピー先はデフォルトの
Windows システム
ディレクトリ、\Windows\System32
:
C:\>copy lib\myodbc3S.dll \Windows\System32
C:\>copy lib\myodbc3S.lib \Windows\System32
C:\>copy lib\myodbc3.dll \Windows\System32
C:\>copy lib\myodbc3.lib \Windows\System32
Connector/ODBC ツールをコピー。システム
PATH
のディレクトリにコピーすること。初期設定でのツールのインストール先は、Windows
システム ディレクトリ
\Windows\System32
:
C:\>copy bin\myodbc3i.exe \Windows\System32
C:\>copy bin\myodbc3m.exe \Windows\System32
C:\>copy bin\myodbc3c.exe \Windows\System32
オプションとして、ヘルプ ファイルをコピー。ヘルプ システムからファイルへのアクセスを有効にするには、ファイルを Windows システム ディレクトリにインストールする :
C:\> copy doc\*.hlp \Windows\System32
最後に、ODBC マネージャーに Connector/ODBC ドライバを登録 :
C:\> myodbc3i -a -d -t"MySQL ODBC 3.51 Driver;\
DRIVER=myodbc3.dll;SETUP=myodbc3S.dll"
ファイルをデフォルト ロケーション外にインストールした場合は、必ずリフェレンスを DLL ファイルに変更し、上記のステートメントでロケーションを指定する。
Windows では、旧バージョンの MyODBC 2.50 ドライバをインストールしようとすると、次のエラーが発生することがあります :
An error occurred while copying C:\WINDOWS\SYSTEM\MFC30.DLL. Restart Windows and try installing again (before running any applications which use ODBC)
エラーの原因には、他のアプリケーションが
ODBC
システムを使用中ということが考えられます。その場合、Windows
がインストールを差し止めることがあります。大抵は、Ignore
を押すと Connector/ODBC
ファイルのコピーが続行され、最終的なインストールも実行されます。それでもインストールが行われない時は、「safe
mode.」
でコンピュータを再起動すると問題は解消されます。コンピュータが
Windows を起動する前に F8
を押してセーフモードを選び、Connector/ODBC
ドライバをインストールしてから、もう一度通常モードでコンピューターを再起動してください。
バイナリ配布物から Unix に Connector/ODBC をインストールするには、2種類の方法があります。ほとんどの Unix 環境では、tar アーカイブ配布物を使うことになります。Linux システムでは、RPM 配布物も利用可能です。
tar アーカイブ配布物 ( .tar.gz
ファイル )
からドライバをインストールするには、オペレーション
システムに最新バージョンのドライバをダウンロードし、tar
アーカイブの Linux
バージョンを使用する次の手順に従ってください
:
shell>su root
shell>gunzip mysql-connector-odbc-3.51.11-i686-pc-linux.tar.gz
shell>tar xvf mysql-connector-odbc-3.51.11-i686-pc-linux.tar
shell>cd mysql-connector-odbc-3.51.11-i686-pc-linux
INSTALL-BINARY
ファイルにあるインストール説明を読んで、これらのコマンドを実行してください。
shell>cp libmyodbc* /usr/local/lib
shell>cp odbc.ini /usr/local/etc
shell>export ODBCINI=/usr/local/etc/odbc.ini
次に、項24.1.3.4. 「Unix での Connector/ODBC DSN の構成」
に進み、Connector/ODBC の DSN
を設定します。詳細は
、配布物に含まれている
INSTALL-BINARY
ファイルを参照してください。
Linux で、RPM 配布物から Connector/ODBC
をインストールまたはアップグレードするには、Connector/ODBC
最新バージョンの RPM
配布をダウンロードし、以下の手順に従って下さい。su
root を使って root
に変更してから、RPM
ファイルをインストールします。
初めてインストールする場合 :
shell>su root
shell>rpm -ivh mysql-connector-odbc-3.51.12.i386.rpm
すでにドライバがあり、アップグレードする場合 :
shell>su root
shell>rpm -Uvh mysql-connector-odbc-3.51.12.i386.rpm
MySQL クライアント ライブラリ、
libmysqlclient
に依存エラーが生じる場合は、--nodeps
オプションを与えてエラーを無視し、その後に
MySQL
クライアント共有ライブラリがパスになっているか確認、または
LD_LIBRARY_PATH
を通るよう設定してください。
以上でドライバ
ライブラリと関連ドキュメントが、/usr/local/lib
と /usr/share/doc/MyODBC
にそれぞれインストールされます。項24.1.3.4. 「Unix での Connector/ODBC DSN の構成」
に進んでください。
ドライバを uninstall
するには、root
に変更して
rpm コマンドを実行します :
shell>su root
shell>rpm -e mysql-connector-odbc
Mac OS X は FreeBSD オペレーション システムがベースになっており、通常は MySQL ネットワーク ポートを使って、他のホストの MySQL サーバに接続することができます。Connector/ODBC ドライバをインストールすることで、ODBC インターフェイスを介して、どんなプラットフォームにある MySQL データベースにも接続が可能になります。 ODBC インターフェイスを必須とするアプリケーションでは、Connector/ODBC ドライバのみをインストールすることになります。ODBC ( ひいては Connector/ODBC ドライバ ) を必要とする、または利用できるアプリケーションは、ColdFusion、Filemaker Pro、4th Dimention 他多数あります。
Mac OS X には、iODBC
を基にした独自の ODBC
マネージャーが含まれています。Mac OS X
は、ODBC ドライバの管理を容易にする
管理ツールと、基礎になる iODBC
構成ファイルを更新する設定を所有しています。
バイナリ配布物を利用して、Connector/ODBC を
Mac OS X もしくは Mac OS X サーバ
コンピュータにインストールすることができます。パッケージは圧縮ディスクイメージ
( .dmg
)
として配布されています。この方法でコンピュータに
Connector/ODBC
をインストールするには、次の手順に従ってください
:
ファイルをコンピュータにダウンロードし、そのイメージファイルをダブルクリック。
ディスクイメージの中から、インストール
パッケージ ( 拡張子は .pkg
)
を選択。そのファイルをダブルクリックして、Mac
OS X インストーラを起動。
インストーラの welcome メッセージが表示されます。
ボタンをクリックして、インストールを開始。インストール実行手順のガイドが記載された Important Information を注意して読んでください。告示を読み、必要な情報を得たら、
をクリック。Connector/ODBC ドライバは、GNU General Public License に準じて提供されています。ライセンス情報をご存知でない場合は、インストールを進める前にご一読ください。
をクリックしてライセンス承認に同意 ( 同意の確認がされます ) し、インストールを続けます。Connector/ODBC ドライバと ODBC Administrator アプリケーションのインストール先を選択。ファイルはオペレーション システムと共にドライブにインストールしなければならず、選択の余地が限られる場合があります。使用したいドライブを選び、
をクリック。インストーラが、コンピュータに必要なファイルを自動的に選んでインストールします。
をクリックして、インストールを続けます。インストーラが必要なファイルをマシンにコピーします。インストールの経過を知らせる進行状況バーが表示されます。インストールが完了すると、次のようなウィンドウが表示されます。
をクリックし、インストーラを終了します。ソース配布物から Connector/ODBC をインストールすることで、Connector/ODBC コンポーネントの内容やインストール ロケーションをより自由に設定することができます。また、コンパイル済みバイナリが利用できないプラットフォームでも、Connector/ODBC の構築およびインストールが可能になります。
Connector/ODBC ソースは、パッケージのダウンロード、または Connector/ODBC 開発者が使う修正管理システムからも入手することができます。
Windows では、ソースやインストールを変更したい場合にのみ、ソースから Connector/ODBC をインストールすることになります。ソースからインストールするべきか定かでない場合は、項24.1.2.3.1. 「Connector/ODBC をバイナリ配布物から Windows に インストールする」 で説明されている バイナリ インストールを行ってください。
ソースから Windows に Connector/ODBC をインストールするには、様々なツールやパッケージが必要です :
MDAC ( Microsoft Data Acces SDK http://www.microsoft.com/data/ )
Microsoft Visual C++ または、Microsoft Visual Studio に組み込まれた C コンパイラ といった、適切な C コンパイラ。
互換性のある make
ツール。Microsoft の nmake
は、このセクションで例として取り上げられています。
MySQL クライアント ライブラリと、MySQL 4.0.0 以降の取り込みファイル ( MySQL 4.0.16 以降を推奨 ) 。ここれは Connector/ODBC が、このバージョンのライブラリから適用された新しい呼び出しと構成を使用するため、必要になります。指定のクライアント ライブラリと取り込みファイルは、http://dev.mysql.com/downloads/ から入手できます。
Connector/ODBC
ソース配布物には、nmake
または他の make
ユーティリティを必要とする
Makefiles
が含まれています。配布物のうち、Makefile
はリリース
バージョンの構築、Makefile_debug
はドライバ ライブラリと DLL のデバッグ
バージョンの構築に使われます。
ドライバを構築は、次の手順で行って下さい :
ソースをダウンロードし、フォルダへ摘出してから、ディレクトリをそのフォルダに変更。次のコマンドでは、フォルダ名を
myodbc3-src
としています :
C:\> cd myodbc3-src
Makefile
を変更して、MySQL
クライアント ライブラリとヘッダ
ファイルの正確なパスを指定。その後、次のコマンドを使用して、リリース
バージョンを構築・インストールします :
C:\>nmake -f Makefile
C:\>nmake -f Makefile install
nmake -f Makefile
が、ドライバのリリース
バージョンを構築し、
Release
と呼ばれるサブディレクトリにバイナリを配置します。
nmake -f Makefile install
が、ドライバ DLL とライブラリ (
myodbc3.dll
、
myodbc3.lib
) をシステム
ディレクトリにインストール ( コピー )
します。
デバッグ
バージョンを構築するには、Makefile
よりも、次の Makefile_Debug
を使用してください :
C:\>nmake -f Makefile_debug
C:\>nmake -f Makefile_debug install
次を使用して、ドライバの削除およびインストールを行うことができます :
C:\>nmake -f Makefile clean
C:\>nmake -f Makefile install
注意 :
Makefiles では正しい MySQL クライアント
ライブラリとヘッダ
ファイルのパスを指定してください (
MYSQL_LIB_PATH
と
MYSQL_INCLUDE_PATH
変数を設定 )
。デフォルトのヘッダ ファイル
パスは、仮に C:\mysql\include
とします。デフォルトのライブラリ
パスは、リリース バージョンの DLLには
C:\mysql\lib\opt
、デバッグ
バージョンのものは
C:\mysql\lib\debug
と仮定します。
nmake の完全な使用方法については、http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vcce4/html/evgrfRunningNMAKE.asp を参照してください。
コンパイルにサブバージョン
ツリーを使用している場合、Windows
におけるすべての Makefiles
は、Win_Makefile*
と名づけられています。
ドライバ ライブラリがシステム
ディレクトリにコピー、もしくはインストールされたら、samples
サブディレクトリにあるサンプルを使用して、ライブラリが適切に構築されているかテストすることができます
:
C:\>cd samples
C:\>nmake -f Makefile all
Unix でソースから MySQL を構築する場合、次のツールが必要になります :
ANSI C++ 実用コンパイラ。gcc 2.95.2 以降、egcs 1.0.2 以降、もしくは egcs 2.91.66 、SGI C++ 、および SunPro C++ などが、使用できるコンパイラの例です。
優良な make プログラム。GNU make はいかなる場合にも推奨され、必須になっていることもあります。
MySQL クライアント ライブラリと、MySQL 4.0.0 以降の取り込みファイル。( MySQL 4.0.16 以降を推奨 ) 。これは Connector/ODBC が、このバージョンのライブラリから適用された新しい呼び出しと構成を使用するため、必要になります。指定のクライアント ライブラリと取り込みファイルは、http://dev.mysql.com/downloads/ から入手できます。
ソースから独自に MySQL サーバ、および /
またはクライアント
ライブラリを構築した場合、ライブラリの構築時に、configure
の実行で --enable-thread-safe-client
が使われていなければなりません。
また、libmysqlclient
ライブラリが、共用ライブラリとして構築され、インストールされているか確認してください。
互換性のある ODBC
マネージャーのインストールは必須です。Connector/ODBC
は、iODBC
および
unixODBC
マネージャとの適応が知られています。詳細は
項24.1.1.2.2. 「ODBC ドライバ マネージャー」
をご覧ください。
MySQL クライアント
ライブラリにコンパイルされていないキャラクタ
セットを使用している場合は、 MySQL
キャラクタ定義を charsets
ディレクトリから
SHAREDIR
(
デフォルトでは
/usr/local/mysql/share/mysql/charsets
) にインストールしてください。MySQL
サーバを同じコンピュータにインストールしていれば、これらは所定の位置にあるはずです。キャラクタ
セット
サポートの詳細は、章?9. キャラクタセットサポート
を参照してください。
必要なファイルが揃ったら、ソース ファイルを別々のディレクトリに解凍し、configure を実行、そして make を使ってライブラリを構築します。
configure スクリプトは、Connector/ODBC 構成をどのようにコンフィグするかにおいて、多大な制御力を提供します。通常は、configure コマンド ラインのオプションを使用してこれを行います。また、特定の環境変数を使って、configure に影響を与えることもできます。configure がサポートするオプションと環境変数のリストを見るには、次のコマンドを実行してください :
shell> ./configure --help
よく使われる configure オプションのいくつかを以下で説明します :
Connector/ODBC
をコンパイルするには、--with-mysql-path=
を使用して、ライブラリ ファイルを含む
MySQL
クライアントを供給する必要があります。DIR
DIR
は、MySQL
がインストールされるディレクトリです。
MySQL コンパイル
オプションは、
を実行することで判別が可能です。
DIR
/bin/mysql_config
標準ヘッダとライブラリ ファイル
パスを、ODBC ドライバ マネージャー (
iODBC
または
unixODBC
) に供給します。
iODBC
を使用しており、同時に
iODBC
がデフォルト
ロケーション ( /usr/local
)
にインストールされていない場合は、--with-iodbc=
オプションを使用しなければならないことがあります。DIR
DIR
は iODBC
がインストールされるディレクトリです。
もし iODBC
ヘッダが
に入っていない場合、DIR
/include--with-iodbc-includes=
オプションで、その所在を特定することができます。
INCDIR
ライブラリへのアプライ。
に入っていなければ、DIR
/lib--with-iodbc-libs=
オプションを使うことができます。
LIBDIR
unixODBC
を使用している場合、--with-unixODBC=
オプション ( 大文字と小文字を区別 )
を使ってconfigure
を作成します。DIR
iODBC
ではなく、unixODBC
を探してください。デフォルトでは、DIR
が unixODBC
のインストールされるディレクトリです。
unixODBC
ヘッダとライブラリが
と
DIR
/include
にない場合は、DIR
/lib-with-unixODBC-includes=
と
INCDIR
--with-unixODBC-libs=
オプションを使用してください。
LIBDIR
インストールの接頭子に、/usr/local
以外を指定したほうがよい場合もあります。例えば、/usr/local/odbc/lib
に Connector/ODBC
をインストールする場合、--prefix=/usr/local/odbc
オプションを使用します。
最終構成コマンドは次のようのものです :
shell>./configure --prefix=/usr/local \
--with-iodbc=/usr/local \
--with-mysql-path=/usr/local/mysql
Connector/ODBC を作成する前の構成での設定に、必要または望ましいオプションは他にも多数あります。
ドライバを、libmysqlclient_r.so
または libmysqlclient_r.a
等の
スレッドセーフ MySQL クライアント
ライブラリにリンクするには、次の
configure
オプションを指定してください :
--enable-thread-safe
また、次を使って無効 ( デフォルト ) にすることもできます。
--disable-thread-safe
このオプションを使用すると、スレッドセーフ
MySQL クライアント ライブラリ
libmysqlclient_r.so
( 拡張子は
OS 依存性 )
にリンクすることで、ドライバ
スレッドセーフ ライブラリ
libmyodbc3_r.so
を構築することができます。
スレッドセーフ
オプションとのコンパイルが失敗した場合、その原因として、システム上にある正しいスレッド
ライブラリが特定できないことが挙げられます。正しいスレッド
ライブラリが特定できるよう、LIBS
の値をセットしてください。
LIBS="-lpthread" ./configure ..
以下のオプションを使用して、Connector/ODBC の共用およびスタティック バージョンを、有効または無効にすることができます :
--enable-shared[=yes/no] --disable-shared --enable-static[=yes/no] --disable-static
デフォルトでは、すべてのバイナリ配布物は非デバッグ
バージョンとして構築されています (
--without-debug
で構成 ) 。
デバッグ情報を有効にするには、ソース配布物からドライバを構築し、configure
を実行する際に -with-debug
オプションを使用します。
このオプションは、Subversion レポジトリから得たソース ツリーにのみ利用が可能です。パッケージ済みのソース配布物には適用できません。
デフォルトでは、ドライバは
--without-docs
オプションで構築されます。ドキュメンテーションを作成したい場合は、次で
configure を実行してください
:
--with-docs
ドライバ ライブラリを構築するには、make を実行してください。
shell> make
なんらかのエラーが発生すれば、修正して構築を続けてください。構築が行えない場合は、詳細を明記のうえ、<myodbc@lists.mysql.com>
までメールでお問い合わせ下さい。
ほとんどのプラットフォームでは、MySQL が
.so
( 共有 )
を建築、またはサポートするデフォルト設定にはなっていません。これは共用ライブラリ構築の経験に基づいた情報です。
そのような場合は、MySQL 配布物をダウンロードし、次のオプションで構成してください :
--without-server --enable-shared
共用ドライバ
ライブラリを構築するには、--enable-shared
オプションを configure
で指定する必要があります。configure
が、デフォルト設定でこのオプションを有効にすることはありません。
--disable-shared
オプションを使用して構成した場合、次のコマンドで、スタティック
ライブラリから .so
ファイルを作成することができます :
shell>cd mysql-connector-odbc-3.51.01
shell>make
shell>cd driver
shell>CC=/usr/bin/gcc \
$CC -bundle -flat_namespace -undefined error \
-o .libs/libmyodbc3-3.51.01.so \
catalog.o connect.o cursor.o dll.o error.o execute.o \
handle.o info.o misc.o myodbc3.o options.o prepare.o \
results.o transact.o utility.o \
-L/usr/local/mysql/lib/mysql/ \
-L/usr/local/iodbc/lib/ \
-lz -lc -lmysqlclient -liodbcinst
iODBC
でなく、unixODBC
を使用している場合は、-liodbcinst
を必ず -lodbcinst
に変更し、ライブラリ
パスを適切に構成してください。
これで libmyodbc3-3.51.01.so
ファイルが構築され、.libs
ディレクトリに収容されます。このファイルを
Connector/ODBC ライブラリ インストール
ディレクトリ ( /usr/local/lib
、もしくは --prefix
と共に供給したインストレーション
ディレクトリ下の lib
ディレクトリ ) にコピーしてください。
shell>cd .libs
shell>cp libmyodbc3-3.51.01.so /usr/local/lib
shell>cd /usr/local/lib
shell>ln -s libmyodbc3-3.51.01.so libmyodbc3.so
スレッドセーフ ドライバ ライブラリを構築するには :
shell>CC=/usr/bin/gcc \
$CC -bundle -flat_namespace -undefined error
-o .libs/libmyodbc3_r-3.51.01.so
catalog.o connect.o cursor.o dll.o error.o execute.o
handle.o info.o misc.o myodbc3.o options.o prepare.o
results.o transact.o utility.o
-L/usr/local/mysql/lib/mysql/
-L/usr/local/iodbc/lib/
-lz -lc -lmysqlclient_r -liodbcinst
ドライバ ライブラリをインストールするには、次のコマンドを実行してください :
shell> make install
このコマンドは、次のライブラリ セットのうちのどれかをインストールします :
Connector/ODBC 3.51 の場合 :
libmyodbc3.so
libmyodbc3-3.51.01.so
ドライバのバージョンは
3.51.01
libmyodbc3.a
スレッドセーフ Connector/ODBC 3.51 の場合 :
libmyodbc3_r.so
libmyodbc3-3_r.51.01.so
libmyodbc3_r.a
MyODBC 2.5.0 の場合 :
libmyodbc.so
libmyodbc-2.50.39.so
ドライバのバージョンは
2.50.39
libmyodbc.a
構築手順の詳しい情報は、ソース配布物に添付されている
INSTALL
ファイルを参照してください。Sun から
make
を使用すると、エラーが発生する恐れがありますので注意してください。一方、GNU
gmake
は、すべてのプラットフォームで問題なく使用できるでしょう。
配布物に含まれている簡単なサンプルを、自作のライブラリで実行するには、次のコマンドを使用してください :
shell> make test
テストを実行する前に、odbc.ini
内に DSN 'myodbc3' を作成し、環境変数
ODBCINI
を、適切な
odbc.ini
ファイルに設定してください。また、MySQL
サーバは作動しています。サンプル
odbc.ini
は、ドライバ配布物に添付されています。
samples/run-samples
スクリプトを改変し、各サンプルへのコマンドライン引数として、所望の
DSN、UID、PASSWORD
値に受け渡すことも可能です。
Mac OS X (Darwin) でドライバを構築するには、次の configure 例を利用してください :
shell>./configure --prefix=/usr/local
--with-unixODBC=/usr/local
--with-mysql-path=/usr/local/mysql
--disable-shared
--enable-gui=no
--host=powerpc-apple
このコマンドでは、unixODBC
と
MySQL がデフォルト
ロケーションにインストールされたものと仮定します。そうでない場合は、適切に構成してください。
Mac OS X では、デフォルト設定により
--enable-shared
が
.dylib
ファイルを構築するようになっています。.so
を以下のように構築することができます :
shell>make
shell>cd driver
shell>CC=/usr/bin/gcc \
$CC -bundle -flat_namespace -undefined error
-o .libs/libmyodbc3-3.51.01.so *.o
-L/usr/local/mysql/lib/
-L/usr/local/iodbc/lib
-liodbcinst -lmysqlclient -lz -lc
スレッドセーフ ドライバ ライブラリを構築するには :
shell>CC=/usr/bin/gcc \
$CC -bundle -flat_namespace -undefined error
-o .libs/libmyodbc3-3.51.01.so *.o
-L/usr/local/mysql/lib/
-L/usr/local/iodbc/lib
-liodbcinst -lmysqlclienti_r -lz -lc -lpthread
iODBC
でなく、unixODBC
を使用する場合は、-liodbcinst
を必ず -lodbcinst
に変更し、ライブラリ
パスを適切に構成してください。
Apple 版の GCC では、cc と gcc の双方が gcc3 へのシンボリック リンクになっています。
このライブラリを $prefix/lib
ディレクトリにコピーし、libmyodbc3.so
へ symlink してください。
このコマンドを使用して、アウトプット共用ライブラリのプロパティをクロスチェックすることができます :
shell> otool -LD .libs/libmyodbc3-3.51.01.so
HP-UX 10.x もしくは 11.x でドライバを構築するには、次の configure 例を利用してください :
cc を使用する場合 :
shell>CC="cc" \
CFLAGS="+z" \
LDFLAGS="-Wl,+b:-Wl,+s" \
./configure --prefix=/usr/local
--with-unixodbc=/usr/local
--with-mysql-path=/usr/local/mysql/lib/mysql
--enable-shared
--enable-thread-safe
gcc を使用する場合 :
shell>CC="gcc" \
LDFLAGS="-Wl,+b:-Wl,+s" \
./configure --prefix=/usr/local
--with-unixodbc=/usr/local
--with-mysql-path=/usr/local/mysql
--enable-shared
--enable-thread-safe
ドライバが構築されたら、chatr
.libs/libmyodbc3.sl
を使ってその属性をクロスチェックし、SHLIB_PATH
環境変数を使用して MySQL クライアント
ライブラリ
パスを設定する必要があるか確認してください。スタティック
バージョンでは、すべての共用ライブラリ
オプションを無視し、--disable-shared
オプションで configure
を実行してください。
AIX でドライバを構築するには、次の configure 例を利用してください :
shell>./configure --prefix=/usr/local
--with-unixodbc=/usr/local
--with-mysql-path=/usr/local/mysql
--disable-shared
--enable-thread-safe
注意 :異なるプラットフォームに跨るスタティックおよび共用ライブラリの構築と設定に関しては、「Using static and shared libraries across platforms」で詳細をご覧ください。
注意 :このセクションは、当社の新しいコードのテストに協力していただける場合にのみお読みください。単に MySQL Connector/ODBC をシステム上で稼動させるだけであれば、標準のリリース配布物を使用してください。
Connector/ODBC ソースツリーにアクセスするには、Subversion をインストールする必要があります。Subversion は http://subversion.tigris.org/ から無料で入手することができます。
ソースツリーから構築するには、次のツールが必要です :
autoconf 2.52 ( またはそれ以降 )
automake 1.4 ( またはそれ以降 )
libtool 1.4 ( またはそれ以降 )
m4
最新の開発ソースツリーは、http://dev.mysql.com/tech-resources/sources.html の公開 Subversion ツリーから得られます。
Connector/ODBC ソースを点検するには、Connector/ODBC ツリーのコピーを保存したいディレクトリに移動し、次のコマンドを使用します :
shell> svn co http://svn.mysql.com/svnpublic/connector-odbc3
これで、全 Connector/ODBC
ソースツリーが、ディレクトリ
connector-odbc3
にコピーされました。Unix または Linux
で、このソースツリーから構築する場合は、次の手順に従ってください
:
shell>cd connector-odbc3
shell>aclocal
shell>autoheader
shell>autoconf
shell>automake;
shell>./configure # Add your favorite options here
shell>make
構築に関する詳細は、同じディレクトリにある
INSTALL
ファイルを参照してください。configure
の他のオプションについては、項24.1.2.4.2.1. 「典型的な configure オプション」
をご覧ください。
構築が完了したら、make install を実行して、システムに Connector/ODBC 3.51 ドライバをインストールしてください。
make
ステージで配布物がコンパイルしない場合は、<myodbc@lists.mysql.com>
までお知らせください。
Windows でのドライバの構築に、Windows Makefiles
WIN-Makefile
および
WIN-Makefile_debug
をご利用ください。詳細は
項24.1.2.4.1. 「Connector/ODBC をソース配布物から Windows
にインストールする」
をご覧ください。
ソースツリーを得るための初回のチェックアウト操作のあと、ソースを定期的に最新バージョンにアップデートする svn update を実行してください。
Connector/ODBC ドライバを使用して MySQL データベースに接続する前に、ODBC Data Source Name を構成する必要があります。DSN は、データベースとの接続に必要な種々の構成パラメータを、特定の名称に関連づけます。アプリケーション自体の中で各パラメータを指定するより、アプリケーション内で DSN を使用し、データベースとの接続を行うことになります。DSN 情報は、ユーザー固有、システム特定、または特殊ファイルで提供されることもあります。ODBC データソース名は、プラットフォームと ODBC ドライバによって、異なる方法で構成されます。
Data Source Name は、特定のデータベースとの接続のための構成パラメータと関連しています。通常、DSN は次のパラメータで構成されています :
In addition, different ODBC drivers, including Connector/ODBC, may accept additional driver-specific options and parameters.
DSN には3種類あります :
System DSN は、全ユーザと特定のシステムのアプリケーションが利用できる DSN のグローバル定義です。通常 System DSN は、システム アドミニストレータ、または System DSN を作成する特定の許可を得たユーザのみが構成することができます。
User DSN はそれぞれのユーザ特有のもので、各ユーザが常用するデータベース接続情報の保管にも使用できます。
File DSN は、シンプルなファイルを用いて DSN 設定を定義しますファイル DSN はユーザとマシン間で共用することができ、そのため、DSN 情報をアプリケーションの一部として複数のマシンにインストール、もしくはデプロイする際、より実用的です。
DSN 情報は、プラットフォームや環境によって、別のロケーションに保管されます。
Windows 内の ODBC Data Source Administrator
は、DSN
の作成、ドライバのインストールのチェック、そしてトレース
( デバッグに使用 ) や接続のプールなどのODBC
システムの構成を可能にします。
使用している Windows
のエディションやバージョンによって、ODBC
Data Source Administrator
が保存されているロケーションは異なります。
Windows Server 2003 で ODBC Data Source
Administrator
を開くには :
Start
メニューで
Administrative Tools
を選択、そして Data Sources (ODBC)
をクリックする。
Windows 2000 Server または Windows 2000 Professional で
ODBC Data Source Administrator
を開くには :
Start
メニューで
Settings
を選択、そして
Control Panel
をクリックする。
Control Panel
で Administrative
Tools
をクリック。
Administrative Tools
で、Data
Sources (ODBC)
をクリック。
Windows XP で ODBC Data Source Administrator
を開くには :
Start
メニューで Control
Panel
をクリック。
Control Panel
の Category
View
で Performance and
Maintenance
をクリックし、そして
Administrative Tools
を押す。Classic View
で
Control Panel
を見ている場合は、Administrative
Tools
をクリックする。
Administrative Tools
で、Data
Sources (ODBC)
をクリック。
Windows のバージョンに関係なく、ODBC Data
Source Administrator
画面が開きます :
Windows XP 内において、Administrative Tools
フォルダを加え、ODBC Data Source Administrator
の所在の特定をより容易にすることができます。実行の手順は次になります
:
メニューを右クリックする。
Properties
を選択。
をクリック。
タブを選択。
System Administrative Tools
セクション内の Start menu items
で、Display on the All Programs menu
を選択。
Windows Server 2003 と Windows XP
、両方において、ODBC Data Source
Administrator
を加えることをお勧めします。それには、示された方法を使って
Data Sources (ODBC)
アイコンの所在を特定し、そのアイコンを右クリック、そして
を選択します。
新たな Connector/ODBC データソースを Windows
に追加および構成するには、ODBC Data
Source Administrator
を使用します :
ODBC Data Source Administrator
を開く。
TSystem DSN ( すべてのユーザが使用可能 )
を作成するため、System DSN
タブを選択。使用中のユーザ特定の User DSN
を作成するため、
ボタンを押す。
その DSN のために、ODBC ドライバを選択。
MySQL ODBC 3.51 Driver
を選択し、Finish
を押す。
ここで、作成している DSN
の特定のフィールドを、Add Data Source
Name
ダイアログを介して構成する。
Data Source Name
ボックスに、アクセスしたいデータソースの名称を入力。有効な名前であれば、どんなものでもよい。
Description
ボックスに何らかのテキストを入力し、コネクションを特定できるようにする。
Server
フィールドに、アクセスしたい MySQL サーバ
ホストの名称を入力。デフォルト設定では、localhost
。
User
フィールドに、この接続に使用するユーザー名を入力。
Password
フィールドに、この接続へのパスワードを入力。
Database
ポップアップが自動的に、アクセスが許可されたデータベースのリストを移植。
をクリックして、DSN を保存。
DSN 構成が完了すると、このような状態になります :
Success;
connection was made!
ダイアログが表示されます。
接続に失敗した場合は、
ボタンをクリックすると、テスト結果と失敗の原因が追加エラーメッセージで提示されます。DSN 構成ダイアログの
もしくは タブで、特定の DSN に様々なオプションを構成することができます。ダイアログは次のようなものです。
構成が可能な3種類のオプション :
Port
は、MySQL
との接続に使用する TCP/IP
ポートナンバーを設定します。デフォルト設定では、MySQL
との接続にはポート 3306
が使用されます。使用するサーバが、別の
TCP/IP
ポートを使うように構成されている場合は、ここでポートナンバーを特定する必要があります。
Socket
は、MySQL
との接続に使用する特定のソケットか
Windows
パイプの名称、またはそのロケーションを設定します。
Initial Statement
は、MySQL
への接続が開通した時に実行される SQL
文を定義します。これによって、デフォルトのキャラクタ
セットや、接続中に使用するデータベースの設定など、接続の
MySQL
オプションをセットすることができます。
項24.1.3.5. 「Connector/ODBC Connection Parameters」 を参照してください。
タブでは、Connector/ODBC 接続パラメータの構成をすることができます。これらのオプションの効果については、このセクションでは、Connector/ODBC の接続に関する質問に答えます。
Connector/ODBC DSN
の構成中、Could Not Load Translator or Setup
Library
エラーが発生します。
詳細は、MS
KnowledgeBase Article(Q260558)
をご覧ください。また、最新の有効な
ctl3d32.dll
を、システム
ディレクトリに忘れずに設置してください。
Windows
では、デフォルトのmyodbc3.dll
は最適な性能を得られるようコンパイルされています。Connector/ODBC
3.51 をデバッグしたい場合 (
例えば、トレースを有効にしたいなど )
には、myodbc3d.dll
の使用をお勧めします。このファイルをインストールするには、myodbc3d.dll
を、インストールされた
myodbc3.dll
の上にコピーします。デバッグ
バージョンは機能に支障をきたす原因になる場合がありますので、デバッグが終了した時点で、ドライバ
DLL のリリース
バージョンに戻すようにしてください。myodbc3d.dll
は、Connector/ODBC 3.51.07 から 3.51.11.
には含まれておりませんので注意してください。それらのバージョンを使用している場合は、それ以前のバージョン
( 例 : 3.51.06 ) からその DLL
をコピーしてください。
MyODBC 2.50 では、myodbc.dll
および myodbcd.dll
がかわりに使用されています。
Mac OS X で DSN を構成するには、ODBC Administrator の使用をお勧めします。Mac OS X 10.2 以前を使用している場合は、項24.1.3.4. 「Unix での Connector/ODBC DSN の構成」 をご覧ください。User DSN か System DSN で、作成したい方を選びます。System DSN を加える場合は、システムの認証が必要になる場合があります。鍵アイコンをクリックし、管理者権限でユーザー名とパスワードを入力してください。
Applications
フォルダ内の
Utilities
フォルダから、ODBC
Administrator を開く。
User DSN もしくは System DSN パネルで、
をクリック。Connector/ODBC ドライバを選択し、
をクリック。
Data Source Name
ダイアログが表示される。DSN に Data
Source Name
と、オプショナルの
Description
を入力。
server
、username
、password
、そして
database
の接続パラメータを指定する4つのペアを構成する。詳細は
項24.1.3.5. 「Connector/ODBC Connection Parameters」
を参照。
をクリックして、DSN に構成されたデータのソースネームを加える。
DSN 構成が完了すると、このような状態になります :
さらにキーワードと値のペアを加え、適切な値を設定することで、DSN に追加の ODBC オプションを構成することができます。詳細は 項24.1.3.5. 「Connector/ODBC Connection Parameters」 を参照。
Unix
では、DSN
の入力を、odbc.ini
ファイル内で直接構成します。下記は、MyODBC
2.50 と Connector/ODBC 3.51 に、DSN 名として
myodbc
および myodbc3
をそれぞれ構成する典型的な
odbc.ini
です :
; ; odbc.ini configuration for Connector/ODBC and Connector/ODBC 3.51 drivers ; [ODBC Data Sources] myodbc = MyODBC 2.50 Driver DSN myodbc3 = MyODBC 3.51 Driver DSN [myodbc] Driver = /usr/local/lib/libmyodbc.so Description = MyODBC 2.50 Driver DSN SERVER = localhost PORT = USER = root Password = Database = test OPTION = 3 SOCKET = [myodbc3] Driver = /usr/local/lib/libmyodbc3.so Description = Connector/ODBC 3.51 Driver DSN SERVER = localhost PORT = USER = root Password = Database = test OPTION = 3 SOCKET = [Default] Driver = /usr/local/lib/libmyodbc3.so Description = Connector/ODBC 3.51 Driver DSN SERVER = localhost PORT = USER = root Password = Database = test OPTION = 3 SOCKET =
提供されている接続パラメータのリストは、項24.1.3.5. 「Connector/ODBC Connection Parameters」 を参照してください。
注記
:unixODBC
を使用している場合は、次のツールを使って DSN
を設定することができます :
ODBCConfig GUI ツール ( HOWTO:ODBCConfig )
odbcinst
unixODBC
を使用していると、次のエラーが発生する場合があります
:
Data source name not found and no default driver specified
このエラーが発生した時は、ODBCINI
および ODBCSYSINI
環境変数が、正しい odbc.ini
ファイルを示しているか確認してください。例えば、odbc.ini
ファイルが /usr/local/etc
にある場合、環境変数はこのように設定します
:
export ODBCINI=/usr/local/etc/odbc.ini export ODBCSYSINI=/usr/local/etc
You can specify the parameters in the following tables for
Connector/ODBC when configuring a DSN. Users on Windows can use
the Options and Advanced panels when configuring a DSN to set
these parameters; see the table for information on which options
relate to which fields and checkboxes.Unix と Mac OS X
ではパラメータ名と値を、DSN
構成のキーワードおよび値のペアとして使用してください。あるいは、SQLDriverConnect()
呼び出しにある InConnectionString
引数内で、これらのパラメータを設定することもできます。
パラメータ | デフォルト値 | コメント |
user | ODBC (Windows) | MySQL の接続に使用されるユーザ名 |
server | localhost | MySQL サーバのホスト名 |
database | ? | デフォルトのデータベース |
option | 0 | Connector/ODBC の動作を指定するオプション。下記参照。 |
port | 3306 | server が localhost
出ない場合に、TCP/IP ポートが使用 |
stmt | ? | MySQL への接続時に実行されるステートメント |
password | ? | server 上の user
アカウントのパスワード |
socket | ? | server が localhost
の場合に接続される Unix ソケット
ファイルもしくは Windows
の名前付きパイプ |
option
引数は、クライアントの ODBC
への適合が 100% でない場合に、Connector/ODBC
にその旨を告知します。Windows
では通常、接続スクリーンのチェックボックスをトグルしてオプションを選択しますが、option
引数でオプションを選択することもできます。次のオプションは、Connector/ODBC
接続スクリーンに表示される順序でリストされています
:
値 | Windows チェックボックス | 概要 |
1 | Don't Optimized Column Width | Connector/ODBC が実際のカラムの幅をリターンするのを、クライアントは許容できない。 |
2 | Return Matching Rows | MySQL が、影響下にある行の真の値をリターンするのを、クライアントは許容できない。このフラッグがセットされる場合、MySQL は代わりに 「found rows」 をリターンする。これには MySQL 3.21.14 以降が必要になる。 |
4 | Trace Driver Calls To myodbc.log | デバッグ ログを、Windows では
C:\myodbc.log 、Unix 形式では
/tmp/myodbc.log に作成する。 |
8 | Allow Big Results | 結果とパラメータにパケット制限を設定しない。 |
16 | Don't Prompt Upon Connect | ドライバが希望しても、質問をプロンプトしない。 |
32 | Enable Dynamic Cursor | 動的カーソルのサポートを有効または無効にする( Connector/ODBC 2.50. では利用不可 ) 。 |
64 | Ignore # in Table Name | db_name.tbl_name.col_name
でのデータベース名の使用を無視。 |
128 | User Manager Cursors | ODBC マネージャー カーソルの使用を強制実行する ( 実験用 ) 。 |
256 | Don't Use Set Locale | 拡張されたフェッチの使用を無効にする ( 実験用 ) 。 |
512 | Pad Char To Full Length | CHAR
カラムを最長のカラム幅にパッドする。 |
1024 | Return Table Names for SQLDescribeCol | SQLDescribeCol()
が完全に修飾されたカラム名をリターンする。 |
2048 | Use Compressed Protocol | 圧縮されたクライアント / サーバ プロトコルを使用。 |
4096 | Ignore Space After Function Names | ファンクション名の後と、‘( ’
の前にあるスペースを無視するようサーバに通達
( PowerBuilder に必要 )
。これですべてのファンクション名がキーワードになる。 |
8192 | Force Use of Named Pipes | 名前つきパイプで、NT で起動している mysqld に接続する。 |
16384 | Change BIGINT Columns to Int | BIGINT カラムを INT
カラムに変更 (
ある種のアプリケーションは
BIGINT を処理できない ) 。 |
32768 | No Catalog (exp) | SQLTables から、'user' を
Table_qualifier および
Table_owner
とてしてリターンする ( 実験用 )。 |
65536 | Read Options From my.cnf | my.cnf の [client] および
[odbc]
グループからパラメータを読み取る。 |
131072 | Safe | 追加のセイフティー チェックを加える ( 本来なら必要ない ) 。 |
262144 | Disable transaction | トランザクションを無効にする。 |
524288 | Save queries to myodbc.sql | c:\myodbc.sql (/tmp/myodbc.sql )
ファイルへのクエリのロギングを有効にする(
デバッグ モードでのみ有効 ) 。 |
1048576 | Don't Cache Result ( forward only cursors ) | 結果をドライバ内でローカルにキャッシュせず、サーバ
(mysql_use_result() )
から読み取る。これは forward-only
カーソルのみで使用できる。このオプションは、大きなテーブルを扱っていて、ドライバが全結果セットをキャッシュするのを防ぎたい時に重要になる。 |
2097152 | Force Use Of Forward Only Cursors | Forward-only カーソルの使用を強制行使する。アプリケーションがデフォルトのスタティック
/
動的カーソルの種類をセットし、それが非キャッシュの結果セットを使おうとする場合は、このオプションが
forward-only カーソルの挙動を保証する。 |
4194304 | Enable auto-reconnect. | 自動再接続の機能を有効にする。不完全なトランザクションの間の自動再接続は破損の原因となるため、トランザクションとこのオプションを併用しないこと。自動再接続での接続は、元来の設定や環境を受け継いでいないので注意。このオプションは、Connector/ODBC 3.5.13. で有効。 |
8388608 | Flag Auto Is Null | このオプションはセットの際に、接続が
SQL_AUTO_IS_NULL オプションを 1
にセットする起因なる。標準の挙動が無効になるが、古いアプリケーションを有効にして、AUTO_INCREMENT
値を正確に指定することもある。詳細は、
を参照。このオプションは Connector/ODBC
3.5.13. で有効。 |
複数のオプションを選択するには、それらの値を加算します。例えば、option
を 12 (4+8)
にセットすると、パケット制限なしでデバッグすることができます。
次のテーブルは、様々な構成で推奨する
option
値の例のリストです :
構成 | オプション値 |
Microsoft Access、Visual Basic | 3 |
ドライバ トレース生成 ( デバッグ モード ) | 4 |
Microsoft Access ( DELETE クエリが改善されたもの ) | 35 |
行数過多の大規模なテーブル | 2049 |
Sybase PowerBuilder | 135168 |
クエリ ログ生成 ( デバッグ モード ) | 524288 |
クエリ ログと同時にドライバ トレースを生成 ( デバッグ モード ) | 524292 |
非キャッシュ結果を伴う大規模なテーブル | 3145731 |
DRIVER
名フィールドを指定することで、SQLDriverConnect
を使用して MySQL
サーバに接続することができます。以下は
DSN-Less コネクションを使用した Connector/ODBC
用の接続ストリングです :
MyODBC 2.5.0 の場合 :
ConnectionString = "DRIVER={MySQL};\ SERVER=localhost;\ DATABASE=test;\ USER=venu;\ PASSWORD=venu;\ OPTION=3;"
Connector/ODBC 3.51 の場合 :
ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};\ SERVER=localhost;\ DATABASE=test;\ USER=venu;\ PASSWORD=venu;\ OPTION=3;"
プログラム言語が、バックスラッシュに空白が続くとスペースに変換してしまう場合は、接続ストリングをひとつの長いストリングとして指定するか、複数のストリングを間にスペースを入れずにつなげて使用することをお勧めします。例 :
ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" "SERVER=localhost;" "DATABASE=test;" "USER=venu;" "PASSWORD=venu;" "OPTION=3;"
注意 :? Mac OS X では、Connector/ODBC ドライバ ライブラリへの完全パスの指定が必要になる場合があります。
提供されている接続パラメータのリストは、項24.1.3.5. 「Connector/ODBC Connection Parameters」 を参照してください。
接続プーリングは、データベースがアクセスを受けるたびに新しい接続を開くかわりに、ODBC ドライバが接続プールから、与えられたデータベースへの既存の接続を再利用することを可能にします。接続プーリングを有効することによって、データベースへの接続を開く手間が縮小され、アプリケーションの全体的な能力を高めることができます。
接続プーリングに関する情報は : http://support.microsoft.com/default.aspx?scid=kb;EN-US;q169470.
Connector/ODBC
で不具合や問題があった場合は、ODBC
Manager
と Connector/ODBC からログ
ファイルを作り始めましょう。これは
tracing と呼ばれ、ODBC Manager
を通して利用できます。そのプロシージャは、Windows
、Mac OS X 、および Unix 間で異なります。
Windows でトレース オプションを有効にするには :
Data Source Administrator ダイアログ ボックスの
Tracing
タブで、ODBC
関数呼び出しのトレースの方法を構成することができます。
Tracing
タブからトレーシングを発動すると、Driver
Manager
が後に起動するすべてのアプリケーションの、すべての
ODBC 関数呼び出しを記録。
トレーシングが有効になる前に起動していたアプリケーションからの ODBC 関数呼び出しは記録されません。ODBC 関数呼び出しは、指定したログ ファイルに記録されます。
Stop Tracing Now
をクリックするまで、トレーシングは続きます。トレーシングをしている間は、ログ
ファイルのサイズは増量し続け、そのトレーシングはすべての
ODBC
アプリケーションのパフォーマンスに影響を及ぼします。
Mac OS X 10.3 以降でトレース
オプションを有効にするには、 ODBC
Administrator 内の Tracing
タブを使用してください。
ODBC Administrator を開く。
Tracing
タブを選択。
Enable Tracing
チェックボックスを選択。
Tracing ログを保存したいロケーションを入力。既存のログ ファイルに情報を追加したい場合は、
ボタンをクリックする。
Mac OS X 10.2 ( またはそれ以降 ) か Unix
でトレース
オプションを有効にしたい場合は、ODBC 構成に
trace
オプションを加える必要があります :
Unix では、ODBC.INI
ファイルの Trace
オプションを明示的に設定する必要があります。
下のように、odbc.ini
の
TraceFile
および
Trace
を使用して、トレーシングの
ON
または OFF
を設定してください :
TraceFile = /tmp/odbc.trace Trace = 1
TraceFile
がトレース
ファイルの名前や完全パスを指定し、Trace
は ON
または OFF
に設定されます。ON
にするには、1
または
YES
、OFF
には
0
または NO
を使用することもできます。unixODBC
の ODBCConfig
を使用する場合は、HOWTO-ODBCConfig
にある unixODBC
呼び出しのトレース方法の手順に従ってください。
Connector/ODBC ログを生成するには、次の手順に従ってください :
Windows 内で、Connector/ODBC connect/configure
スクリーンの Trace Connector/ODBC
オプション
フラグを有効にする。C:\myodbc.log
にログが書き込まれる。上のスクリーンに戻る時、トレース
オプションが記憶されていなければ、myodbcd.dll
が使用されていないということになる。項24.1.3.2.4. 「エラーとデバッグ」
参照。
Mac OS X 、Unix では、またもしくは DSN-Less
コネクションを使用している場合は、接続ストリングに
OPTION=4
を供給するか、該当するキーワードおよび値のペアを
DSN に設定する必要がある。
アプリケーションを開始し、起動を失敗させてみる。それから Connector/ODBC トレースをチェックし、問題を確認する。
問題の特定にヘルプが必要な場合は、項24.1.7.1. 「Connector/ODBC のコミュニティー支援」 をご覧ください。
DSN を構成し、データベースへのアクセスを供給し終えれば、実際の接続のアクセス方法や使用法は、アプリケーションまたはプログラム言語次第になります。ODBC は標準化されたインターフェイスなので、ODBC に対応するすべてのアプリケーションもしくは言語は DSN を使用することができ、構成されたデータベースに接続することが可能です。
通常、Connector/ODBC を使用したアプリケーションからの MySQL サーバとの干渉には、次のオペレーションが伴います :
Connector/ODBC DSN の構成
MySQL サーバへの接続
初期化動作
SQL 文の実行
結果の検索
トランザクションの実行
サーバの接続解除
ほとんどのアプリケーションは、これらのステップのバリエーションを使用します。基本的なアプリケーションのステップは、次の図のようになります :
Connector/ODBC を導入する動機としては、Windows のマシンから、Linux または Unix ホストのデータベースにアクセスしたいというのが一般的です。
2
台のマシン間のアクセス設定が必要なプロセスの例として、下記のステップで基本手順を説明します。この説明は、myuser
と mypassword
のユーザ名とパスワードで、システム BETA
からシステム ALPHA
へ接続するという前提でなされています。
システム ALPHA ( MySQL サーバ ) では、次のステップに従ってください :
MySQL サーバを起動。
GRANT
を使用し、システム BETA
から myuser
のパスワードでデータベース
test
に接続できる、myuser
ユーザ名でのアカウントを設定する :
GRANT ALL ON test.* to 'myuser'@'BETA' IDENTIFIED BY 'mypassword';
MySQL 特権に関しての詳細は、項4.8. 「MySQL ユーザ アカウント管理」 を参照してください。
システム BETA ( Connector/ODBC クライアント ) では、次のステップに従ってください :
システム ALPHA で構成したサーバ、データベースおよび認証情報にマッチするパラメータを使用して、Connector/ODBC DSN を構成する。
パラメータ | 値 | コメント |
DSN | remote_test | 接続を特定する名前 |
SERVER | ALPHA | リモート サーバのアドレス |
DATABASE | test | デフォルト データベースの名前 |
USER | myuser | このデータベースへのアクセスのために作成されたユーザ名 |
PASSWORD | mypassword | myuser へのパスワード |
Microsoft Office など、ODBC 対応アプリケーションを使用すると、作成したばかりの DSN を使って MySQL に接続することができる。接続に失敗した場合は、接続プロセスを検査するためにトレーシングを使う。詳細は 項24.1.3.8. 「ODBC トレース ファイルの獲得」 を参照。
独自の Connector/ODBC DSN を構成し終えたら、プログラム言語やサード パーティー アプリケーションを含む、ODBC インターフェースに対応するすべてのアプリケーションを通して、MySQL データベースにアクセスすることができます。このセクションは、様々な ODBC 対応のツールとおよび Microsoft Word 、Microsoft Excel 、Adobe/Macromedia ColdFusion を含むアプリケーションの使用に関するガイドとヘルプを含みます。
Connector/ODBC は次のアプリケーションでテストされています :
発行元 | アプリケーション | 注記 |
Adobe | ColdFusion | 以前は Macromedia ColdFusion |
Borland | C++ Builder | ? |
? | Builder 4 | ? |
? | Delphi | ? |
Business Objects | Crystal Reports | ? |
Claris | Filemaker Pro | ? |
Corel | Paradox | ? |
Computer Associates | Visual Objects | 別称 CAVO |
? | AllFusion ERwin Data Modeler | ? |
Gupta | Team Developer | 以前の名称は Centura Team Developer; Gupta SQL/Windows |
Gensym | G2-ODBC Bridge | ? |
Inline | iHTML | ? |
Lotus | Notes | バージョン 4.5 および 4.6 |
Microsoft | Access | ? |
? | Excel | ? |
? | Visio Enterprise | ? |
? | Visual C++ | ? |
? | Visual Basic | ? |
? | ODBC.NET | C# 、Visual Basic 、C++ を使用 |
? | FoxPro | ? |
? | Visual Interdev | ? |
OpenOffice.org | OpenOffice.org | ? |
Perl | DBD::ODBC | ? |
Pervasive Software | DataJunction | ? |
Sambar Technologies | Sambar Server | ? |
SPSS | SPSS | ? |
SoftVelocity | Clarion | ? |
SQLExpress | SQLExpress for Xbase++ | ? |
Sun | StarOffice | ? |
SunSystems | Vision | ? |
Sybase | PowerBuilder | ? |
? | PowerDesigner | ? |
theKompany.com | Data Architect | ? |
他にも Connector/ODBC
に対応するアプリケーションがあれば、<myodbc@lists.mysql.com>
までメールでお知らせください。
Connector/ODBC を使用して、Microsoft Access で MySQL データベースを利用することができます。MySQL データベースは Access アプリケーション内で、インポート元、エクスポート元、または直接使用のためにリンクされたテーブルとして利用できるので、Access を MySQL データベースへのフロントエンド インターフェイスとして使うことができます。
データのテーブルを Access データベースから MySQL にエクスポートするには、次の手順に従ってください :
Access データベース、もしくは Access プロジェクトを開くと、Database ウィンドウが出現。新しいデータベース オブジェクトの作成、そして既存のオブジェクトのオープンのショートカットが表示される。
エクスポートしたい table
もしくは query
の名前をクリックし、File
で
Export
を選択。
Export Object Type
ダイアログ
ボックスの Object
name
ToSave As Type
ボックスで、下記のように ODBC
Databases ()
を選択 :
Export
ダイアログ
ボックスにファイル名 (
もしくは提示される名前を使用 )
を入力し、OK
を選択。
Select Data Source ダイアログボックスが出現。コンピュータにインストールされたすべての ODBC ドライバの、定義されたデータソースがリストアップされる。File Data Source もしくは Machine Data Source タブをクリックし、エクスポートしたい Connector/ODBC か Connector/ODBC 3.51 のデータソースをダブルクリックする。Connector/ODBC の新たなデータソースを定義するには、項24.1.3.2. 「Windows での Connector/ODBC DSN の構成」 を参照。
Microsoft Access がこのデータソースを介して MySQL サーバに接続し、新しいテーブル、そしてまたはデータをエクスポートします。
テーブルを MySQL から Access にインポートするには、次の手順に従ってください :
データベースを開くか、Database ウィンドウに切り替えてデータベースを開く。
テーブルをインポートするには、File
メニューで Get External Data
を選び、Import
をクリック。
Import
ダイアログ ボックスの
Files Of Type ボックスで、ODBC Databases
()
を選択。定義されたデータソースをリストアップした、The
Select Data Source ダイアログ
ボックスが表示される。
選択した ODBC
データソースにはログインが必要な場合は、ログイン
ID とパスワード
(場合によってはその他の情報も )
入力し、OK
をクリック。
Microsoft Access が ODBC data source
を介して MySQL
サーバに接続し、import
が可能なテーブルのリストを表示する。
import
したい各テーブルをクリックし、OK
を押す。
Microsoft Access データベース内のテーブルと、 MySQL データベース内のテーブルをリンクすることで、Microsoft Access を MySQL データベースのフロントエンドとして使うことができます。Access のテーブルでクエリが要求された場合、ODBC を使って MySQL でクエリが実行されます。
テーブルのリンクを作成 :
MySQL にリンクしたい Access Database を開く。
から、 を選択。
ブラウザで、Files of type ポップアップから ODBC Databases () を選択。
Select Data Source ウィンドウで既存の DSN を、File Data Source か Machine Data Source から選ぶ。または、 ボタンで新たな DSN を作成することもできる。DSN の作成については、項24.1.3.2. 「Windows での Connector/ODBC DSN の構成」 を参照。
Link Tables ダイアログで、MySQL データベースからひとつ以上のテーブルを選択。リストから選択した各テーブルに対してリンクが作成される。
Microsoft Access が自動的にテーブルからユニーク レコード識別子を決定しない場合、ソース テーブルの各横列をユニークに特定するため、各カラム、もしくはカラムのコンビネーションの確認が要求されることがある。使用したいカラムを選び、
を選択する。プロセスが完了すれば、Access データベースでするように、リンクされたテーブルにインターフェイスやクエリを作成することができます。
リンクしたテーブルのストラクチャやロケーションが変わった場合は、次のプロシージャを使用して閲覧するか、リンクをリフレッシュします。Linked Table Manager が、現在リンクされているすべてのテーブルへのパスをリストアップします。
リンクの閲覧もしくはリフレッシュ :
MySQL テーブルへのリンクを含むデータベースを開く。
Tools
メニューで、Add-ins
( Access 2000
以降では Database Utilities
)
を指定し、Linked Table Manager
をクリック。
リフレッシュしたいリンクがあるテーブルのチェックボックスをクリック。
OK をクリックし、リンクをリフレッシュ。
Microsoft Access
がリフレッシュの成功を確認し、テーブルが見つからなかった場合は、Select
New Location of
< テーブル名 >
ダイアログ
ボックスが表示されて、そのテーブルの新たなロケーションを特定することができます。複数の選択されたテーブルが、特定した新たなロケーションに移された場合、Linked
Table Manager
が、選択されたテーブルのすべてのロケーションを検索し、すべてのリンクを一度にアップデートします。
リンクされたテーブル グループのパス変更 :
テーブルへのリンクを含むデータベースを開く。
Tools
メニューで、Add-ins
( Access 2000
以降では Database Utilities
)
を指定し、Linked Table Manager
をクリック。
Always Prompt For A New Location
チェックボックスを選択。
リフレッシュしたいリンクがあるテーブルのチェックボックスをクリックし、OK
を押す。
Select New Location of
<
テーブル名 > ダイアログ
ボックスで、新しいロケーションを指定して
Open
をクリック、そして
OK
を押す。
Microsoft Word と Microsoft Excel で、Connector/ODBC を使って MySQL データベースの情報にアクセスすることができます。Microsoft Word 内で、これはメール合成や、テーブルやデータがレポートに含まれるようにするのに、最も役立つ機能です。Microsoft Excel 内で、MySQL サーバ上でクエリを実行したり、データを Excel Worksheet に直接インポートして、データをロウやカラムの形式で表示することができます。
双方のアプリケーションで、データのアクセスとアプリケーションへのインポートには、ODBC ソースを介してクエリを実行することのできる Microsoft Query が使用されます。Microsoft Query を使用して、実行する SQL 文、テーブルの選択、フィールド、選択基準、ソートの順序を作成します。例えば、項24.1.3. 「Connector/ODBC の構成」 にある DSN サンプルを使用して、World テスト データベースにあるテーブルの情報を Excel のスプレッドシートにインサートするには :
新規の Worksheet を作成。
Data
メニューから、Import
External Data
を選択し、さらに
New Database Query
を選択。
Microsoft Query が起動。まず、既存の Data Source Name を選択してデータソースを選ぶ。
Query Wizard
内で、インポートしたいカラムを選択する。DSN
を介して構成され、ユーザが利用できるテーブルのリストが左側に、クエリに追加されるカラムが右側に表示される。選んだカラムは、SELECT
クエリの最初のセクションにあるものに相当する。
をクリックして続行。
Filter Data
ダイアログを使用して、クエリ (
WHERE
条項に相当 )
から行をフィルターにかけることができる。
をクリックして続行。
データのソート順序を選択 ( 任意 ) 。これは
SQL クエリでの ORDER BY
条項の使用に相当する。最大 3
つのフィールドを選び、クエリから戻された情報をソートすることができる。
をクリックして続行。
クエリの移動先を選択。データの返送先に Microsoft Excel を選び、データをインサートしたい部分のワークシートやセルを選択することができ、Microsoft Query 内でクエリと結果の閲覧を続け、SQL クエリとさらなるフィルタを編集、戻された情報をソートすることができる。または、クエリから OLAP Cube を作成し、それを Microsoft Excel 内で直接使用することも可能。
をクリックする。同じプロセスで、Word ドキュメントにデータをインポートすることができ、その場合データはテーブル形式でインサートされます。これは、メール合成に ( その場合は Word テーブルからフィールド データが読み取られる ) に使用したり、もしくはレポートや他のドキュメントにデータおよび報告を含めたい場合に使用することができます。
Crystal Reports は ODBC DSN を使って、レポート用にデータや情報が摘出できるデータベースに接続することができます。
Crystal Reports の特定のバージョンでは、アプリケーションが開けない、ODBC コネクションを通してテーブルやフィールドをブラウズできない、という問題が報告されています。Crystal Reports で MySQL を使用する前に、不具合に対するサービス パックやホットフィックスを含む、最新バージョンへのアップデートをするようにしてください。この問題に関する情報は、Business) Objects Knowledgebase でご覧ください。
例として、Crystal Reports XI 内で簡単なクロス集計レポートを作成するには、次のステップに従ってください :
Data Sources (ODBC)
ツールを使用して DSN
を作成。ユーザ名とパスワードのある完全なデータベースを指定するか、基本的な
DSN を作成し、Crystal Reports
を使ってユーザ名とパスワードを設定する。
この例の目的のために、MySQL Sakila サンプル データベースの実例に接続を提供する DSN が作成されている。
Crystal Reports を開き、新しいプロジェクトを作成するか、MySQL データソースからのデータをインサートしたい既存のレポート プロジェクトを開く。
Start Page のオプションをクリックするなどして、Cross-Tab Report Wizard を起動。Create New Connection フォルダを展開し、それから ODBC (RDO) フォルダを広げて ODBC データソースのリストを獲得する。
データソースの選択が要請される。
ODBC (RDO) フォルダを最初に展開する際、Data Source Selection スクリーンが表示される。ここからは、事前に構成された DSN を選択する、ファイルベース DSN を開く、もしくは手動接続ストリングを入力する、からどれかを選ぶことができる。この例では、Sakila DSN を使用。
DSN がユーザ名とパスワードのコンビネーションを持つ場合、または別の承認信任状を使用する場合は、
をクリックして、使用するユーザ名とパスワードを入力する。それ以外では、 をクリックして、データソース選択ウィザードを続ける。
Cross-Tab Report Creation Wizard
に戻る。レポートに含めたいデータベースとテーブルを選択。ここでは例として、選ばれた
Sakila
データベースを展開する。city
テーブルをクリックし、
ボタンでテーブルをレポートに加える。そして、country
テーブルで同じ動作を繰り返す。あるいは、複数のテーブルを選択し、それらをレポートに加えることもできる。
最後に、Sakila の親リソースを選択し、そのテーブルをレポートに加えることができる。
取り入れたいテーブルを選択したら、
を押して次に進む。これで、Crystal Reports はテーブルの定義を読み取り、テーブル間のリンクを自動的に特定するようになる。テーブル間のリンクの特定により、Crystal Reports はクエリ従って、データベース内の全テーブルに基づく情報を参照そして要約することができる。Crystal Reports がリンクそのものを実行できない場合、選択したテーブルのフィールド間に手動でリンクを作成することができる。
をクリックしてプロセスを続行。
次に、クロス集計レポートに取り込みたいカラムと行を選択。ドラッグ アンド ドロップか、
ボタンを使って、レポートの各部にフィールドを加える。この例の画面では、city をレポートし、country で整理、各 county の city の数を取り込むことにする。データをブラウスしたい場合は、フィールドを選択して ボタンをクリックする。をクリックして結果のグラフを作成。このデータからはグラフを作成していないので、 をクリックしてレポートを発行する。
完成したレポートが表示される。以下はSakila サンプル データベースからの出力サンプル。
Clystal Reports 内で ODBC 接続が開いたら、使用可能なテーブルのどのフィールドでも、レポートに加えることができます。
適切な ODBC Manager と Connector/ODBC ドライバがインストールされていれば、ODBC に対応するすべてのプログラム言語または環境で、Connector/ODBC を介して MySQL データベースに接続することができます。
該当するプログラム言語や環境には、Microsoft 対応言語 ( Visual Basic や C# 、そして ODBC.NET のようなインターフェイスも含む ) 、Perl ( DBI モジュール、DBD::ODBC ドライバ を仲介 ) をはじめ、様々な種類があります。
このセクションには、ADO、DAO および RDO を使った MySQL ODBC 3.51 ドライバの簡単な使用例が記載されています。
次の ADO (ActiveX Data Objects) 例は、テーブル
my_ado
を作成し、rs.addNew
、rs.delete
、および
rs.update
の使用を実証します。
Private Sub myodbc_ado_Click() Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim fld As ADODB.Field Dim sql As String 'connect to MySQL server using MySQL ODBC 3.51 Driver Set conn = New ADODB.Connection conn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};"_ & "SERVER=localhost;"_ & " DATABASE=test;"_ & "UID=venu;PWD=venu; OPTION=3" conn.Open 'create table conn.Execute "DROP TABLE IF EXISTS my_ado" conn.Execute "CREATE TABLE my_ado(id int not null primary key, name varchar(20)," _ & "txt text, dt date, tm time, ts timestamp)" 'direct insert conn.Execute "INSERT INTO my_ado(id,name,txt) values(1,100,'venu')" conn.Execute "INSERT INTO my_ado(id,name,txt) values(2,200,'MySQL')" conn.Execute "INSERT INTO my_ado(id,name,txt) values(3,300,'Delete')" Set rs = New ADODB.Recordset rs.CursorLocation = adUseServer 'fetch the initial table .. rs.Open "SELECT * FROM my_ado", conn Debug.Print rs.RecordCount rs.MoveFirst Debug.Print String(50, "-") & "Initial my_ado Result Set " & String(50, "-") For Each fld In rs.Fields Debug.Print fld.Name, Next Debug.Print Do Until rs.EOF For Each fld In rs.Fields Debug.Print fld.Value, Next rs.MoveNext Debug.Print Loop rs.Close 'rs insert rs.Open "select * from my_ado", conn, adOpenDynamic, adLockOptimistic rs.AddNew rs!Name = "Monty" rs!txt = "Insert row" rs.Update rs.Close 'rs update rs.Open "SELECT * FROM my_ado" rs!Name = "update" rs!txt = "updated-row" rs.Update rs.Close 'rs update second time.. rs.Open "SELECT * FROM my_ado" rs!Name = "update" rs!txt = "updated-second-time" rs.Update rs.Close 'rs delete rs.Open "SELECT * FROM my_ado" rs.MoveNext rs.MoveNext rs.Delete rs.Close 'fetch the updated table .. rs.Open "SELECT * FROM my_ado", conn Debug.Print rs.RecordCount rs.MoveFirst Debug.Print String(50, "-") & "Updated my_ado Result Set " & String(50, "-") For Each fld In rs.Fields Debug.Print fld.Name, Next Debug.Print Do Until rs.EOF For Each fld In rs.Fields Debug.Print fld.Value, Next rs.MoveNext Debug.Print Loop rs.Close conn.Close End Sub
次の DAO (Data Access Objects) 例では、テーブル
my_ado
を作成し、rs.addNew
、rs.update
、および結果セットのスクローリングの使用を実証します。
Private Sub myodbc_dao_Click() Dim ws As Workspace Dim conn As Connection Dim queryDef As queryDef Dim str As String 'connect to MySQL using MySQL ODBC 3.51 Driver Set ws = DBEngine.CreateWorkspace("", "venu", "venu", dbUseODBC) str = "odbc;DRIVER={MySQL ODBC 3.51 Driver};"_ & "SERVER=localhost;"_ & " DATABASE=test;"_ & "UID=venu;PWD=venu; OPTION=3" Set conn = ws.OpenConnection("test", dbDriverNoPrompt, False, str) 'Create table my_dao Set queryDef = conn.CreateQueryDef("", "drop table if exists my_dao") queryDef.Execute Set queryDef = conn.CreateQueryDef("", "create table my_dao(Id INT AUTO_INCREMENT PRIMARY KEY, " _ & "Ts TIMESTAMP(14) NOT NULL, Name varchar(20), Id2 INT)") queryDef.Execute 'Insert new records using rs.addNew Set rs = conn.OpenRecordset("my_dao") Dim i As Integer For i = 10 To 15 rs.AddNew rs!Name = "insert record" & i rs!Id2 = i rs.Update Next i rs.Close 'rs update.. Set rs = conn.OpenRecordset("my_dao") rs.Edit rs!Name = "updated-string" rs.Update rs.Close 'fetch the table back... Set rs = conn.OpenRecordset("my_dao", dbOpenDynamic) str = "Results:" rs.MoveFirst While Not rs.EOF str = " " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2 Debug.Print "DATA:" & str rs.MoveNext Wend 'rs Scrolling rs.MoveFirst str = " FIRST ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2 Debug.Print str rs.MoveLast str = " LAST ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2 Debug.Print str rs.MovePrevious str = " LAST-1 ROW: " & rs!Id & " , " & rs!Name & ", " & rs!Ts & ", " & rs!Id2 Debug.Print str 'free all resources rs.Close queryDef.Close conn.Close ws.Close End Sub
次の RDO (Remote Data Objects) 例は、テーブル
my_ado
を作成し、rs.addNew
および
rs.update
の使用を実証します。
Dim rs As rdoResultset Dim cn As New rdoConnection Dim cl As rdoColumn Dim SQL As String 'cn.Connect = "DSN=test;" cn.Connect = "DRIVER={MySQL ODBC 3.51 Driver};"_ & "SERVER=localhost;"_ & " DATABASE=test;"_ & "UID=venu;PWD=venu; OPTION=3" cn.CursorDriver = rdUseOdbc cn.EstablishConnection rdDriverPrompt 'drop table my_rdo SQL = "drop table if exists my_rdo" cn.Execute SQL, rdExecDirect 'create table my_rdo SQL = "create table my_rdo(id int, name varchar(20))" cn.Execute SQL, rdExecDirect 'insert - direct SQL = "insert into my_rdo values (100,'venu')" cn.Execute SQL, rdExecDirect SQL = "insert into my_rdo values (200,'MySQL')" cn.Execute SQL, rdExecDirect 'rs insert SQL = "select * from my_rdo" Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect) rs.AddNew rs!id = 300 rs!Name = "Insert1" rs.Update rs.Close 'rs insert SQL = "select * from my_rdo" Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect) rs.AddNew rs!id = 400 rs!Name = "Insert 2" rs.Update rs.Close 'rs update SQL = "select * from my_rdo" Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect) rs.Edit rs!id = 999 rs!Name = "updated" rs.Update rs.Close 'fetch back... SQL = "select * from my_rdo" Set rs = cn.OpenResultset(SQL, rdOpenStatic, rdConcurRowVer, rdExecDirect) Do Until rs.EOF For Each cl In rs.rdoColumns Debug.Print cl.Value, Next rs.MoveNext Debug.Print Loop Debug.Print "Row count="; rs.RowCount 'close rs.Close cn.Close End Sub
このセクションでは、ODBC.NET を使った Connector/ODBC ドライバの簡単な使用実例が記載されています。
次のサンプルは、テーブル
my_odbc_net
を作成し、C#
でのその使用を実証します。
/**
* @sample : mycon.cs
* @purpose : Demo sample for ODBC.NET using Connector/ODBC
* @author : Venu, <myodbc@lists.mysql.com>
*
* (C) Copyright MySQL AB, 1995-2006
*
**/
/* build command
*
* csc /t:exe
* /out:mycon.exe mycon.cs
* /r:Microsoft.Data.Odbc.dll
*/
using Console = System.Console;
using Microsoft.Data.Odbc;
namespace myodbc3
{
class mycon
{
static void Main(string[] args)
{
try
{
//Connection string for MyODBC 2.50
/*string MyConString = "DRIVER={MySQL};" +
"SERVER=localhost;" +
"DATABASE=test;" +
"UID=venu;" +
"PASSWORD=venu;" +
"OPTION=3";
*/
//Connection string for Connector/ODBC 3.51
string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" +
"SERVER=localhost;" +
"DATABASE=test;" +
"UID=venu;" +
"PASSWORD=venu;" +
"OPTION=3";
//Connect to MySQL using Connector/ODBC
OdbcConnection MyConnection = new OdbcConnection(MyConString);
MyConnection.Open();
Console.WriteLine("\n !!! success, connected successfully !!!\n");
//Display connection information
Console.WriteLine("Connection Information:");
Console.WriteLine("\tConnection String:" +
MyConnection.ConnectionString);
Console.WriteLine("\tConnection Timeout:" +
MyConnection.ConnectionTimeout);
Console.WriteLine("\tDatabase:" +
MyConnection.Database);
Console.WriteLine("\tDataSource:" +
MyConnection.DataSource);
Console.WriteLine("\tDriver:" +
MyConnection.Driver);
Console.WriteLine("\tServerVersion:" +
MyConnection.ServerVersion);
//Create a sample table
OdbcCommand MyCommand =
new OdbcCommand("DROP TABLE IF EXISTS my_odbc_net",
MyConnection);
MyCommand.ExecuteNonQuery();
MyCommand.CommandText =
"CREATE TABLE my_odbc_net(id int, name varchar(20), idb bigint)";
MyCommand.ExecuteNonQuery();
//Insert
MyCommand.CommandText =
"INSERT INTO my_odbc_net VALUES(10,'venu', 300)";
Console.WriteLine("INSERT, Total rows affected:" +
MyCommand.ExecuteNonQuery());;
//Insert
MyCommand.CommandText =
"INSERT INTO my_odbc_net VALUES(20,'mysql',400)";
Console.WriteLine("INSERT, Total rows affected:" +
MyCommand.ExecuteNonQuery());
//Insert
MyCommand.CommandText =
"INSERT INTO my_odbc_net VALUES(20,'mysql',500)";
Console.WriteLine("INSERT, Total rows affected:" +
MyCommand.ExecuteNonQuery());
//Update
MyCommand.CommandText =
"UPDATE my_odbc_net SET id=999 WHERE id=20";
Console.WriteLine("Update, Total rows affected:" +
MyCommand.ExecuteNonQuery());
//COUNT(*)
MyCommand.CommandText =
"SELECT COUNT(*) as TRows FROM my_odbc_net";
Console.WriteLine("Total Rows:" +
MyCommand.ExecuteScalar());
//Fetch
MyCommand.CommandText = "SELECT * FROM my_odbc_net";
OdbcDataReader MyDataReader;
MyDataReader = MyCommand.ExecuteReader();
while (MyDataReader.Read())
{
if(string.Compare(MyConnection.Driver,"myodbc3.dll") == 0) {
//Supported only by Connector/ODBC 3.51
Console.WriteLine("Data:" + MyDataReader.GetInt32(0) + " " +
MyDataReader.GetString(1) + " " +
MyDataReader.GetInt64(2));
}
else {
//BIGINTs not supported by Connector/ODBC
Console.WriteLine("Data:" + MyDataReader.GetInt32(0) + " " +
MyDataReader.GetString(1) + " " +
MyDataReader.GetInt32(2));
}
}
//Close all resources
MyDataReader.Close();
MyConnection.Close();
}
catch (OdbcException MyOdbcException) //Catch any ODBC exception ..
{
for (int i=0; i < MyOdbcException.Errors.Count; i++)
{
Console.Write("ERROR #" + i + "\n" +
"Message: " +
MyOdbcException.Errors[i].Message + "\n" +
"Native: " +
MyOdbcException.Errors[i].NativeError.ToString() + "\n" +
"Source: " +
MyOdbcException.Errors[i].Source + "\n" +
"SQL: " +
MyOdbcException.Errors[i].SQLState + "\n");
}
}
}
}
}
次のサンプルは、テーブル
my_vb_net
を作成し、VB
でのその使用を実証します。
' @sample : myvb.vb
' @purpose : Demo sample for ODBC.NET using Connector/ODBC
' @author : Venu, <myodbc@lists.mysql.com>
'
' (C) Copyright MySQL AB, 1995-2006
'
'
'
' build command
'
' vbc /target:exe
' /out:myvb.exe
' /r:Microsoft.Data.Odbc.dll
' /r:System.dll
' /r:System.Data.dll
'
Imports Microsoft.Data.Odbc
Imports System
Module myvb
Sub Main()
Try
'Connector/ODBC 3.51 connection string
Dim MyConString As String = "DRIVER={MySQL ODBC 3.51 Driver};" & _
"SERVER=localhost;" & _
"DATABASE=test;" & _
"UID=venu;" & _
"PASSWORD=venu;" & _
"OPTION=3;"
'Connection
Dim MyConnection As New OdbcConnection(MyConString)
MyConnection.Open()
Console.WriteLine("Connection State::" & MyConnection.State.ToString)
'Drop
Console.WriteLine("Dropping table")
Dim MyCommand As New OdbcCommand()
MyCommand.Connection = MyConnection
MyCommand.CommandText = "DROP TABLE IF EXISTS my_vb_net"
MyCommand.ExecuteNonQuery()
'Create
Console.WriteLine("Creating....")
MyCommand.CommandText = "CREATE TABLE my_vb_net(id int, name varchar(30))"
MyCommand.ExecuteNonQuery()
'Insert
MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(10,'venu')"
Console.WriteLine("INSERT, Total rows affected:" & _
MyCommand.ExecuteNonQuery())
'Insert
MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(20,'mysql')"
Console.WriteLine("INSERT, Total rows affected:" & _
MyCommand.ExecuteNonQuery())
'Insert
MyCommand.CommandText = "INSERT INTO my_vb_net VALUES(20,'mysql')"
Console.WriteLine("INSERT, Total rows affected:" & _
MyCommand.ExecuteNonQuery())
'Insert
MyCommand.CommandText = "INSERT INTO my_vb_net(id) VALUES(30)"
Console.WriteLine("INSERT, Total rows affected:" & _
MyCommand.ExecuteNonQuery())
'Update
MyCommand.CommandText = "UPDATE my_vb_net SET id=999 WHERE id=20"
Console.WriteLine("Update, Total rows affected:" & _
MyCommand.ExecuteNonQuery())
'COUNT(*)
MyCommand.CommandText = "SELECT COUNT(*) as TRows FROM my_vb_net"
Console.WriteLine("Total Rows:" & MyCommand.ExecuteScalar())
'Select
Console.WriteLine("Select * FROM my_vb_net")
MyCommand.CommandText = "SELECT * FROM my_vb_net"
Dim MyDataReader As OdbcDataReader
MyDataReader = MyCommand.ExecuteReader
While MyDataReader.Read
If MyDataReader("name") Is DBNull.Value Then
Console.WriteLine("id = " & _
CStr(MyDataReader("id")) & " name = " & _
"NULL")
Else
Console.WriteLine("id = " & _
CStr(MyDataReader("id")) & " name = " & _
CStr(MyDataReader("name")))
End If
End While
'Catch ODBC Exception
Catch MyOdbcException As OdbcException
Dim i As Integer
Console.WriteLine(MyOdbcException.ToString)
'Catch program exception
Catch MyException As Exception
Console.WriteLine(MyException.ToString)
End Try
End Sub
このセクションでは、Connector/ODBC API の対応関数、方法、Connector/ODBC でサポートされている MySQL カラム タイプと適合ネイティブ タイプ、失敗があった時にConnector/ODBC が報告するエラーコード等を記載した参考資料を提供します。
このセクションでは、関数によって分類された ODBC ルーチンの要約を記載します。
完全な ODBC API 参考資料は、http://msdn.microsoft.com/library/en-us/odbc/htm/odbcabout_this_manual.asp の ODBC Programer's Reference をご覧ください。
アプリケーションは SQLGetInfo
関数を呼び出し、Connector/ODBC
の適合性情報を得ることができます。ドライバの特定の機能へのサポートに関する情報を得るには、アプリケーションで
SQLGetFunctions
を呼び出すことができます。
後方互換性に関しては、Connector/ODBC 3.51 はすべての推奨されない関数をサポートしています。
以下のテーブルは、作業別に分類された Connector/ODBC API 呼び出しをリストアップしています。
データソースへの接続 :
? | Connector/ODBC | ? | ? | |
関数名 | 2.50 | 3.51 | 標準 | 目的 |
SQLAllocHandle | No | Yes | ISO 92 | 環境、接続、ステートメント、または記述子ハンドルの獲得 |
SQLConnect | Yes | Yes | ISO 92 | データソース名、ユーザ ID とパスワードで特定のドライバに接続 |
SQLDriverConnect | Yes | Yes | ODBC | 接続ストリングもしくは、Driver Manager とドライバがユーザのために接続ダイアログ ボックスを表示する要求によって特定のドライバに接続 |
SQLAllocEnv | Yes | Yes | Deprecated | ドライバから割り振られた環境ハンドルの獲得 |
SQLAllocConnect | Yes | Yes | Deprecated | 接続ハンドルの獲得 |
ドライバとデータソースの情報獲得 :
? | Connector/ODBC | ? | ? | |
関数名 | 2.50 | 3.51 | 標準 | 目的 |
SQLDataSources | No | No | ISO 92 | 利用可能なデータソースのリストを戻す、Driver Manager で扱う |
SQLDrivers | No | No | ODBC | インストールされたドライバとその属性情報のリストを戻す、Driver Manager で扱う |
SQLGetInfo | Yes | Yes | ISO 92 | 特定のドライバとデータソースの情報を戻す |
SQLGetFunctions | Yes | Yes | ISO 92 | サポートされているドライバ関数を戻す |
SQLGetTypeInfo | Yes | Yes | ISO 92 | サポートされているドライバ関数を戻す |
ドライバ属性の設定と検索
? | Connector/ODBC | ? | ? | |
関数名 | 2.50 | 3.51 | 標準 | 目的 |
SQLSetConnectAttr | No | Yes | ISO 92 | 接続属性の設定 |
SQLGetConnectAttr | No | Yes | ISO 92 | 接続属性の値を戻す |
SQLSetConnectOption | Yes | Yes | Deprecated | 接続オプションの設定 |
SQLGetConnectOption | Yes | Yes | Deprecated | 接続オプションの値を戻す |
SQLSetEnvAttr | No | Yes | ISO 92 | 環境属性を設定 |
SQLGetEnvAttr | No | Yes | ISO 92 | 環境属性の値を戻す |
SQLSetStmtAttr | No | Yes | ISO 92 | ステートメント属性を設定 |
SQLGetStmtAttr | No | Yes | ISO 92 | ステートメント属性の値を戻す |
SQLSetStmtOption | Yes | Yes | Deprecated | ステートメント オプションの設定 |
SQLGetStmtOption | Yes | Yes | Deprecated | ステートメント オプションの値を戻す |
SQL リクエストの準備 :
? | Connector/ODBC | ? | ? | |
関数名 | 2.50 | 3.51 | 標準 | 目的 |
SQLAllocStmt | Yes | Yes | Deprecated | ステートメント ハンドルの割り振り |
SQLPrepare | Yes | Yes | ISO 92 | 後の実行のために SQL 文を準備 |
SQLBindParameter | Yes | Yes | ODBC | SQL 文中のパラメータのストレージを割り当て |
SQLGetCursorName | Yes | Yes | ISO 92 | ステートメント ハンドルに関連するカーソル名を戻す |
SQLSetCursorName | Yes | Yes | ISO 92 | カーソル名の指定 |
SQLSetScrollOptions | Yes | Yes | ODBC | カーソルの挙動をコントロールするオプションの設定 |
リクエストのサブミット :
? | Connector/ODBC | ? | ? | |
関数名 | 2.50 | 3.51 | 標準 | 目的 |
SQLExecute | Yes | Yes | ISO 92 | 準備されたステートメントの実行 |
SQLExecDirect | Yes | Yes | ISO 92 | ステートメントの実行 |
SQLNativeSql | Yes | Yes | ODBC | ドライバに変換された SQL 文のテキストを戻す |
SQLDescribeParam | Yes | Yes | ODBC | ステートメント中の特定のパラメータの概要を戻す |
SQLNumParams | Yes | Yes | ISO 92 | ステートメント中のパラメータの数を戻す |
SQLParamData | Yes | Yes | ISO 92 | 実行時にパラメータ データを供給するために
SQLPutData と併せて使用 (
長いデータ値に最適 ) |
SQLPutData | Yes | Yes | ISO 92 | パラメータのデータ値の一部または全てを送信 ( 長いデータ値に最適 ) |
結果と結果の情報の検索 :
? | Connector/ODBC | ? | ? | |
関数名 | 2.50 | 3.51 | 標準 | 目的 |
SQLRowCount | Yes | Yes | ISO 92 | インサートに影響を受ける行の数、アップデート、または削除要求を戻す |
SQLNumResultCols | Yes | Yes | ISO 92 | 結果セット内のカラムの数を戻す |
SQLDescribeCol | Yes | Yes | ISO 92 | 結果セット内のカラムを説明 |
SQLColAttribute | No | Yes | ISO 92 | 結果セット内のカラムの属性を説明 |
SQLColAttributes | Yes | Yes | Deprecated | 結果セット内のカラムの属性を説明 |
SQLFetch | Yes | Yes | ISO 92 | 複数の結果行を戻す |
SQLFetchScroll | No | Yes | ISO 92 | スクロール可能な結果行を戻す |
SQLExtendedFetch | Yes | Yes | Deprecated | スクロール可能な結果行を戻す |
SQLSetPos | Yes | Yes | ODBC | カーソルをデータの摘出されたブロックに配置し、行セットでアプリケーションがデータをリフレッシュできるようにする、または結果セットのデータをアップデートもしくは削除する |
SQLBulkOperations | No | Yes | ODBC | アップデート、削除、ブックマークによる摘出を含むバルク インサートおよびバルク ブックマーク操作を実施 |
エラーまたは診断情報の検索 :
? | Connector/ODBC | ? | ? | |
関数名 | 2.50 | 3.51 | 標準 | 目的 |
SQLError | Yes | Yes | Deprecated | 追加のエラーまたはステータス情報を戻す |
SQLGetDiagField | Yes | Yes | ISO 92 | 追加の診断情報 ( 診断データ構造のひとつのフィールド ) を戻す |
SQLGetDiagRec | Yes | Yes | ISO 92 | 追加の診断情報 ( 診断データ構造の複数の ) を戻す |
データソースのシステム テーブル ( カタログ機能 ) アイテム情報の獲得 :
? | Connector/ODBC | ? | ? | |
関数名 | 2.50 | 3.51 | 標準 | 目的 |
SQLColumnPrivileges | Yes | Yes | ODBC | ひとつまたは複数のテーブルにカラムと関連権限のリストを戻す |
SQLColumns | Yes | Yes | X/Open | 特定のテーブルにカラム名のリストを戻す |
SQLForeignKeys | Yes | Yes | ODBC | 外部キーになるカラム名が特定のテーブルに既存していれば、リストを戻す |
SQLPrimaryKeys | Yes | Yes | ODBC | テーブルの基本キーになるカラム名のリストを戻す |
SQLSpecialColumns | Yes | Yes | X/Open | 指定のテーブルで行をユニークに特定するカラムの最適なセット、またはトランザクションで行の値のどれかがアップデートされた際、自動的にアップデートされるカラムを戻す |
SQLStatistics | Yes | Yes | ISO 92 | 単一のテーブルのスタティック、およびテーブルに関連するインデックスのリストを戻す |
SQLTablePrivileges | Yes | Yes | ODBC | テーブルのリストと、各テーブルに関連する権限を戻す |
SQLTables | Yes | Yes | X/Open | 特定のデータソースに格納されたテーブル名のリストを戻す |
トランザクションの実行 :
? | Connector/ODBC | ? | ? | |
関数名 | 2.50 | 3.51 | 標準 | 目的 |
SQLTransact | Yes | Yes | Deprecated | トランザクションのコミットまたはロールバック |
SQLEndTran | No | Yes | ISO 92 | トランザクションのコミットまたはロールバック |
ステートメントの終了 :
? | Connector/ODBC | ? | ? | |
関数名 | 2.50 | 3.51 | 標準 | 目的 |
SQLFreeStmt | Yes | Yes | ISO 92 | ステートメントの処理の終了、保留中の結果の破棄、またオプションとしてステートメント ハンドルに関連するすべてのソースの解放 |
SQLCloseCursor | Yes | Yes | ISO 92 | ステートメント ハンドルで開かれていたカーソルを閉じる |
SQLCancel | Yes | Yes | ISO 92 | SQL 文のキャンセル |
接続の終了 :
? | Connector/ODBC | ? | ? | |
関数名 | 2.50 | 3.51 | 標準 | 目的 |
SQLDisconnect | Yes | Yes | ISO 92 | 接続の終了 |
SQLFreeHandle | No | Yes | ISO 92 | 環境、接続、ステートメント、または記述子ハンドルの解放 |
SQLFreeConnect | Yes | Yes | Deprecated | 接続ハンドルの解放 |
SQLFreeEnv | Yes | Yes | Deprecated | 環境ハンドルの解放 |
次のテーブルは、ドライバがサーバのデータタイプをデフォルト SQL と C データタイプに位置づける方法を図式化したものです。
ネイティブ値 | SQL タイプ | C タイプ |
bit | SQL_BIT | SQL_C_BIT |
tinyint | SQL_TINYINT | SQL_C_STINYINT |
tinyint unsigned | SQL_TINYINT | SQL_C_UTINYINT |
bigint | SQL_BIGINT | SQL_C_SBIGINT |
bigint unsigned | SQL_BIGINT | SQL_C_UBIGINT |
long varbinary | SQL_LONGVARBINARY | SQL_C_BINARY |
blob | SQL_LONGVARBINARY | SQL_C_BINARY |
longblob | SQL_LONGVARBINARY | SQL_C_BINARY |
tinyblob | SQL_LONGVARBINARY | SQL_C_BINARY |
mediumblob | SQL_LONGVARBINARY | SQL_C_BINARY |
long varchar | SQL_LONGVARCHAR | SQL_C_CHAR |
text | SQL_LONGVARCHAR | SQL_C_CHAR |
mediumtext | SQL_LONGVARCHAR | SQL_C_CHAR |
char | SQL_CHAR | SQL_C_CHAR |
numeric | SQL_NUMERIC | SQL_C_CHAR |
decimal | SQL_DECIMAL | SQL_C_CHAR |
integer | SQL_INTEGER | SQL_C_SLONG |
integer unsigned | SQL_INTEGER | SQL_C_ULONG |
int | SQL_INTEGER | SQL_C_SLONG |
int unsigned | SQL_INTEGER | SQL_C_ULONG |
mediumint | SQL_INTEGER | SQL_C_SLONG |
mediumint unsigned | SQL_INTEGER | SQL_C_ULONG |
smallint | SQL_SMALLINT | SQL_C_SSHORT |
smallint unsigned | SQL_SMALLINT | SQL_C_USHORT |
real | SQL_FLOAT | SQL_C_DOUBLE |
double | SQL_FLOAT | SQL_C_DOUBLE |
float | SQL_REAL | SQL_C_FLOAT |
double precision | SQL_DOUBLE | SQL_C_DOUBLE |
date | SQL_DATE | SQL_C_DATE |
time | SQL_TIME | SQL_C_TIME |
year | SQL_SMALLINT | SQL_C_SHORT |
datetime | SQL_TIMESTAMP | SQL_C_TIMESTAMP |
timestamp | SQL_TIMESTAMP | SQL_C_TIMESTAMP |
text | SQL_VARCHAR | SQL_C_CHAR |
varchar | SQL_VARCHAR | SQL_C_CHAR |
enum | SQL_VARCHAR | SQL_C_CHAR |
set | SQL_VARCHAR | SQL_C_CHAR |
bit | SQL_CHAR | SQL_C_CHAR |
bool | SQL_CHAR | SQL_C_CHAR |
次のテーブルは、サーバ エラーとは別にドライバから戻されるエラーコードのリストです。
ネイティブ コード | SQLSTATE 2 | SQLSTATE 3 | エラーメッセージ |
500 | 01000 | 01000 | 一般警告 |
501 | 01004 | 01004 | ストリング データ、右打ち切り |
502 | 01S02 | 01S02 | オプション値が変更 |
503 | 01S03 | 01S03 | 行のアップデート / 削除なし |
504 | 01S04 | 01S04 | ひとつ以上の行がアップデート / 削除 |
505 | 01S06 | 01S06 | 結果セットが最初の行セットを戻す前にフェッチを試行 |
506 | 07001 | 07002 | SQLBindParameter
がすべてのパラメータでは使用されていない |
507 | 07005 | 07005 | カーソル規定ではないプリペアド ステートメント |
508 | 07009 | 07009 | 無効な記述子インデックス |
509 | 08002 | 08002 | 接続名が使用中 |
510 | 08003 | 08003 | 接続が存在していない |
511 | 24000 | 24000 | 無効なカーソル状態 |
512 | 25000 | 25000 | 無効なトランザクション状態 |
513 | 25S01 | 25S01 | トランザクション状態が不明 |
514 | 34000 | 34000 | 無効なカーソル名 |
515 | S1000 | HY000 | 一般ドライバ定義エラー |
516 | S1001 | HY001 | メモリ割り振りエラー |
517 | S1002 | HY002 | 無効なカラム番号 |
518 | S1003 | HY003 | 無効なアプリケーション バッファ タイプ |
519 | S1004 | HY004 | 無効な SQL データタイプ |
520 | S1009 | HY009 | ヌル ポインタの無効な使用 |
521 | S1010 | HY010 | 関数シーケンス エラー |
522 | S1011 | HY011 | 現在は属性を設定できない |
523 | S1012 | HY012 | 無効なトランザクション操作コード |
524 | S1013 | HY013 | メモリ管理エラー |
525 | S1015 | HY015 | カーソル名の利用不可 |
526 | S1024 | HY024 | 無効な属性値 |
527 | S1090 | HY090 | 無効なストリングまたはバッファ長 |
528 | S1091 | HY091 | 無効な記述子フィールド識別子 |
529 | S1092 | HY092 | 無効な属性 / オプション識別子 |
530 | S1093 | HY093 | 無効なパラメータ番号 |
531 | S1095 | HY095 | 範囲外の関数タイプ |
532 | S1106 | HY106 | 範囲外のフェッチ タイプ |
533 | S1117 | HY117 | 範囲外の行値 |
534 | S1109 | HY109 | 無効なカーソル位置 |
535 | S1C00 | HYC00 | オプション機能が実装されていない |
0 | 21S01 | 21S01 | カラム カウントと値カウントの不一致 |
0 | 23000 | 23000 | 整合性制約違反 |
0 | 42000 | 42000 | シンタックス エラーまたはアクセス違反 |
0 | 42S02 | 42S02 | 基本テーブルまたはビューの不検出 |
0 | 42S12 | 42S12 | インデックスの不検出 |
0 | 42S21 | 42S21 | カラムが既存 |
0 | 42S22 | 42S22 | カラムの不検出 |
0 | 08S01 | 08S01 | 通信リンク故障 |
ここでは、Connector/ODBC を異なる環境、アプリケーション、ツールで使用する際の一般的な注釈とアドバイスを記載しています。これらの注記は、Connector/ODBC 開発者とユーザの経験に基づいたものです。
このセクションでは、MySQL の一般的なクエリや機能の範囲、そして Connector/ODBC とのそれらの使い方について記載します。
NSERT
文の後で、AUTO_INCREMENT
を使うカラムの値を獲得する方法は様々あります。INSERT
の直後に獲得するには、SELECT
クエリを LAST_INSERT_ID()
関数と使用します。
例えば、Connector/ODBC
の使用中に、ふたつの別々のステートメント、
INSERT
文と SELECT
クエリを実行してオートインクリメント値を獲得します。
INSERT INTO tbl (auto,text) VALUES(NULL,'text'); SELECT LAST_INSERT_ID();
アプリケーション内では値は必要でないものの、他の
INSERT
の一部として値が必要である場合は、次のステートメントを実行するとすべてのプロセスが処理されます
:
INSERT INTO tbl (auto,text) VALUES(NULL,'text'); INSERT INTO tbl2 (id,text) VALUES(LAST_INSERT_ID(),'text');
特定の ODBC アプリケーション ( Delphi および Access を含む ) では、上の例でオートインクリメント値を獲得するのは困難な場合があります。その場合は、代わりに次のステートメントで試みてください :
SELECT * FROM tbl WHERE auto IS NULL;
dynamic cursor
のサポートは
Connector/ODBC 3.51
で提供されていますが、デフォルト設定では動的カーソルが有効になっていません。Windows
では、ODBC Data Source Administrator で Enable
Dynamic Cursor
チェックボックスを選択して、この機能を有効にしてください。
他のプラットフォームでは、DSN
を作成する際、OPTION
値に
32
を加えることで動的カーソルを有効にすることができます。
Connector/ODBC ドライバは高いパフォーマンス性を想定しています。Connector/ODBC の性能に問題を感じた場合、または簡単な要求に多量のディスク アクティビティが費やされる場合は、いくつかのことを確認してください :
ODBC Tracing
を無効にしてください。トレースが有効になっていると、ODBC
Manager が多くの情報をトレース
ファイルに記録します。Windows では、 ODBC
Data Source Administrator の
パネルでトレースの状況を確認し、無効にすることができます。Mac
OS X では、ODBC Administrator の
パネルで確認してください。項24.1.3.8. 「ODBC トレース ファイルの獲得」
参照。
ドライバはデバッグ バージョンでなく、標準バージョンを使用していることを確認してください。デバッグ バージョンには、追加の査閲や報告指標が含まれています。
Connector/ODBC ドライバのトレースとクエリ ログを無効にしてください。これらのオプションは各 DSN に対して有効になっていますので、アプリケーションに使用している DSN だけを検査するようにしてください。Windows では、DSN 構成を改修することで Connector/ODBC とクエリ ログを無効にすることができます。Mac OS X と Unix では、ドライバ トレース ( オプション値 4 ) とクエリ ログ ( オプション値 524288 ) が有効になっていないか確かめてください。
Microsoft Windows で、ODBC 接続を通してクエリを実行する際にクエリ タイムアウトを設定する方法に関する情報は、http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B153756 にある Microsoft ナレッジベース資料をお読みください。
ほとんどのプログラムは Connector/ODBC に対応しますが、以下にリストされているものにはそれぞれに、 Connector/ODBC とそのアプリケーションとの作業を向上拡大するための注釈とアドバイスがあります。
すべてのアプリケーションで、Connector/ODBC ドライバ、ODBC Manager 、およびアプリケーションで使われているライブラリとインターフェイス全部が最新バージョンになっているか確認してください。例えば Windows では、最新バージョンの Microsoft Data Access Components (MDAC) を使うことによって、ODBC との全体的な互換性、そして Connector/ODBC ドライバとの互換性が向上します。
Microsoft Office 、Microsoft Access 、そして ASP と Microsoft Visual Studio でサポートされている様々なプログラム言語を含む Microsoft アプリケーションの大多数は、Connector/ODBC との使用がテストで確認済みです。
Connector/ODBC に不具合が発生し、またそのプログラムが OLEDB にも対応する場合は、OLEDB ドライバの使用をお勧めします。
Connector/ODBC を通して Microsoft Access と MySQL の融合性を高めたい場合 :
すべてのバージョンの Access
で、Connector/ODBC Return matching
rows
オプションを有効にしてください。Access
2.0 では、Simulate ODBC 1.0
オプションも加えて有効にしてください。
アップデートしたいすべてのテーブルに、TIMESTAMP
カラムを設けてください。ポータビリティを最大にするには、カラム宣言
( MySQL 4.1
より前のバージョンではサポートされていません
) で長さ指定を使わないでください。
Access で使いたい MySQL
テーブル個々に基本キーを設置してください。それを行わない場合、新規またはアップデートされた行が
#DELETED#
と表示される場合があります。
DOUBLE
浮動小数点フィールドのみを使用。単精度浮動小数点値と比較する際、Access
に不具合が起きるためです。この徴候では通常、新規またはアップデートされた行が
#DELETED#
と表示される、または行の検出もしくはアップデートができなくなるということがあります。
Connector/ODBC を使って BIGINT
カラムのあるテーブルへリンクしている場合、結果が
#DELETED#
と表示されます。この問題を避けるには :
データタイプとして、TIMESTAMP
にもうひとつダミー カラムを設ける。
ODBC DSN Administrator
の接続ダイアログで、Change BIGINT
columns to INT
オプションを選択。
Access からテーブル リンクを削除し、また再作成する。
古い記録がまだ #DELETED#
と表示されるが、新しく加えられた、またはアップデートされた記録は正常に表示される。
TIMESTAMP
カラムを設けた後でも、エラー
Another user has changed your data
が発生する場合は、次の手段で解決することもあります
:
table
データシート
ビューを使用しない。代わりに、希望のフィールドでフォームを作成し、その
form
データシート
ビューを使用する。TIMESTAMP
カラムの DefaultValue
プロパティを、NOW()
に設定。後のユーザの混乱を避けるため、TIMESTAMP
カラムをビューから隠すとよい。
あるケースでは、Access が MySQL
には理解不能な SQL
文を発行することがあります。Access
のメニューから
"Query|SQLSpecific|Pass-Through"
を選択すると、これを解決できます。
Windows NT では、Access は BLOB
カラムを OLE OBJECTS
として報告します。代わりに
MEMO
カラムを希望する場合は、ALTER
TABLE
で BLOB
カラムを
TEXT
に変更してください。
Access は MySQL DATE
カラムを、常に正常に処理できるというわけではありません。もし問題がある場合は、カラムを
DATETIME
に変更してください。
Access に BYTE
と定義されたカラムがある場合、Access
はこれを TINYINT UNSIGNED
ではなく TINYINT
としてエクスポートしようとします。そのカラムに
127
より大きな値がある場合、これが問題となります。
Access に極めて大規模な ( 長い )
テーブルがある場合、それらを開くのに長い時間がかかる場合があります。または、仮想メモリが不足していると、最終的には
ODBC Query
Failed
エラーが発生し、テーブルを開くことができません。この問題に対処するには、次のオプションを選んでください
:
Return Matching Rows (2)
Allow BIG Results (8).
これらを足した値は 10 (
OPTION=10
) になります。
Access、ODBC および Connector/ODBC の使用に役立つ外部からの記事や情報 :
Access ODBC アプリケーションの最適化
Access や ODBC データソースで使用できるツールのリストに関しては、converters セクションを参照してください。
Microsoft Excel へのデータのインポート、特に数値やデータ、タイム値のインポートで問題がある場合は、ワークシート内のセルにデータがインサートされる時、ソース データのカラム タイプでデータ タイプが定義される Excel のバグが原因だと思われます。その結果、Excel がコンテントを誤って識別し、それが計算に使用される時、表示フォーマットとそのデータの双方に影響を及ぼします。
この問題を解消するには、CONCAT()
関数をクエリに使用してください。CONCAT()
を使うことで、Excel
が値をストリングとして扱うよう仕向け、それによって
Excel
が埋め込まれた情報を解析し、ほぼ正確に識別するようになります。
しかし、このオプションをもってしてもデータによっては、ソースデータに変化はないにもかかわらず、不正確にフォーマットされることがあります。Excel
の Format Cells
オプションを使用して、表示された情報のフォーマットを変えてください。
テーブルをアップデートするには、テーブルに基本キーを定義する必要があります。
ADO を使用した Visual Basic
は、大きな整数を扱うことができません。つまり、SHOW
PROCESSLIST
のようなクエリは正常に作動しません。これを解決するには、ODBC
接続ストリングで OPTION=16384
を使用するか、Connector/ODBC 接続スクリーンで
Change BIGINT columns to INT
オプションを選択します。また、Return
matching rows
オプションを選択するのもよいでしょう。
結果に BIGINT
がある場合、[Microsoft][ODBC Driver Manager]
Driver does not support this parameter
エラーが発生する恐れがあります。Connector/ODBC
接続スクリーンで、Change BIGINT columns to
INT
オプションを選択してみましょう。
ADO API と Connector/ODBC
でコード作成をしている場合、MySQL
サーバでサポートされていないデフォルトのプロパティに注意してください。例えば、CursorLocation
Property
を adUseServer
として使用すると、?1 という結果が
RecordCount Property
に戻されます。正しい値を得るには、このプロパティを下記の
VB コードのように、 adUseClient
に設定する必要があります。
Dim myconn As New ADODB.Connection Dim myrs As New Recordset Dim mySQL As String Dim myrows As Long myconn.Open "DSN=MyODBCsample" mySQL = "SELECT * from user" myrs.Source = mySQL Set myrs.ActiveConnection = myconn myrs.CursorLocation = adUseClient myrs.Open myrows = myrs.RecordCount myrs.Close myconn.Close
もうひとつの回避法としては、類似するクエリに
SELECT COUNT(*)
文を使用し、正しい行カウントを獲得します。
ADO の特定の SQL
文に影響を受けている行の数を検索するには、ADO
execute メソッドに RecordsAffected
プロパティを使用します。execute
メソッドの使用に関する詳しい情報は、http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthcnnexecute.asp
をご覧ください。
詳細は、ActiveX Data Objects(ADO) Frequently Asked Questions を参照。
DSN で Return matching rows
オプションを選択してください。
Connector/ODBC を使用し、ASP を介して MySQL にアクセスする方法は、次の資料を参考にしてください :
ASP に関するよくある質問のリストは、http://support.microsoft.com/default.aspx?scid=/Support/ActiveServer/faq/data/adofaq.asp で閲覧できます。
Visual Basic および ASP に関する参考資料 :
MySQL
BLOB columns and Visual Basic 6 by Mike Hillyer
(<mike@openwin.org>
).
How
to map Visual basic data type to MySQL types by
Mike Hillyer (<mike@openwin.org>
).
Borland Database Engine (BDE) が使用されるすべての Borland アプリケーションでは、互換性を高めるため次の手順に従ってください :
BDE 3.2 以降にアップデートする。
DSN で Don't optimize column
widths
オプションを有効にする。
DSN で Return matching rows
オプションを有効にする。
クエリを開始する際、Active
プロパティか、Open
メソッドを使用することができます。Active
は、SELECT * FROM ...
クエリを自動的に発行することで開始するので注意してください。大規模なテーブルを扱っている場合、これは欠点になりえます。
また以下は、Connector/ODBC の ODBC エントリと
BDE
エントリの両方をセットアップする、役に立ちうる
Delphi コードの一例です。BDE
エントリには、身近な Delphi Super Page
から無料で入手できる BDE Alias Editor
が必要です。( Bryan Brunton
<bryan@flesherfab.com>
に提供を感謝します ) :
fReg:= TRegistry.Create; fReg.OpenKey('\Software\ODBC\ODBC.INI\DocumentsFab', True); fReg.WriteString('Database', 'Documents'); fReg.WriteString('Description', ' '); fReg.WriteString('Driver', 'C:\WINNT\System32\myodbc.dll'); fReg.WriteString('Flag', '1'); fReg.WriteString('Password', ''); fReg.WriteString('Port', ' '); fReg.WriteString('Server', 'xmark'); fReg.WriteString('User', 'winuser'); fReg.OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', True); fReg.WriteString('DocumentsFab', 'MySQL'); fReg.CloseKey; fReg.Free; Memo1.Lines.Add('DATABASE NAME='); Memo1.Lines.Add('USER NAME='); Memo1.Lines.Add('ODBC DSN=DocumentsFab'); Memo1.Lines.Add('OPEN MODE=READ/WRITE'); Memo1.Lines.Add('BATCH COUNT=200'); Memo1.Lines.Add('LANGDRIVER='); Memo1.Lines.Add('MAX ROWS=-1'); Memo1.Lines.Add('SCHEMA CACHE DIR='); Memo1.Lines.Add('SCHEMA CACHE SIZE=8'); Memo1.Lines.Add('SCHEMA CACHE TIME=-1'); Memo1.Lines.Add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT'); Memo1.Lines.Add('SQLQRYMODE='); Memo1.Lines.Add('ENABLE SCHEMA CACHE=FALSE'); Memo1.Lines.Add('ENABLE BCD=FALSE'); Memo1.Lines.Add('ROWSET SIZE=20'); Memo1.Lines.Add('BLOBS TO CACHE=64'); Memo1.Lines.Add('BLOB SIZE=32'); AliasEditor.Add('DocumentsFab','MySQL',Memo1.Lines);
次の情報は ColdFusion の資料より引用したものです。
次の情報を使用して Linux 用の ColdFusion
サーバを構成し、Connector/ODBC を使った
unixODBC
ドライバを MySQL
データソース に使用します。Allaire は、MyODBC
2.50.26 が MySQL 3.22.27 および Linux 用の ColdFusion
に対応することを立証しています
( 最近のバージョンであれば問題なく作動するはずです
) 。http://dev.mysql.com/downloads/connector/odbc/ で
Connector/ODBC
をダウンロードすることができます。
ColdFusion version 4.5.1 があれば、ColdFusion
Administrator を使って MySQL
を加えることができます。しかし、ColdFusion
version 4.5.1
にドライバは含まれていません。MySQL
ドライバが ODBC
データソースのドロップダウン
リストに現れる前に、Connector/ODBC
ドライバを構築し、/opt/coldfusion/lib/libmyodbc.so
にコピーする必要があります。
Contrib ディレクトリは
mydsn-
プログラムを含んでおり、これにより ColdFusion
アプリケーション上の Connector/ODBC
ドライバ用に、DSN レジストリ
ファイルを構築または除去することができることになります。
xxx
.zip
ColdFusion と Connector/ODBC の使用に関する情報とガイドは、次の外部サイトでご覧ください :
Open Office (http://www.openoffice.org) How-to: MySQL + OpenOffice. How-to: OpenOffice + MyODBC + unixODBC.
Sambar Server (http://www.sambarserver.info) How-to: MyODBC + SambarServer + MySQL.
以下のセクションでは、一般的なエラーとその解決法、または代替案を説明します。問題が引き続き起こる場合は、Connector/ODBC メーリングリストを利用してください。項24.1.7.1. 「Connector/ODBC のコミュニティー支援」 参照。
多くの問題は、Connector/ODBC ドライバを最新版に更新することで解決できます。Windows では、最新バージョンの Microsoft Data Access Components (MDAC) をインストールするようにしてください。
Questions
25.1.6.3.1: 私の MyODBC 2.50 アプリケーションは Connector/ODBC 3.51 に対応しますか?
25.1.6.3.2:
Windows XP x64 版、または Windows Server 2003 R2 x64
に Connector/ODBC
をインストールしました。インストールは成功したのですが、Connector/ODBC
ドライバが ODBC Data Source
Administrator
に現われません。
25.1.6.3.3:
ODBC Data Source Administrator
にある
ボタンを接続、または使用すると、エラー
10061 ( サーバー接続不可 ) が発生します。
25.1.6.3.4:
トランザクションを使用すると、次のエラーが報告されます
:Transactions are not enabled
25.1.6.3.5:
クエリをサブミットすると、次のエラーが報告されます
:Cursor not found
25.1.6.3.6:
リンクしたテーブルに記録をインサートまたはアップデートするとき、Access
が記録を #DELETED#
として報告してきます。
25.1.6.3.7: Write Conflicts および Row Location エラーにはどう対処すべきですか?
25.1.6.3.8:
データを Access 97 から MySQL
にエクスポートすると Syntax
Error
が報告されます。
25.1.6.3.9:
データを Microsoft DTS から MySQL
にエクスポートすると Syntax
Error
が報告されます。
25.1.6.3.10: ODBC.NET を Connector/ODBC と使用すると、空のストリング ( 長さ 0 ) を摘出している間、SQL_NO_DATA 例外を出し始めます。
25.1.6.3.11:
Visual Basic と ASP で SELECT COUNT(*)
FROM
を使用すると、エラーが戻ってきます。
tbl_name
25.1.6.3.12:
AppendChunk()
または
GetChunk()
ADO
メソッドを使用すると、Multiple-step
operation generated errors.Check each status
value
エラーが戻ってきます。
25.1.6.3.13:
Linked Table で記録を編集していると、Access
が Another user had modified the record that you
have modified
を戻してきます。
25.1.6.3.14: Unix/Linux 下にある Connector/ODBC ライブラリにアプリケーションを直接リンクしようとすると、アプリケーションがクラッシュします。
25.1.6.3.15:
Microsoft Office
スイートのアプリケーションでは、DATE
または TIMESTAMP
カラムのあるテーブルをアップデートできません。
25.1.6.3.16:
Connector/ODBC 5.x (Beta) を MySQL 4.x
サーバに接続しているとき、1044
Access denied for user 'xxx'@'%' to
database 'information_schema'
エラーが戻ってきます。
Questions and Answers
25.1.6.3.1: 私の MyODBC 2.50 アプリケーションは Connector/ODBC 3.51 に対応しますか?
MyODBC 2.50 を基にしたアプリケーションならば、Connector/ODBC 3.51 以降であれば問題なく作動するはずです。以前のバージョン下で使用していたことのある最新版 Connector/ODBC に不具合がある場合は、バグ レポートを提出してください。項24.1.7.2. 「Connector/ODBC の不具合またはバグのレポート」 参照。
25.1.6.3.2:
Windows XP x64 版、または Windows Server 2003 R2 x64
に Connector/ODBC
をインストールしました。インストールは成功したのですが、Connector/ODBC
ドライバが ODBC Data Source
Administrator
に現われません。
これはバグではありませんが、Windows x64
版の ODBC
ドライバとの作動傾向に関連しています。Windows
x64 版では、Connector/ODBC ドライバが
%SystemRoot%\SysWOW64
フォルダにインストールされています。しかし、Administrative
Tools
または Windows x64 Editions の
Control Panel
で入手できる、デフォルトの ODBC Data
Source Administrator
は
%SystemRoot%\system32
フォルダに入っており、このフォルダでしか
ODBC ドライバを探しません。
Windowx x64
版では、%SystemRoot%\SysWOW64\odbcad32.exe
にある ODBC
管理ツールを使用すれば、インストールされた
Connector/ODBC
ドライバの所在を正確に特定し、それによって
Connector/ODBC DSN を作成することができます。
この問題は、当初 Bug#20301 として報告されました。
25.1.6.3.3:
ODBC Data Source Administrator
にある
ボタンを接続、または使用すると、エラー
10061 ( サーバー接続不可 ) が発生します。
このエラーの原因には、サーバーの不具合、ネットワークの問題、ファイアウォールとポートブロックの問題等、多くの事柄が考えられます。詳細は
項B.1.2.2. 「Can't connect to [local] MySQL server
」
をご覧ください。
25.1.6.3.4:
トランザクションを使用すると、次のエラーが報告されます
:Transactions are not enabled
このエラーは、トランザクションをサポートしない
MySQL
テーブルでトランザクションを使用しているということを示します。トランザクションは
InnoDB
データベース
エンジンを使っているときに、MySQL
でサポートされます。また、MySQL Mysql 5.1
以前のバージョンでは、BDB
エンジンも使用してください。
先に進む前に、次を確認してください :
あなたの MySQL サーバが
トランザクション データベース
エンジンをサポートしているか確認。SHOW
ENGINES
を使って、利用可能なエンジン
タイプのリストを得る。
あなたがアップデートしているテーブルが、トランザクション データベース エンジンを使用するか確認。
DSN で、disable transactions
オプションを有効にしていないことを確認。
25.1.6.3.5:
クエリをサブミットすると、次のエラーが報告されます
:Cursor not found
これはアプリケーションが 古い MyODBC 2.50 バージョンを使用していることが原因で、そのため SQLSetCursorName を介して明確にカーソル名を設定していません。これを解決するには、Connector/ODBC 3.51 バージョンへアップグレードしてください。
25.1.6.3.6:
リンクしたテーブルに記録をインサートまたはアップデートするとき、Access
が記録を #DELETED#
として報告してきます。
インサートされた、またはアップデートされた記録が、アクセスで
#DELETED#
と表示される場合 :
Access 2000 を使用している場合は、最新の
( バージョン 2.6 以降 ) Microsoft MDAC (
Microsoft Data Access Components
)
を http://www.microsoft.com/data/
から入手してインストールしてください。データを
MySQL
にエクスポートすると、テーブルおよびカラムの名前が特定されない、という
Access
のバグは、これで解消されます。このバグに対する他の代替案は、MyODBC
を 2.50.33 以降、そして MySQL を 3.23.x
以降にアップグレードすることで、このふたつがそろえば、この問題を回避することができます。
また、Microsoft Jet 4.0 Service Pack 5 (SP5) を
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q239114
から入手して加えることもお勧めします。それによって、Access
でカラムが #DELETED#
と表示されるという問題の一部は解決します。
MySQL 3.22 を使用している場合は、MDAC パッチを施し、 MyODBC 2.50.32 または 2.50.34 以降を使用することで問題が回避できます。
すべてのバージョンの Access
で、Connector/ODBC Return matching
rows
オプションを有効にしてください。Access
2.0 では、Simulate ODBC 1.0
オプションも加えて有効にしてください。
アップデートを可能にしたいすべてのテーブルに、タイムスタンプを設けてください。
テーブルに基本キーを設けてください。それを行わない場合、新規またはアップデートされた行が
#DELETED#
と表示される場合があります。
DOUBLE
浮動小数点フィールドのみを使用。単精度浮動小数点値と比較する際、Access
に不具合が起きるためです。この徴候では通常、新規またはアップデートされた行が
#DELETED#
と表示される、または行の検出もしくはアップデートができなくなるということがあります。
Connector/ODBC を使って BIGINT
カラムのあるテーブルへリンクしている場合、結果が
#DELETED#
と表示されます。この問題を避けるには
:
データタイプとして、TIMESTAMP
にもうひとつダミー
カラムを設ける。
ODBC DSN Administrator
の接続ダイアログで、Change
BIGINT columns to INT
オプションを選択。
Access からテーブル リンクを削除し、また再作成する。
古い記録はまだ #DELETED#
と表示されるが、新しく加えられた、またはアップデートされた記録は正常に表示される。
25.1.6.3.7: Write Conflicts および Row Location エラーにはどう対処すべきですか?
下記のエラーが表示されたら、DSN
構成ダイアログで Return Matching
Rows
オプションを選択するか、OPTION=2
を接続パラメータとして指定してください
:
Write Conflict. Another user has changed your data. Row cannot be located for updating. Some values may have been changed since it was last read.
25.1.6.3.8:
データを Access 97 から MySQL
にエクスポートすると Syntax
Error
が報告されます。
このエラーは Access 97 と、Connector/ODBC 3.51.02 より前のバージョンに特有のものです。最新バージョンの Connector/ODBC にアップグレードすれば、この問題は解決できます。
25.1.6.3.9:
データを Microsoft DTS から MySQL
にエクスポートすると Syntax
Error
が報告されます。
このエラーは、TEXT
または
VARCHAR
データタイプを使っている MySQL
テーブルでのみ起こります。Connector/ODBC
ドライバを バージョン 3.51.02
以降にアップグレードすれば、この問題は解決されます。
25.1.6.3.10: ODBC.NET を Connector/ODBC と使用すると、空のストリング ( 長さ 0 ) を摘出している間、SQL_NO_DATA 例外を出し始めます。
この問題を解決するパッチが、http://support.microsoft.com/default.aspx?scid=kb;EN-US;q319243 から入手できます。
25.1.6.3.11:
Visual Basic と ASP で SELECT COUNT(*)
FROM
を使用すると、エラーが戻ってきます。
tbl_name
このエラーは、COUNT(*)
発現が
BIGINT
を戻しており、これほど大きな数字になると、ADO
が理解しきれないのが原因です。Change
BIGINT columns to INT
オプション (
オプション値 16384 ) を選択してください。
25.1.6.3.12:
AppendChunk()
または
GetChunk()
ADO
メソッドを使用すると、Multiple-step
operation generated errors.Check each status
value
エラーが戻ってきます。
ADO の GetChunk()
と
AppendChunk()
メソッドは、カーソル ロケーションが
adUseServer
として定義されていると予想通りに作動しません。一方、adUseClient
を使用することで、この問題を乗り越えることができます。
簡潔な例は、次のリンクで見つけることができます。 http://www.dwam.net/iishelp/ado/docs/adomth02_4.htm
25.1.6.3.13:
Linked Table で記録を編集していると、Access
が Another user had modified the record that you
have modified
を戻してきます。
ほとんどの場合、この問題は次のうちからひとつを行うと解決します :
テーブルに基本キーがなければ追加する。
タイムスタンプ カラムがなければ追加する。
倍精度浮動小数フィールドのみを使用。プログラムによっては、単精度浮動小数と比較する際に不具合が発生する。
これらの対策でも解決しない時は、ODBC マネージャーからのログ ファイル ( ODBCADMIN からログを要求する際に得られるログ ) 、そして Connector/ODBC ログ の作成を開始し、問題点の追求に役立ててください。詳しい方法は、項24.1.3.8. 「ODBC トレース ファイルの獲得」 をご覧ください。
25.1.6.3.14: Unix/Linux 下にある Connector/ODBC ライブラリにアプリケーションを直接リンクしようとすると、アプリケーションがクラッシュします。
Unix/Linux 下の Connector/ODBC 3.51 は、アプリケーションへの直接リンクに対応していません。iODBC もしくは unixODBC などのドライバ マネージャーを使用して、ODBC ソースに接続しなければなりません。
25.1.6.3.15:
Microsoft Office
スイートのアプリケーションでは、DATE
または TIMESTAMP
カラムのあるテーブルをアップデートできません。
これは、Connector/ODBC
のよく知られた問題です。フィールドが確実にデフォルト値
( NULL
ではなく、また、ゼロでないデフォルト値。つまり
0000-00-00 00:00:00
のデフォルト値は無効 )
を持っているか確認してください。
25.1.6.3.16:
Connector/ODBC 5.x (Beta) を MySQL 4.x
サーバに接続しているとき、1044
Access denied for user 'xxx'@'%' to
database 'information_schema'
エラーが戻ってきます。
Connector/ODBC 5.x は MySQL 5.0
以降に対応するよう設計されており、データ定義情報を特定する
INFORMATION_SCHEMA
データベースを有効に使用しています。MySQL
4.1
のサポートは最終的なリリースで予定されています。
Connector/ODBC の使用に関するサポートは、多くの場所で受けることができます。Connector/ODBC Mailing List か Connector/ODBC Forum への参加もお勧めします。バグや不具合を MySQL に報告する前に、まずは 項24.1.7.1. 「Connector/ODBC のコミュニティー支援」 でご確認ください。
MySQL AB はメーリング リストを用いて、ユーザ
コミュニティーを後援します。Connector/ODBC
関連の問題については、<myodbc@lists.mysql.com>
メーリングリストから、経験のあるユーザに援助を求めることができます。アーカイブはオンラインで、http://lists.mysql.com/myodbc
にて閲覧できます。
MySQL メーリングリストへの参加、リスト アーカイブの参照については、http://lists.mysql.com/ 、および 項1.6.1. 「MySQL メーリング リスト」 を参照してください。
経験を積んだユーザからのコミュニティー支援は、ODBC Forum でも得ることができます。また、http://forums.mysql.com にあるもうひとつの MySQL Forum でも、他のユーザーとの情報交換が行えます。項1.6.2. 「MySQL フォーラムにおける MySQL コミュニティサポート」 をご覧ください。
Connector/ODBC
で不具合や問題があった場合は、ODBC
Manager
( ODBC ADMIN
からのログを請求した時に受け取るログ ) と
Connector/ODBC からログ
ファイルを作成することをお勧めします。そのプロシージャについては、項24.1.3.8. 「ODBC トレース ファイルの獲得」
で説明されています。
Connector/ODBC トレース
ファイルをチェックし、問題を確認してください。myodbc.log
ファイルにあるストリング
>mysql_real_query
を検索することで、どの文が発行されたかを特定することができるはずです。
また、mysql クライアント
プログラムか、admndemo
からの文の発行も試みてください。エラーが
Connector/ODBC か MySQL
で発生しているものか調べる手助けになります。
問題があると判明した場合は、該当のロウのみ
( 最大 40 行 ) を myodbc
メーリングリストまでお送りください。項1.6.1. 「MySQL メーリング リスト」
をご覧ください。Connector/ODBC または ODBC
ログの全体を送らないようお願いします!
メールには次の情報をご記入いただくと参考になります。
オペレーション システムとバージョン
Connector/ODBC バージョン
ODBC Driver Manager のタイプとバージョン
MySQL サーバのバージョン
Driver Manager からの ODBC トレース
Connector/ODBC ドライバからの Connector/ODBC ログ ファイル
簡単な再現可能サンプル
詳しい詳細を提供していただくのが問題解決には一番ですので、その旨をご理解ください。
また、バグを投稿する前に、http://lists.mysql.com/myodbc で MyODBC メーリングリス アーカイブを確認してください。
問題の原因が分からない場合の最終手段としては、tar
にアーカイブを作成するか、Connector/ODBC
トレース ファイルを含む Zip フォーマット、ODBC
ログ ファイル、そして問題を説明した
README
ファイルを作成します。そしてそれを
ftp://ftp.mysql.com/pub/mysql/upload/
までお送りください。このファイルには MySQL
の技術者のみがアクセスし、データは極秘に扱われます。
問題を実証するプログラムを作成できる場合は、それもアーカイブに加えてください。
他の SQL サーバでは問題なく作動する場合は、まったく同じ SQL 文を実行した ODBC ログ ファイルも加えていただければ、ふたつのシステムでの結果を当社で比較することができます。
詳しい詳細を提供していただくのが問題解決には一番ですので、その旨をご理解ください。
既存のコードや不具合へのパッチ、または問題解決の提案を提供していただける場合は、<myodbc@lists.mysql.com>
までメールでお寄せください。
Connector/ODBC Change History ( Changelog ) は、MySQL のメイン Changelog に収められています。項C.2. 「MySQL Connector/ODBC (MyODBC) Change History」 を参照してください。
Connector/NET は、安全で性能の高い MySQL とのデータの接続性を必要とする .NET アプリケーションを、開発者が容易に作成できるようにするものです。必要な ADO.NET インターフェイスを実装し、ADO.NET 対応ツールを統合します。開発者は、好きな .NET 言語を使用してアプリケーションを構築することができます。Connector/NET は 100% 純粋な C# で書かれ、完全に管理された ADO.NET ドライバです。
Connector/NET は次の機能に完全対応しています :
MySQL 5.0 の機能 ( ストアド プロシージャ等 )
MySQL 4.1 の機能 ( サーバ側のプリペアド ステートメント、Unicode 、共有メモリへのアクセス、等 )
行や 最大 2 ギガバイトのBLOB の送信と受信を行うための大型パケットのサポート
クライアントとサーバ間のデータ ストリームの圧縮を可能にするプロトコル圧縮
TCP/IP ソケット、名前付きパイプ、または共有メモリを使用した、Windows での接続のサポート
TCP/IP ソケット、または Unix ソケットを使用した、Unix での接続のサポート
Novell によって開発された Open Source Mono フレームワークのサポート
完全に管理され、MySQL クライアントを利用しないライブラリ
この資料は Connector.NET のユーザ
ガイドとして書かれており、完全なシンタックスの参照を含みます。シンタックスの情報は
Documentation.chm
ファイルにも、Connector/NET
の配布と共に収められています。
MySQL 5.0 以降のバージョンを使用し、Visual Studio が開発環境となっている場合、MySQL Visual Studio Plugin の利用もご考慮ください。このプラグインは DDEX ( Data Designer Extensibility ) プロバイダとして作動し、Visual Studio でデータ設計ツールを使用して、MySQL データベース内のスキーマやオブジェクトを操作することを可能にします。詳細は 項24.3. 「MySQL Visual Studio プラグイン」 をご覧ください。
現在利用できる Connector/ODBC には 2 バージョンあります :
Connector/NET 1.0 は MySQL 4.0 と MySQL 5.0 の機能をサポートし、ADO.NET ドライバ インターフェイスとの完全な相互性を持っています。
Connector/NET 5.0 は現在テスト段階ですが、MySQL 4.0 、MySQL 4.1 、MySQL 5.0 および MySQL 5.1 の機能に対応します。Connector/NET 5.0 はまた、使用アドバイザやパフォーマンス モニタのサポートを含む、ADO.NET 2.0 インターフェイスとサブクラスへの完全サポートを備えています。
MySQL 製品のバージョン ナンバーは X.X.X というように構成されています。しかし、Windows ツール ( コントロールパネル、プロパティ表示 ) では、バージョン ナンバーが XX.XX.XX. と表示されることがあります。例えば、MySQL の正式なバージョン ナンバーである 5.0.9 が、Windows ツールでは 5.00.09 と表示される場合があります。これは単にナンバーが異なって表示されるだけであり、バージョンそのものに違いはありません。
Connector/NET は、.NET フレームワークをサポートするすべてのプラットフォームで作動します。.NET フレームワークは第一に最新バージョンの Microsoft Windows でサポートされていますが、Open Source Mono フレームワークを介すると Linux にも対応します ( http://www.mono-project.com 参照 ) 。
Connector/NET は http://dev.mysql.com/downloads/connector/net/1.0.html からダウンロードすることができます。
Windows では、インストールはバイナリ インストールか、Connector/NET コンポーネントと共にZip ファイル形式でダウンロードすることによって行うことができます。
インストールの前に、最新バージョンの .NET Framework がインストールされているかなど、使用するシステムが更新されているか確認してください。
Windows に Connector/NET をインストールする場合、インストーラを使用するのが最も容易な方法であり、インストールされたコンポーネントにはソースコード、テストコード、および完全な参考資料が含まれています。
Connector/NET は、すべての Windows オペレーション
システムへのインストールに使用できる、Windows
Installer ( .msi
) インストール
パッケージを使ってインストールされます。MSI
パッケージは
mysql-connector-net-
と名付けられた ZIP
アーカイブに含まれています。この
version
.zipversion
は Connector/NET
のバージョンを指します。
Connector/NET のインストール方法 :
ダウンロードした Zip から摘出した MSI インストーラ ファイルをダブルクリック。
を押してインストールを開始します。実行したいインストールのタイプを選択。
ほとんどの場合には、Typical インストールが適しています。
ボタンをクリックし、ステップ 5 に進んでください。Complete インストールは、利用可能なファイルをすべてインストールします。Complete インストールを行うには、 ボタンをクリックし、ステップ 5 に進みます。インストールするコンポーネントや、インストールのオプションを選ぶなど、インストールをカスタマイズしたい場合は、 ボタンを押してステップ 3 に進みます。Connector/NET インストーラは、Global Assembly Cache (GAC) 内でコネクタを登録します。これにより、Connector/NET コンポーネントをはっきりと参照したものだけでなく、すべてのアプリケーションで Connector/NET コンポーネントを利用することができるようになります。このインストーラはまた、文章やリリース情報への必要なリンクを、Start メニューで作成します。
Custom インストールを選んだ場合、コア インターフェイス コンポーネント、解説文章 ( CHM ファイル ) サンプル、例、そしてソースコードを含む、インストールしたい各コンポーネントを選ぶことができます。アイテムとその設置レベルを選択し、
をクリックしてインストールを続行します。Connector/NET 1.0.8 以下と Connector 5.0.4 以下では、インストーラは .NET Framework の 1.x と 2.x 両方のためにバイナリをインストールしようとします。フレームワークのバージョンをひとつだけインストールしている場合、コネクタのインストールが失敗する可能性があります。もしこれで失敗した場合は、Custom インストールの手順からインストールされるフレームワークのバージョンを選ぶことができます。
インストールの最終確認が行われます。
をクリックして、ファイルをマシンへコピーおよびインストールします。インストールが完了したら、
をクリックしてインストールを終了します。
特別に指定をしない限り、Connector/NET は
C:\Program Files\MySQL\MySQL Connector Net
にインストールされます。X.X.X
X.X.X
はインストールした Connector/NET
のバージョンの番号になります。新たなインストールが、既存の
Connector/NET
のバージョンを書き換えることはありません。
インストールのタイプによっては、インストールされたコンポーネントには、次のうちの一部か、またはすべてが含まれることになります。
bin
- .NET
環境の各バージョンのための Connector/NET
MySQL ライブラリ。
docs
- Connector/NET 資料の CHM
を含む。
samples
- Connector/NET
コンポーネントを使用するサンプル
コードやアプリケーション。
src
- Connector/NET
コンポーネントのためのソース コード。
msiexec
ツールに
/quiet
or /q
コマンドライン
オプションを使用し、Connector/NET
パッケージをユーザへの告知なしで自動的に (
デフォルトのオプションを使用して )
インストールすることもできます。このオプションを使用すると、オプションを選ぶことはできなくなり、プロンプトやメッセージ、またはダイアログ
ボックスは表示されません。
C:\> msiexec /package conector-net.msi /quiet
オプションを選択するダイアログ
ボックスは表示されないまま、自動インストール中に進行状況バーを表示するには、/passive
オプションを使用します。
インストーラの起動に問題がある場合は、インストーラなしで
.zip
ファイルをダウンロードすることもできます。このファイルは
mysql-connector-net-
と呼ばれるものです。ダウンロードを行ったら、ファイルを希望のロケーションへ摘出することができます。
version
-noinstall.zip
この .zip ファイルは次のディレクトリを含みます :
bin
- .NET
環境の各バージョンのための Connector/NET
MySQL ライブラリ。
doc
- Connector/NET 資料の CHM
を含む。
Samples
- Connector/NET
コンポーネントを使用するサンプル
コードやアプリケーション。
mysqlclient
- Connector/NET
コンポーネントのためのソース コード。
testsuite
- Connector/NET
コンポーネントの動作を確認するために使用されるテスト
スイート。
Unix インストール システムに Connector/NET コンポーネントを設置ためのインストーラは入手不可能です。しかし、インストールは非常に簡単に行うことができます。インストールの前に、Mono プロジェクトのインストールが実行可能か確認してください。
Mono プロジェクトを通じて MySQL サーバに接続するようにしたい Unix 環境では、Connector/NET コンポーネントのみをインストールするよう注意してください。Java や Perl など、別の環境で展開または開発する場合には、より適切な接続コンポーネントを使用してください。詳細は 章?24. MySQL コネクタ 、または 章?23. APIとライブラリー をご覧ください。
Unix/Mono に Connector/NET をインストールするには :
mysql-connector-net-
をダウンロードして、コンテンツを摘出。
version
-noinstall.zip
MySql.Data.dll
ファイルを、Mono
プロジェクトのインストール
フォルダにコピーする。
Connector/NET
コンポーネントを、gacutil
コマンドで Global Assembly Cache に登録する :
shell> gacutil /i MySql.Data.dll
インストールが完了すれば、Connector/NET
コンポーネントとコンパイルされたアプリケーションは以後変更する必要はありません。しかし、アプリケーションをコンパイルする際、-r:MySqlData.dll
コマンドライン オプションを使用して
Connector/NET
コンポーネントを確実に含むようにしてください。
当社の新しいコードのテストにご興味がおありの場合は、このセクションをお読みください。単にシステムでの MySQL Connector/ODBC の利用をご希望の場合は、標準のリリース配布物をお使いください。
Connector/NET ソースツリーにアクセスするには、Subversion をインストールする必要があります。Subversion は http://subversion.tigris.org/ から無料で入手することができます。
最新の開発ソースツリーは、http://dev.mysql.com/tech-resources/sources.html の公開 Subversion ツリーから得られます。
Connector/NET ソースを点検するには、Connector/NET ツリーのコピーを保存したいディレクトリに移動し、次のコマンドを使用します :
shell> svn co http://svn.mysql.com/svnpublic/connector-net
Visual Studio プロジェクトは、Connector/NET の構築に使用できるソースに含まれています。
Connector/NET は、データベースへの接続、クエリとステートメントの実行、クエリの結果の管理に使用される複数のクラスで構成されています。
以下は Connector/NET の代表的なクラスです :
MySqlCommand
:SQL 文を構成し、MySQL
データベースに対して実行する。
MySqlCommandBuilder
:MySQL
データベースに関連付けられた DataSet
の変更を調整するための単一テーブル
コマンドを自動的に生成する。
MySqlConnection
:MySQL サーバ
データベースへのオープン接続を表す。
MySqlDataAdapter
:データセットを満たし、MySQL
データベースの更新に使用されるデータ
コマンドのセットとデータベース接続を表します。
MySqlDataReader
:MySQL
データベースの行の転送専用ストリーム読み取りの方法を提供。
MySqlException
:MySQL
がエラーを返す時に投入される例外。
MySqlHelper
:プロバイダとの作業をより簡単にするヘルパー
クラス。
MySqlTransaction
:MySQL
データベース内で作成される SQL
トランザクションを表示。
このセクションでは、上記の各クラスの基本情報と例を記載します。さらに詳しいリファレンス ガイドは、項24.2. 「MySQL Connector/NET」 をご覧ください。
ExecuteReader
の使用Prepare
の使用SQL 文を構成し、MySQL データベースに対して実行します。このクラスを継承することはできません。
MySqlCommand
は MySQL
データベースでコマンドを実行する次の手段を備えています
:
アイテム | 概要 |
ExecuteReader | 行を返すコマンドを実行。 |
ExecuteNonQuery | SQL INSERT 、DELETE 、および UPDATE ステートメントなどのコマンドを実行。 |
ExecuteScalar | データベースから単一値 ( 例えば集約値 ) を取り出す。 |
CommandText
プロパティをリセットし、MySqlCommand
オブジェクトを再使用することができます。しかし、新しい、または以前のコマンドを実行する前に、MySqlDataReader
を閉じる必要があります。
MySqlException
が MySqlCommand
を実行するメソッドで生成される場合、MySqlConnection
は開いたままになります。この接続を閉じるのはプログラマの采配になります。
プロバイダの以前のバージョンでは、SQL のパラメータをマークするのに '@' シンボルが使用されました。これは MySQL ユーザ変数に適合しないため、現在のプロバイダでは '?' シンボルを使用して SQL のパラメータを指定しています。以前のコードをサポートするには、'old syntax=yes' を接続ストリングで設定することができます。そうする場合、SQL で使用する予定のパラメータの定義に失敗しても、例外は投入されませんのでご注意ください。
例
以下は、MySqlCommand
と MySqlConnection
を作成する例です。MySqlConnection
が開かれ、MySqlCommand
の
Connection
として設定されます。この例はその後
ExecuteNonQuery
を呼び出し、接続を閉じます。これを完遂するため、ExecuteNonQuery
は SQL INSERT 文である接続ストリングとクエリ
ストリングに渡されます。
Visual Basic 例 :
Public Sub InsertRow(myConnectionString As String) " If the connection string is null, use a default. If myConnectionString = "" Then myConnectionString = "Database=Test;Data Source=localhost;User Id=username;Password=pass" End If Dim myConnection As New MySqlConnection(myConnectionString) Dim myInsertQuery As String = "INSERT INTO Orders (id, customerId, amount) Values(1001, 23, 30.66)" Dim myCommand As New MySqlCommand(myInsertQuery) myCommand.Connection = myConnection myConnection.Open() myCommand.ExecuteNonQuery() myCommand.Connection.Close() End Sub
C# 例 :
public void InsertRow(string myConnectionString) { // If the connection string is null, use a default. if(myConnectionString == "") { myConnectionString = "Database=Test;Data Source=localhost;User Id=username;Password=pass"; } MySqlConnection myConnection = new MySqlConnection(myConnectionString); string myInsertQuery = "INSERT INTO Orders (id, customerId, amount) Values(1001, 23, 30.66)"; MySqlCommand myCommand = new MySqlCommand(myInsertQuery); myCommand.Connection = myConnection; myConnection.Open(); myCommand.ExecuteNonQuery(); myCommand.Connection.Close(); }
MySqlCommand のオーバーロード メソッド
MySqlCommand クラスの新規インスタンスを初期化します。
例
以下の例は MySqlCommand を作成し、そのプロパティの一部を設定します。
この例は、MySqlCommand
のオーバーロードされたコンストラクタのバージョンの使用法のひとつを挙げています。利用可能な他の例に関しては、各オーバーロードのトピックをご覧ください。
Visual Basic 例 :
Public Sub CreateMySqlCommand() Dim myConnection As New MySqlConnection _ ("Persist Security Info=False;database=test;server=myServer") myConnection.Open() Dim myTrans As MySqlTransaction = myConnection.BeginTransaction() Dim mySelectQuery As String = "SELECT * FROM MyTable" Dim myCommand As New MySqlCommand(mySelectQuery, myConnection, myTrans) myCommand.CommandTimeout = 20 End Sub
C# 例 :
public void CreateMySqlCommand() { MySqlConnection myConnection = new MySqlConnection("Persist Security Info=False; database=test;server=myServer"); myConnection.Open(); MySqlTransaction myTrans = myConnection.BeginTransaction(); string mySelectQuery = "SELECT * FROM myTable"; MySqlCommand myCommand = new MySqlCommand(mySelectQuery, myConnection,myTrans); myCommand.CommandTimeout = 20; }
C++ 例 :
public: void CreateMySqlCommand() { MySqlConnection* myConnection = new MySqlConnection(S"Persist Security Info=False; database=test;server=myServer"); myConnection->Open(); MySqlTransaction* myTrans = myConnection->BeginTransaction(); String* mySelectQuery = S"SELECT * FROM myTable"; MySqlCommand* myCommand = new MySqlCommand(mySelectQuery, myConnection, myTrans); myCommand->CommandTimeout = 20; };
MySqlCommand クラスの新規インスタンスを初期化します。
ベース
コンストラクタは、すべてのフィールドをそのデフォルト値に初期化します。愚痴のテーブルは、MySqlCommand
のインスタンスの初期プロパティ値です。
プロパティ | 初期値 |
CommandText | empty string ("") |
CommandTimeout | 0 |
CommandType | CommandType.Text |
Connection | Null |
これらのプロパティの値は、プロパティへの別の呼び出しを通して変更することができます。
例
以下の例は MySqlCommand
を作成し、そのプロパティの一部を設定します。
Visual Basic 例 :
Public Sub CreateMySqlCommand() Dim myCommand As New MySqlCommand() myCommand.CommandType = CommandType.Text End Sub
C# 例 :
public void CreateMySqlCommand() { MySqlCommand myCommand = new MySqlCommand(); myCommand.CommandType = CommandType.Text; }
クエリのテキストで MySqlCommand
クラスの新規インスタンスを初期化します。
パラメータ : クエリのテキスト。
MySqlCommand
のインスタンスが作成される際、次の赤/白のプロパティが初期値に設定されます。
プロパティ | 初期値 |
CommandText | cmdText |
CommandTimeout | 0 |
CommandType | CommandType.Text |
Connection | Null |
これらのプロパティの値は、プロパティへの別の呼び出しを通して変更することができます。
例
以下の例は MySqlCommand
を作成し、そのプロパティの一部を設定します。
Visual Basic 例 :
Public Sub CreateMySqlCommand() Dim sql as String = "SELECT * FROM mytable" Dim myCommand As New MySqlCommand(sql) myCommand.CommandType = CommandType.Text End Sub
C# 例 :
public void CreateMySqlCommand() { string sql = "SELECT * FROM mytable"; MySqlCommand myCommand = new MySqlCommand(sql); myCommand.CommandType = CommandType.Text; }
クエリのテキストと MySqlConnection
で MySqlCommand
クラスの新規インスタンスを初期化します。
パラメータ : クエリのテキスト。
パラメータ :SQL
サーバのインターフェイスへの接続を表す
MySqlConnection
。
MySqlCommand
のインスタンスが作成される際、次の赤/白のプロパティが初期値に設定されます。
プロパティ | 初期値 |
CommandText | cmdText |
CommandTimeout | 0 |
CommandType | CommandType.Text |
Connection | connection |
これらのプロパティの値は、プロパティへの別の呼び出しを通して変更することができます。
例
以下の例は MySqlCommand
を作成し、そのプロパティの一部を設定します。
Visual Basic 例 :
Public Sub CreateMySqlCommand() Dim conn as new MySqlConnection("server=myServer") Dim sql as String = "SELECT * FROM mytable" Dim myCommand As New MySqlCommand(sql, conn) myCommand.CommandType = CommandType.Text End Sub
C# 例 :
public void CreateMySqlCommand() { MySqlConnection conn = new MySqlConnection("server=myserver") string sql = "SELECT * FROM mytable"; MySqlCommand myCommand = new MySqlCommand(sql, conn); myCommand.CommandType = CommandType.Text; }
クエリのテキスト、MySqlConnection
、および MySqlTransaction
で
MySqlCommand
クラスの新規インスタンスを初期化します。
パラメータ : クエリのテキスト。
パラメータ :SQL
サーバのインターフェイスへの接続を表す
MySqlConnection
。
パラメータ
:MySqlCommand
が実行する
MySqlTransaction
。
MySqlCommand
のインスタンスが作成される際、次の赤/白のプロパティが初期値に設定されます。
プロパティ | 初期値 |
CommandText | cmdText |
CommandTimeout | 0 |
CommandType | CommandType.Text |
Connection | connection |
これらのプロパティの値は、プロパティへの別の呼び出しを通して変更することができます。
例
以下の例は MySqlCommand
を作成し、そのプロパティの一部を設定します。
Visual Basic 例 :
Public Sub CreateMySqlCommand() Dim conn as new MySqlConnection("server=myServer") conn.Open(); Dim txn as MySqlTransaction = conn.BeginTransaction() Dim sql as String = "SELECT * FROM mytable" Dim myCommand As New MySqlCommand(sql, conn, txn) myCommand.CommandType = CommandType.Text End Sub
C# 例 :
public void CreateMySqlCommand() { MySqlConnection conn = new MySqlConnection("server=myserver") conn.Open(); MySqlTransaction txn = conn.BeginTransaction(); string sql = "SELECT * FROM mytable"; MySqlCommand myCommand = new MySqlCommand(sql, conn, txn); myCommand.CommandType = CommandType.Text; }
接続に対して SQL 文を実行し、影響される行の数を返すします。
戻り値 : 影響を受ける行の数
ExecuteNonQuery を使用して、すべてのタイプのデータベース操作を行うことができますが、返された結果セットは利用することができません。ストアド プロシージャの呼び出しに使用された出力パラメータはデータを移植され、実行が完了した後で引き出すことができます。UPDATE 、INSERT 、および DELETE 文では、戻り値はそのコマンドに影響された行の数になります。その他のタイプのステートメントではすべて、戻り値は -1 です。
例
以下の例は MySqlCommand を作成し、ExecuteNonQuery を使用してそれを実行します。この例は SQL 文 ( UPDATE 、INSERT 、または DELETE など ) であるストリングや、データソースへの接続に使用するストリングに渡されます。
Visual Basic 例 :
Public Sub CreateMySqlCommand(myExecuteQuery As String, myConnection As MySqlConnection) Dim myCommand As New MySqlCommand(myExecuteQuery, myConnection) myCommand.Connection.Open() myCommand.ExecuteNonQuery() myConnection.Close() End Sub
C# 例 :
public void CreateMySqlCommand(string myExecuteQuery, MySqlConnection myConnection) { MySqlCommand myCommand = new MySqlCommand(myExecuteQuery, myConnection); myCommand.Connection.Open(); myCommand.ExecuteNonQuery(); myConnection.Close(); }
CommandText
を
MySqlConnection
Connection
に送り、CommandBehavior
値のひとつを使用して
MySqlDataReader
を構築します。
パラメータ
:CommandBehavior
値のひとつ。
CommandType
プロパティが
StoredProcedure
に設定される際、CommandText
プロパティをストアド
プロシージャ名に設定してください。ExecuteReader
を呼び出す時に、コマンドがこのストアド
プロシージャを実行します。
MySqlDataReader
は、大きなバイナリ値の効率的な読み取りを可能にする特殊なモードをサポートしています。詳細は、CommandBehavior
の SequentialAccess
設定を参照してください。
MySqlDataReader
が使用されている間、関連のある
MySqlConnection
は
MySqlDataReader
へ忙しく供給します。その状態では、MySqlConnection
で閉じる以外の他の操作を行うことはできません。MySqlDataReader
の MySqlDataReader.Close
メソッドが呼び出されるまでは、その状態が続きます。MySqlDataReader
が CloseConnection
に設定される
CommandBehavior
で作成される場合、MySqlDataReader
を閉じると、接続が自動的に切断されます。
ExecuteReader
を
SingleRow
挙動で呼び出す時、SQL
で limit
句を使用すると、すべての行 (
提示された限界まで )
がクライアントに引き出されることになります。MySqlDataReader.Read
メソッドは、最初の行の後でもまだ false
を戻しますが、データの全行をクライアントに入れると作業に影響が出ます。limit
句が必要でない場合は、避けたほうがよいでしょう。
戻り値 :
MySqlDataReader
オブジェクト。
CommandText
を
MySqlConnection
Connection
に送り、MySqlDataReader
を構築します。
戻り値 :
MySqlDataReader
オブジェクト。
CommandType
プロパティが
StoredProcedure
に設定される際、CommandText
プロパティをストアド
プロシージャ名に設定してください。ExecuteReader
を呼び出す時に、コマンドがこのストアド
プロシージャを実行します。
MySqlDataReader
が使用されている間、関連のある
MySqlConnection
は
MySqlDataReader
へ忙しく供給します。その状態では、MySqlConnection
で閉じる以外の他の操作を行うことはできません。MySqlDataReader
の MySqlDataReader.Close
メソッドが呼び出されるまでは、その状態が続きます。
例
次の例は MySqlCommand
を作成し、SQL SELECT
文であるストリングと、データソースへの接続に使用するストリングを渡すことによってそれを実行します。
Visual Basic 例 :
Public Sub CreateMySqlDataReader(mySelectQuery As String, myConnection As MySqlConnection) Dim myCommand As New MySqlCommand(mySelectQuery, myConnection) myConnection.Open() Dim myReader As MySqlDataReader myReader = myCommand.ExecuteReader() Try While myReader.Read() Console.WriteLine(myReader.GetString(0)) End While Finally myReader.Close myConnection.Close End Try End Sub
C# 例 :
public void CreateMySqlDataReader(string mySelectQuery, MySqlConnection myConnection) { MySqlCommand myCommand = new MySqlCommand(mySelectQuery, myConnection); myConnection.Open(); MySqlDataReader myReader; myReader = myCommand.ExecuteReader(); try { while(myReader.Read()) { Console.WriteLine(myReader.GetString(0)); } } finally { myReader.Close(); myConnection.Close(); } }
MySQL Server のインスタンスで、コマンドの準備されたバージョンを作成します。
プリペアド ステートメントは、MySQL バージョン 4.1 以降でのみサポートされています。それ以前のバージョンの MySQL に接続している間にプリペアド ステートメントを呼び出すことは可能ですが、そのステートメントは準備されていないステートメントと同様に実行されます。
例
次の例では、Prepare
メソッドの使用法を示します。
Visual Basic 例 :
public sub PrepareExample() Dim cmd as New MySqlCommand("INSERT INTO mytable VALUES (?val)", myConnection) cmd.Parameters.Add( "?val", 10 ) cmd.Prepare() cmd.ExecuteNonQuery() cmd.Parameters(0).Value = 20 cmd.ExecuteNonQuery() end sub
C# 例 :
private void PrepareExample() { MySqlCommand cmd = new MySqlCommand("INSERT INTO mytable VALUES (?val)", myConnection); cmd.Parameters.Add( "?val", 10 ); cmd.Prepare(); cmd.ExecuteNonQuery(); cmd.Parameters[0].Value = 20; cmd.ExecuteNonQuery(); }
クエリを実行し、クエリが戻した結果セットの第一行の最初のカラムを返します。余分なカラムや行は無視されます。
戻り値 : 結果セットの第一行の最初のカラム、または結果セットが空な場合はヌルのリファレンス
ExecuteScalar
メソッドを使用して、データベースから単一値
( 例えば集約値 ) を取り出します。これでは
ExecuteReader
メソッドよりも少ないコードを使用し、MySqlDataReader
が戻したデータを使って、単一値の生成に必要な操作を行います。
典型的な ExecuteScalar
クエリは、次の C#
例のようにフォーマットすることができます :
C# 例 :
cmd.CommandText = "select count(*) from region"; Int32 count = (int32) cmd.ExecuteScalar();
例
以下の例は MySqlCommand
を作成し、ExecuteScalar
を使用してそれを実行します。この例は、集約結果を返す
SQL
文、そしてデータソースへの接続に使用するストリングに渡されます。
Visual Basic 例 :
Public Sub CreateMySqlCommand(myScalarQuery As String, myConnection As MySqlConnection) Dim myCommand As New MySqlCommand(myScalarQuery, myConnection) myCommand.Connection.Open() myCommand.ExecuteScalar() myConnection.Close() End Sub
C# 例 :
public void CreateMySqlCommand(string myScalarQuery, MySqlConnection myConnection) { MySqlCommand myCommand = new MySqlCommand(myScalarQuery, myConnection); myCommand.Connection.Open(); myCommand.ExecuteScalar(); myConnection.Close(); }
C++ 例 :
public: void CreateMySqlCommand(String* myScalarQuery, MySqlConnection* myConnection) { MySqlCommand* myCommand = new MySqlCommand(myScalarQuery, myConnection); myCommand->Connection->Open(); myCommand->ExecuteScalar(); myConnection->Close(); }
SQL 文を入手または設定し、データソースで実行します。
値 :実行する SQL 文またはストアド プロシージャ。デフォルトは空のストリング。
CommandType
プロパティが
StoredProcedure
に設定される際、CommandText
プロパティをストアド
プロシージャ名に設定してください。ストアド
プロシージャ名に特殊な文字が含まれていると、ユーザはエスケープ文字構文を使用しなければならない場合があります。Execute
メソッドのひとつを呼び出す時に、コマンドがこのストアド
プロシージャを実行します。
例
以下の例は MySqlCommand
を作成し、そのプロパティの一部を設定します。
Visual Basic 例 :
Public Sub CreateMySqlCommand() Dim myCommand As New MySqlCommand() myCommand.CommandText = "SELECT * FROM Mytable ORDER BY id" myCommand.CommandType = CommandType.Text End Sub
C# 例 :
public void CreateMySqlCommand() { MySqlCommand myCommand = new MySqlCommand(); myCommand.CommandText = "SELECT * FROM mytable ORDER BY id"; myCommand.CommandType = CommandType.Text; }
コマンドの実行を停止し、エラーを生成するまでの待ち時間を取得または設定します。
値 :コマンド実行までの待ち時間 ( 秒単位 ) 。デフォルトは 0 秒。
MySQL は現在、保留または実行中の作業をキャンセルする方法をサポートしていません。MySQL サーバに対して発行するすべてのコマンドは、完了するか例外が発生するまで実行します。
CommandText
プロパティの解説方法を示す値を取得または設定します。
値
:System.Data.CommandType
値のひとつ。デフォルト設定では、Text
。
CommandType
プロパティを
StoredProcedure
に設定する際、CommandText
プロパティをストアド
プロシージャ名に設定してください。Execute
メソッドのひとつを呼び出す時に、コマンドがこのストアド
プロシージャを実行します。
例
以下の例は MySqlCommand
を作成し、そのプロパティの一部を設定します。
Visual Basic 例 :
Public Sub CreateMySqlCommand() Dim myCommand As New MySqlCommand() myCommand.CommandType = CommandType.Text End Sub
C# 例 :
public void CreateMySqlCommand() { MySqlCommand myCommand = new MySqlCommand(); myCommand.CommandType = CommandType.Text; }
MySqlCommand
のこの具体例に使用される
MySqlConnection
を取得または設定します。
値
:データソースへの接続。デフォルト値はヌル
リファレンス ( Visual Basic の
Nothing
) 。
トランザクションが進行中に
Connection
を設定し、かつ
Transaction
プロパティがヌルでない場合、InvalidOperationException
が生成されます。Transaction
プロパティがヌルでなく、トランザクションがすでにコミットまたはロールバックされている場合は、Transaction
はヌルに設定されます。
例
以下の例は MySqlCommand
を作成し、そのプロパティの一部を設定します。
Visual Basic 例 :
Public Sub CreateMySqlCommand() Dim mySelectQuery As String = "SELECT * FROM mytable ORDER BY id" Dim myConnectString As String = "Persist Security Info=False;database=test;server=myServer" Dim myCommand As New MySqlCommand(mySelectQuery) myCommand.Connection = New MySqlConnection(myConnectString) myCommand.CommandType = CommandType.Text End Sub
C# 例 :
public void CreateMySqlCommand() { string mySelectQuery = "SELECT * FROM mytable ORDER BY id"; string myConnectString = "Persist Security Info=False;database=test;server=myServer"; MySqlCommand myCommand = new MySqlCommand(mySelectQuery); myCommand.Connection = new MySqlConnection(myConnectString); myCommand.CommandType = CommandType.Text; }
MySqlParameterCollection
を取得します。
値 :SQL 文もしくはストアド プロシージャのパラメータ。デフォルトは空のコレクション。
Connector/Net は名前なしのパラメータをサポートしていません。コレクションに加えられるパラメータにはすべて関連する名前が必要です。
例
次の例は MySqlCommand
を作成し、そのパラメータを表示します。これを完遂するため、メソッドに
MySqlConnection
、SQL
SELECT
文であるクエリ
ストリング、そして MySqlParameter
オブジェクトの配列が渡されます。
Visual Basic 例 :
Public Sub CreateMySqlCommand(myConnection As MySqlConnection, _ mySelectQuery As String, myParamArray() As MySqlParameter) Dim myCommand As New MySqlCommand(mySelectQuery, myConnection) myCommand.CommandText = "SELECT id, name FROM mytable WHERE age=?age" myCommand.UpdatedRowSource = UpdateRowSource.Both myCommand.Parameters.Add(myParamArray) Dim j As Integer For j = 0 To myCommand.Parameters.Count - 1 myCommand.Parameters.Add(myParamArray(j)) Next j Dim myMessage As String = "" Dim i As Integer For i = 0 To myCommand.Parameters.Count - 1 myMessage += myCommand.Parameters(i).ToString() & ControlChars.Cr Next i Console.WriteLine(myMessage) End Sub
C# 例 :
public void CreateMySqlCommand(MySqlConnection myConnection, string mySelectQuery, MySqlParameter[] myParamArray) { MySqlCommand myCommand = new MySqlCommand(mySelectQuery, myConnection); myCommand.CommandText = "SELECT id, name FROM mytable WHERE age=?age"; myCommand.Parameters.Add(myParamArray); for (int j=0; j<myParamArray.Length; j++) { myCommand.Parameters.Add(myParamArray[j]) ; } string myMessage = ""; for (int i = 0; i < myCommand.Parameters.Count; i++) { myMessage += myCommand.Parameters[i].ToString() + "\n"; } MessageBox.Show(myMessage); }
MySqlCommand
が実行する中で
MySqlTransaction
を取得または設定します。
値
:MySqlTransaction
。デフォルト値はヌル リファレンス ( Visual
Basic の Nothing
) 。
すでに特定の値が設定されている場合、コマンドの実行が進行中の場合は、Transaction
プロパティを設定することはできません。トランザクションのプロパティを
MySqlCommand
オブジェクトと同じ
MySqlConnection
に接続されていない
MySqlTransaction
に設定すると、次にステートメントの実行を試みる際に例外が投入されるでしょう。
System.Data.Common.DbDataAdapter
の
System.Data.Common.DbDataAdapter.Update
メソッドで使用される時に、コマンドの結果がどのように
DataRow
に適用されるかを取得または設定します。
値
:UpdateRowSource
値のひとつ。
デフォルトの
System.Data.UpdateRowSource
値は、コマンドが (
MySqlCommandBuilder
のケースのように) 自動的に生成されない限り
Both
になります。コマンドが自動的に生成される場合のデフォルト値は
None
になります。
MySQL データベースに関連付けられた DataSet の変更を調整するための単一テーブル コマンドを自動的に生成します。このクラスを継承することはできません。
MySqlDataAdapter
は、MySQL
のインスタンスに関連付けられた
System.Data.DataSet
DataSet
への変更を調整するのに必要な SQL
文を自動的に生成することはありません。しかし、MySqlDataAdapter
の
MySqlDataAdapter.SelectCommand
SelectCommand
を設定すれば、単一テーブルのアップデートのための
SQL 文を自動的に生成する
MySqlCommandBuilder
オブジェクトを作成することができます。そうすると、設定していない追加の
SQL 文は、MySqlCommandBuilder
によって生成されます。
MySqlCommandBuilder
は、DataAdapter
プロパティを設定すると、自らを
MySqlDataAdapter.OnRowUpdating
RowUpdating
イベントのリスナとして登録します。一度にはひとつの
MySqlDataAdapter
または
MySqlCommandBuilder
オブジェクトだけをお互いに関連付けることが可能です。
INSERT 、UPDATE 、もしくは DELETE
文を生成するため、MySqlCommandBuilder
は SelectCommand
プロパティを使用して必要なメタデータのセットを自動的に引き出します。メタデータが引き出された後に
( 例えば最初のアップデートの後 )
SelectCommand
を変更する場合、RefreshSchema
メソッドを呼び出してメタデータをアップデートしてください。
また、SelectCommand
はプライマリ
キーか一意列を少なくともひとつは戻さなければなりません。もしひとつもない場合は、InvalidOperation
例外が生成され、コマンドは生成されません。
MySqlCommandBuilder
は、SelectCommand
が参照する
MySqlCommand.Connection
Connection
、MySqlCommand.CommandTimeout
CommandTimeout
、そして
MySqlCommand.Transaction
Transaction
プロパティも使用します。これらのプロパティのどれかが改変されている場合、または
SelectCommand
そのものが取り替えられている場合、ユーザは
RefreshSchema
を呼び出してください。それを行わない場合、MySqlDataAdapter.InsertCommand
InsertCommand
、MySqlDataAdapter.UpdateCommand
UpdateCommand
、そして
MySqlDataAdapter.DeleteCommand
DeleteCommand
プロパティはそれぞれ前値を保持します。
Dispose
を呼び出すと、MySqlCommandBuilder
は
MySqlDataAdapter
との関連を絶たれ、生成されたコマンドは使用されなくなります。
MySqlCommandBuilder
を MySql 4.0
システムで使用する際は十分な注意が必要です。MySQL
4.0
での使用では、データベースとスキーマの情報はクエリ用にコネクタに提供されません。つまり、ふたつ以上の異なるデータベースにあるふたつの同じ名前のテーブルからカラムを引き出すクエリが、例外の投入の原因になることなく正常に作動するということになります。より危険なのは、データベース
X を参照しつつもデータベース Y
で実行されるステートメントを選択し、そしてその両方のデータベースが似通ったレイアウトのテーブルを持つという状況です。このような状況は不要な変更や削除を引き起こす場合があります。この注意は
MySQL バージョン 4.1
以降には当てはまりません。
例
次の例は MySqlDataAdapter
および
MySqlConnection
に沿って
MySqlCommand
を使用し、データソースから行を選択します。この例は、初期化された
System.Data.DataSet
、接続ストリング、SQL SELECT
文であるクエリ
ストリング、そしてデータベース
テーブル名であるストリングに渡されます。そしてこの例は
MySqlCommandBuilder
を作成します。
Visual Basic 例 :
Public Shared Function SelectRows(myConnection As String, mySelectQuery As String, myTableName As String) As DataSet Dim myConn As New MySqlConnection(myConnection) Dim myDataAdapter As New MySqlDataAdapter() myDataAdapter.SelectCommand = New MySqlCommand(mySelectQuery, myConn) Dim cb As SqlCommandBuilder = New MySqlCommandBuilder(myDataAdapter) myConn.Open() Dim ds As DataSet = New DataSet myDataAdapter.Fill(ds, myTableName) ' Code to modify data in DataSet here ' Without the MySqlCommandBuilder this line would fail. myDataAdapter.Update(ds, myTableName) myConn.Close() End Function 'SelectRows
C# 例 :
public static DataSet SelectRows(string myConnection, string mySelectQuery, string myTableName) { MySqlConnection myConn = new MySqlConnection(myConnection); MySqlDataAdapter myDataAdapter = new MySqlDataAdapter(); myDataAdapter.SelectCommand = new MySqlCommand(mySelectQuery, myConn); MySqlCommandBuilder cb = new MySqlCommandBuilder(myDataAdapter); myConn.Open(); DataSet ds = new DataSet(); myDataAdapter.Fill(ds, myTableName); //code to modify data in DataSet here //Without the MySqlCommandBuilder this line would fail myDataAdapter.Update(ds, myTableName); myConn.Close(); return ds; }
MySqlCommandBuilder
クラスの新規インスタンスを初期化し、last one
wins プロパティを設定します。
パラメータ :変更保護コードの生成には False 。それ以外は True 。
lastOneWins
パラメータは、基礎となるデータの変更を確認する生成された
DELETE および UPDATE コマンドに、SQL
コードが含まれるべきかを指示します。lastOneWins
が true
である場合はこのコードは含まれず、データ
レコードはマルチユーザまたはマルチスレッドの環境で上書きされる場合があります。lastOneWins
を false
に設定するとこの確認が含まれ、知らない間に基礎になるデータ
レコードが変更される場合に同時実行例外が投入される原因になります。
関連する MySqlDataAdapter
オブジェクトで MySqlCommandBuilder
クラスの新規インスタンスを初期化します。
パラメータ :使用する
MySqlDataAdapter
。
MySqlCommandBuilder
は自らを、このプロパティで指定されたMySqlDataAdapter
によって生成された
MySqlDataAdapter.RowUpdating
イベントのリスナとして登録します。
新規インスタンス
MySqlCommandBuilder
を作成する際、この
MySqlDataAdapter
に関連する既存の
MySqlCommandBuilder
がリリースされます。
関連する MySqlDataAdapter
オブジェクトで MySqlCommandBuilder
クラスの新規インスタンスを初期化します。
パラメータ :使用する
MySqlDataAdapter
。
パラメータ :変更保護コードの生成には False 。それ以外は True 。
MySqlCommandBuilder
は自らを、このプロパティで指定されたMySqlDataAdapter
によって生成された
MySqlDataAdapter.RowUpdating
イベントのリスナとして登録します。
新規インスタンス
MySqlCommandBuilder
を作成する際、この
MySqlDataAdapter
に関連する既存の
MySqlCommandBuilder
がリリースされます。
lastOneWins
パラメータは、基礎となるデータの変更を確認する生成された
DELETE および UPDATE コマンドに、SQL
コードが含まれるべきかを指示します。lastOneWins
が true
である場合はこのコードは含まれず、データ
レコードはマルチユーザまたはマルチスレッドの環境で上書きされる場合があります。lastOneWins
を false
に設定するとこの確認が含まれ、知らない間に基礎になるデータ
レコードが変更される場合に同時実行例外が投入される原因になります。
SQL 文が自動的に生成される
MySqlDataAdapter
オブジェクトを取得または設定します。
値
:MySqlDataAdapter
オブジェクト。
MySqlCommandBuilder
は自らを、このプロパティで指定されたMySqlDataAdapter
によって生成された
MySqlDataAdapter.RowUpdating
イベントのリスナとして登録します。
新規インスタンス
MySqlCommandBuilder
を作成する際、この
MySqlDataAdapter
に関連する既存の
MySqlCommandBuilder
がリリースされます。
スペースや予約トークンなどの文字を名前に含む MySQL データベース オブジェクト ( 例えばテーブルやカラム ) の指定に使用する文字や、開始文字を取得または設定します。
値 :使用する開始文字または文字。デフォルト値は ` 。
MySQL のデータベース オブジェクトは、普通の
SQL
ストリングなら正確な解析が不可能になるスペースなどの特殊な文字を含むことができます。QuotePrefix
および QuoteSuffix
プロパティを使用すると、この状況に対処する
SQL コマンドを MySqlCommandBuilder
が構築できるようになります。
スペースや予約トークンなどの文字を名前に含む MySQL データベース オブジェクト ( 例えばテーブルやカラム ) の指定に使用する文字や、開始文字を取得または設定します。
値 :使用する開始文字または文字。デフォルト値は ` 。
MySQL のデータベース オブジェクトは、普通の
SQL
ストリングなら正確な解析が不可能になるスペースなどの特殊な文字を含むことができます。QuotePrefix
および QuoteSuffix
プロパティを使用すると、この状況に対処する
SQL コマンドを MySqlCommandBuilder
が構築できるようになります。
データベースでの削除に必要な、自動的に生成された
MySqlCommand
オブジェクトを取得します。
戻り値 :
削除操作の処理のために生成された
MySqlCommand
オブジェクト。
GetDeleteCommand
メソッドは実行される MySqlCommand
を戻すので、アプリケーションはそれを情報提供やトラブルシュートの目的に使用することができます。
また、GetDeleteCommand
を変更されたコマンドの基盤として使用することもできます。例えば、GetDeleteCommand
を呼び出して
MySqlCommand.CommandTimeout
値を変更したとすると、それを
MySqlDataAdapter
に明示的に設定します。
最初に SQL
文が生成された後、ステートメントになんらかの変更が生じる場合はアプリケーションが
RefreshSchema
を明示的に呼び出す必要があります。さもなければ
GetDeleteCommand
は前のステートメントからの情報を使い続けることになり、それでは間違っている可能性があります。SQL
文が最初に生成されるのは、アプリケーションが
System.Data.Common.DataAdapter.Update
または GetDeleteCommand
を呼び出す時です。
データベースでの挿入に必要な、自動的に生成された
MySqlCommand
オブジェクトを取得します。
戻り値 :
The挿入操作の処理のために生成された
MySqlCommand
オブジェクト。
GetInsertCommand
メソッドは実行される MySqlCommand
を戻すので、アプリケーションはそれを情報提供やトラブルシュートの目的に使用することができます。
また、GetInsertCommand
を変更されたコマンドの基礎として使用することもできます。例えば、GetInsertCommand
を呼び出して
MySqlCommand.CommandTimeout
値を変更したとすると、それを
MySqlDataAdapter
に明示的に設定します。
最初に SQL
文が生成された後、ステートメントになんらかの変更が生じる場合はアプリケーションが
RefreshSchema
を明示的に呼び出す必要があります。さもなければ
GetInsertCommand
は前のステートメントからの情報を使い続けることになり、それでは間違っている可能性があります。SQL
文が最初に生成されるのは、アプリケーションが
System.Data.Common.DataAdapter.Update
または GetInsertCommand
を呼び出す時です。
データベースでの更新作業に必要な、自動的に生成された
MySqlCommand
オブジェクトを取得します。
戻り値 :
更新操作の処理のために生成された
MySqlCommand
オブジェクト。
GetUpdateCommand
メソッドは実行される MySqlCommand
を戻すので、アプリケーションはそれを情報提供やトラブルシュートの目的に使用することができます。
また、GetUpdateCommand
を変更されたコマンドの基盤として使用することもできます。例えば、GetUpdateCommand
を呼び出して
MySqlCommand.CommandTimeout
値を変更したとすると、それを
MySqlDataAdapter
に明示的に設定します。
最初に SQL
文が生成された後、ステートメントになんらかの変更が生じる場合はアプリケーションが
RefreshSchema
を明示的に呼び出す必要があります。さもなければ
GetUpdateCommand
は前のステートメントからの情報を使い続けることになり、それでは間違っている可能性があります。SQL
文が最初に生成されるのは、アプリケーションが
System.Data.Common.DataAdapter.Update
または GetUpdateCommand
を呼び出す時です。
MySQL サーバ データベースへのオープン接続を表します。このクラスを継承することはできません。
MySqlConnection
オブジェクトは、MySQL
Server
データソースへのセッションを示します。MySqlConnection
のインスタンスを作成する際、すべてのプロパティはそれらの初期値に設定されます。それらの値のリストは、MySqlConnection
コンストラクタをご覧ください。
MySqlConnection
が範囲から出ると閉じません。そのため、MySqlConnection.Close
または MySqlConnection.Dispose
を呼び出すことによって、明示的に接続を閉じる必要があります。
例
以下は、MySqlCommand
と
MySqlConnection
を作成する例です。MySqlConnection
が開かれ、MySqlCommand
の
MySqlCommand.Connection
として設定されます。この例はその後
MySqlCommand.ExecuteNonQuery
を呼び出し、接続を閉じます。これを完遂するため、ExecuteNonQuery
は SQL INSERT 文である接続ストリングとクエリ
ストリングに渡されます。
Visual Basic 例 :
Public Sub InsertRow(myConnectionString As String) ' If the connection string is null, use a default. If myConnectionString = "" Then myConnectionString = "Database=Test;Data Source=localhost;User Id=username;Password=pass" End If Dim myConnection As New MySqlConnection(myConnectionString) Dim myInsertQuery As String = "INSERT INTO Orders (id, customerId, amount) Values(1001, 23, 30.66)" Dim myCommand As New MySqlCommand(myInsertQuery) myCommand.Connection = myConnection myConnection.Open() myCommand.ExecuteNonQuery() myCommand.Connection.Close() End Sub
C# 例 :
public void InsertRow(string myConnectionString) { // If the connection string is null, use a default. if(myConnectionString == "") { myConnectionString = "Database=Test;Data Source=localhost;User Id=username;Password=pass"; } MySqlConnection myConnection = new MySqlConnection(myConnectionString); string myInsertQuery = "INSERT INTO Orders (id, customerId, amount) Values(1001, 23, 30.66)"; MySqlCommand myCommand = new MySqlCommand(myInsertQuery); myCommand.Connection = myConnection; myConnection.Open(); myCommand.ExecuteNonQuery(); myCommand.Connection.Close(); }
MySqlConnection
クラスの新規インスタンスを初期化します。
MySqlConnection
の新規インスタンスが作成される時、赤/白のプロパティは、ConnectionString
の関連するキーワードを使って特別に設定されない限り、次の初期値に設定されます。
プロパティ | 初期値 |
ConnectionString | empty string ("") |
ConnectionTimeout | 15 |
Database | empty string ("") |
DataSource | empty string ("") |
ServerVersion | empty string ("") |
これらのプロパティの値は、ConnectionString
プロパティを使うことによってのみ変更できます。
例
MySqlConnection のオーバーロード メソッド
MySqlConnection
クラスの新規インスタンスを初期化します。
接続ストリングを含むストリングが与えられた時に、MySqlConnection
クラスの新規インスタンスを初期化します。
MySqlConnection
の新規インスタンスが作成される時、赤/白のプロパティは、ConnectionString
の関連するキーワードを使って特別に設定されない限り、次の初期値に設定されます。
プロパティ | 初期値 |
ConnectionString | empty string ("") |
ConnectionTimeout | 15 |
Database | empty string ("") |
DataSource | empty string ("") |
ServerVersion | empty string ("") |
これらのプロパティの値は、ConnectionString
プロパティを使うことによってのみ変更できます。
例
パラメータ : MySQL データベースを開くのに使用される接続プロパティ。
ConnectionString によって指定されたプロパティ設定で、データベース接続を開きます。
例外 : データソースかサーバの指定なしに接続を開くことができない。
例外 : 接続を開く途中で発生した接続レベル エラー。
MySqlConnection
は、接続プールに利用可能なオープン接続があれば引き出します。もしくは、MySQL
のインスタンスに新しい接続を確立します。
例
以下の例は MySqlConnection
を作成して開き、そのプロパティの一部を表示、そして接続を閉じます。
Visual Basic 例 :
Public Sub CreateMySqlConnection(myConnString As String) Dim myConnection As New MySqlConnection(myConnString) myConnection.Open() MessageBox.Show("ServerVersion: " + myConnection.ServerVersion _ + ControlChars.Cr + "State: " + myConnection.State.ToString()) myConnection.Close() End Sub
C# 例 :
public void CreateMySqlConnection(string myConnString) { MySqlConnection myConnection = new MySqlConnection(myConnString); myConnection.Open(); MessageBox.Show("ServerVersion: " + myConnection.ServerVersion + "\nState: " + myConnection.State.ToString()); myConnection.Close(); }
使用中のデータベース、または接続が開いた後に使用されるデータベースの名前を取得します。
戻り値 : 使用中のデータベース名、または接続が開いた後に使用されるデータベースの名前。デフォルト値は空のストリング。
Database
プロパティは動的に更新しません。SQL
文を使って使用中のデータベースを変更すると、このプロパティは誤った値を反映することがあります。ChangeDatabase
メソッドを使って使用中のデータベースを変更すれば、このプロパティは新しいデータベースを反映するよう更新されます。
例
以下の例は MySqlConnection
を作成し、その読み取り専用プロパティの一部を表示します。
Visual Basic 例 :
Public Sub CreateMySqlConnection() Dim myConnString As String = _ "Persist Security Info=False;database=test;server=localhost;user id=joeuser;pwd=pass" Dim myConnection As New MySqlConnection( myConnString ) myConnection.Open() MessageBox.Show( "Server Version: " + myConnection.ServerVersion _ + ControlChars.NewLine + "Database: " + myConnection.Database ) myConnection.ChangeDatabase( "test2" ) MessageBox.Show( "ServerVersion: " + myConnection.ServerVersion _ + ControlChars.NewLine + "Database: " + myConnection.Database ) myConnection.Close() End Sub
C# 例 :
public void CreateMySqlConnection() { string myConnString = "Persist Security Info=False;database=test;server=localhost;user id=joeuser;pwd=pass"; MySqlConnection myConnection = new MySqlConnection( myConnString ); myConnection.Open(); MessageBox.Show( "Server Version: " + myConnection.ServerVersion + "\nDatabase: " + myConnection.Database ); myConnection.ChangeDatabase( "test2" ); MessageBox.Show( "ServerVersion: " + myConnection.ServerVersion + "\nDatabase: " + myConnection.Database ); myConnection.Close(); }
接続の状態を取得します。
戻り値 :
System.Data.ConnectionState
値のビットごとの組み合わせ。デフォルトは
Closed
。
許可されている状態の変更は以下 :
接続オブジェクトの Open
メソッドを使用する、Closed
から Open
まで。
接続オブジェクトの Close
メソッドかDispose
メソッドを使用する、Open
から Closed
まで。
例
以下の例は MySqlConnection
を作成して開き、そのプロパティの一部を表示、そして接続を閉じます。
Visual Basic 例 :
Public Sub CreateMySqlConnection(myConnString As String) Dim myConnection As New MySqlConnection(myConnString) myConnection.Open() MessageBox.Show("ServerVersion: " + myConnection.ServerVersion _ + ControlChars.Cr + "State: " + myConnection.State.ToString()) myConnection.Close() End Sub
C# 例 :
public void CreateMySqlConnection(string myConnString) { MySqlConnection myConnection = new MySqlConnection(myConnString); myConnection.Open(); MessageBox.Show("ServerVersion: " + myConnection.ServerVersion + "\nState: " + myConnection.State.ToString()); myConnection.Close(); }
クライアントが接続された MySQL サーバのバージョンを含むストリングを取得します。
戻り値 : MySQL のインスタンスのバージョン。
例外 : 接続が開いていません。
例
以下の例は MySqlConnection
を作成して開き、そのプロパティのい一部を表示、そして接続を閉じます。
Visual Basic 例 :
Public Sub CreateMySqlConnection(myConnString As String) Dim myConnection As New MySqlConnection(myConnString) myConnection.Open() MessageBox.Show("ServerVersion: " + myConnection.ServerVersion _ + ControlChars.Cr + "State: " + myConnection.State.ToString()) myConnection.Close() End Sub
C# 例 :
public void CreateMySqlConnection(string myConnString) { MySqlConnection myConnection = new MySqlConnection(myConnString); myConnection.Open(); MessageBox.Show("ServerVersion: " + myConnection.ServerVersion + "\nState: " + myConnection.State.ToString()); myConnection.Close(); }
データベースへの接続を閉じます。この方法は、どんなオープン接続を閉じる時にも適しています。
Close
メソッドはすべての保留トランザクションをロールバックします。そして接続を接続プールにリリース、または接続プールが無効になっている場合は接続を閉じます。
アプリケーションは一度以上、Close
を呼び出すことができます。例外は生成されません。
例
以下の例は MySqlConnection
を作成して開き、そのプロパティの一部を表示、そして接続を閉じます。
Visual Basic 例 :
Public Sub CreateMySqlConnection(myConnString As String) Dim myConnection As New MySqlConnection(myConnString) myConnection.Open() MessageBox.Show("ServerVersion: " + myConnection.ServerVersion _ + ControlChars.Cr + "State: " + myConnection.State.ToString()) myConnection.Close() End Sub
C# 例 :
public void CreateMySqlConnection(string myConnString) { MySqlConnection myConnection = new MySqlConnection(myConnString); myConnection.Open(); MessageBox.Show("ServerVersion: " + myConnection.ServerVersion + "\nState: " + myConnection.State.ToString()); myConnection.Close(); }
MySqlConnection
に関連するMySqlCommand
オブジェクトを作成し、戻します。
戻り値 :
MySqlCommand
オブジェクト。
データベースのトランザクションを開始します。
戻り値 : 新しいトランザクションを表すオブジェクト。
例外 : 並列トランザクションはサポートされていません。
このコマンドは、MySQL BEGIN TRANSACTION コマンドに相当します。
トランザクションは、MySqlTransaction.Commit
または MySqlTransaction.Rollback
メソッドを使用して、明示的にコミットするかロールバックする必要があります。
隔離レベルを指定しない場合、デフォルトの隔離レベルが使用されます。BeginTransaction
メソッドで隔離レベルを指定するには、iso
パラメータを受け取るオーバーロードを使用します。
例
次は、MySqlConnection
と
MySqlTransaction
を作成する例です。BeginTransaction
、MySqlTransaction.Commit
、MySqlTransaction.Rollback
の各メソッドの使い方も示します。
Visual Basic 例 :
Public Sub RunTransaction(myConnString As String) Dim myConnection As New MySqlConnection(myConnString) myConnection.Open() Dim myCommand As MySqlCommand = myConnection.CreateCommand() Dim myTrans As MySqlTransaction ' Start a local transaction myTrans = myConnection.BeginTransaction() ' Must assign both transaction object and connection ' to Command object for a pending local transaction myCommand.Connection = myConnection myCommand.Transaction = myTrans Try myCommand.CommandText = "Insert into Test (id, desc) VALUES (100, 'Description')" myCommand.ExecuteNonQuery() myCommand.CommandText = "Insert into Test (id, desc) VALUES (101, 'Description')" myCommand.ExecuteNonQuery() myTrans.Commit() Console.WriteLine("Both records are written to database.") Catch e As Exception Try myTrans.Rollback() Catch ex As MySqlException If Not myTrans.Connection Is Nothing Then Console.WriteLine("An exception of type " + ex.GetType().ToString() + _ " was encountered while attempting to roll back the transaction.") End If End Try Console.WriteLine("An exception of type " + e.GetType().ToString() + _ "was encountered while inserting the data.") Console.WriteLine("Neither record was written to database.") Finally myConnection.Close() End Try End Sub
C# 例 :
public void RunTransaction(string myConnString) { MySqlConnection myConnection = new MySqlConnection(myConnString); myConnection.Open(); MySqlCommand myCommand = myConnection.CreateCommand(); MySqlTransaction myTrans; // Start a local transaction myTrans = myConnection.BeginTransaction(); // Must assign both transaction object and connection // to Command object for a pending local transaction myCommand.Connection = myConnection; myCommand.Transaction = myTrans; try { myCommand.CommandText = "insert into Test (id, desc) VALUES (100, 'Description')"; myCommand.ExecuteNonQuery(); myCommand.CommandText = "insert into Test (id, desc) VALUES (101, 'Description')"; myCommand.ExecuteNonQuery(); myTrans.Commit(); Console.WriteLine("Both records are written to database."); } catch(Exception e) { try { myTrans.Rollback(); } catch (SqlException ex) { if (myTrans.Connection != null) { Console.WriteLine("An exception of type " + ex.GetType() + " was encountered while attempting to roll back the transaction."); } } Console.WriteLine("An exception of type " + e.GetType() + " was encountered while inserting the data."); Console.WriteLine("Neither record was written to database."); } finally { myConnection.Close(); } }
隔離レベルを指定して、データベース トランザクションを開始します。
パラメータ : トランザクションを実行する分離レベル。
戻り値 : 新しいトランザクションを表すオブジェクト。
例外 : 並列トランザクションはサポートされていません。
このコマンドは、MySQL BEGIN TRANSACTION コマンドに相当します。
トランザクションは、MySqlTransaction.Commit
または MySqlTransaction.Rollback
メソッドを使用して、明示的にコミットするかロールバックする必要があります。
隔離レベルを指定しない場合、デフォルトの隔離レベルが使用されます。BeginTransaction
メソッドで隔離レベルを指定するには、iso
パラメータを受け取るオーバーロードを使用します。
例
次は、MySqlConnection
と
MySqlTransaction
を作成する例です。BeginTransaction
、MySqlTransaction.Commit
、MySqlTransaction.Rollback
の各メソッドの使い方も示します。
Visual Basic 例 :
Public Sub RunTransaction(myConnString As String) Dim myConnection As New MySqlConnection(myConnString) myConnection.Open() Dim myCommand As MySqlCommand = myConnection.CreateCommand() Dim myTrans As MySqlTransaction ' Start a local transaction myTrans = myConnection.BeginTransaction() ' Must assign both transaction object and connection ' to Command object for a pending local transaction myCommand.Connection = myConnection myCommand.Transaction = myTrans Try myCommand.CommandText = "Insert into Test (id, desc) VALUES (100, 'Description')" myCommand.ExecuteNonQuery() myCommand.CommandText = "Insert into Test (id, desc) VALUES (101, 'Description')" myCommand.ExecuteNonQuery() myTrans.Commit() Console.WriteLine("Both records are written to database.") Catch e As Exception Try myTrans.Rollback() Catch ex As MySqlException If Not myTrans.Connection Is Nothing Then Console.WriteLine("An exception of type " + ex.GetType().ToString() + _ " was encountered while attempting to roll back the transaction.") End If End Try Console.WriteLine("An exception of type " + e.GetType().ToString() + _ "was encountered while inserting the data.") Console.WriteLine("Neither record was written to database.") Finally myConnection.Close() End Try End Sub
C# 例 :
public void RunTransaction(string myConnString) { MySqlConnection myConnection = new MySqlConnection(myConnString); myConnection.Open(); MySqlCommand myCommand = myConnection.CreateCommand(); MySqlTransaction myTrans; // Start a local transaction myTrans = myConnection.BeginTransaction(); // Must assign both transaction object and connection // to Command object for a pending local transaction myCommand.Connection = myConnection; myCommand.Transaction = myTrans; try { myCommand.CommandText = "insert into Test (id, desc) VALUES (100, 'Description')"; myCommand.ExecuteNonQuery(); myCommand.CommandText = "insert into Test (id, desc) VALUES (101, 'Description')"; myCommand.ExecuteNonQuery(); myTrans.Commit(); Console.WriteLine("Both records are written to database."); } catch(Exception e) { try { myTrans.Rollback(); } catch (SqlException ex) { if (myTrans.Connection != null) { Console.WriteLine("An exception of type " + ex.GetType() + " was encountered while attempting to roll back the transaction."); } } Console.WriteLine("An exception of type " + e.GetType() + " was encountered while inserting the data."); Console.WriteLine("Neither record was written to database."); } finally { myConnection.Close(); } }
開いているMySqlConnection の現在のデータベースを変更します。
パラメータ : 使用するデータベースの名前。
database
パラメータで提供される値は、有効なデータベース名である必要があります。
database
パラメータは、null
値、空のストリング、または空白文字だけの文字列にはできません。
MySQL に対して接続プールを使用する場合、接続を閉じると、その接続は接続プールに返されます。次回、プールから接続を取り出した時に、接続のリセット要求が、ユーザーが操作を行う前に実行されます。
例外 : データベース名が有効ではありません。
例外 : 接続が開いていません。
例外 : データベースを変更できません。
例
以下の例は MySqlConnection
を作成し、その読み取り専用プロパティの一部を表示します。
Visual Basic 例 :
Public Sub CreateMySqlConnection() Dim myConnString As String = _ "Persist Security Info=False;database=test;server=localhost;user id=joeuser;pwd=pass" Dim myConnection As New MySqlConnection( myConnString ) myConnection.Open() MessageBox.Show( "Server Version: " + myConnection.ServerVersion _ + ControlChars.NewLine + "Database: " + myConnection.Database ) myConnection.ChangeDatabase( "test2" ) MessageBox.Show( "ServerVersion: " + myConnection.ServerVersion _ + ControlChars.NewLine + "Database: " + myConnection.Database ) myConnection.Close() End Sub
C# 例 :
public void CreateMySqlConnection() { string myConnString = "Persist Security Info=False;database=test;server=localhost;user id=joeuser;pwd=pass"; MySqlConnection myConnection = new MySqlConnection( myConnString ); myConnection.Open(); MessageBox.Show( "Server Version: " + myConnection.ServerVersion + "\nDatabase: " + myConnection.Database ); myConnection.ChangeDatabase( "test2" ); MessageBox.Show( "ServerVersion: " + myConnection.ServerVersion + "\nDatabase: " + myConnection.Database ); myConnection.Close(); }
接続の状態が変更した時に発生します。
State
が closed から opend
に、または opend から closed
に変わるたびに、StateChange
イベントが発生します。StateChange
は MySqlConnection
トランザクションの直後に実行します。
StateChange
イベント内でイベント
ハンドラが例外を投入すると、その例外は、
Open
メソッドまたは
Close
メソッドの呼び出し元に通知されます。
StateChange
イベントは、Close
または
Dispose
を明示的に呼び出さない限り発生しません。
イベント
ハンドラは、このイベントに関連するデータを含む
System.Data.StateChangeEventArgs
タイプの引数を受け取ります。次の
StateChangeEventArgs
プロパティは、このイベントの固有の情報を提供します。
プロパティ | 解説 |
System.Data.StateChangeEventArgs.CurrentState | 接続の新しい状態を取得します。イベントが発生した時には、接続オブジェクトが既に新しい状態になっています。 |
System.Data.StateChangeEventArgs.OriginalState | 接続の元の状態を取得します。 |
接続の確立の試行を開始してから、その試行を終了してエラーを生成するまでの待機時間を取得または設定します。
例外 : 設定値が O 未満。
0
の値は限界がないことを示し、MySqlConnection.ConnectionString
では接続の試行が永久に待機するため、避けるべきでしょう。
例
以下の例は MySqlConnection を作成し、そのプロパティの一部を接続ストリングに設定します。
Visual Basic 例 :
Public Sub CreateSqlConnection() Dim myConnection As New MySqlConnection() myConnection.ConnectionString = "Persist Security Info=False;Username=user;Password=pass;database=test1;server=localhost;Connect Timeout=30" myConnection.Open() End Sub
C# 例 :
public void CreateSqlConnection() { MySqlConnection myConnection = new MySqlConnection(); myConnection.ConnectionString = "Persist Security Info=False;Username=user;≫ Password=pass;database=test1;server=localhost;Connect Timeout=30"; myConnection.Open(); }
MySQL Server データベースへの接続に使用されるストリングを取得または設定します。
戻った ConnectionString
は元々設定されたものとやや異なるかもしれませんが、キーワード/値のペアの点では同じになります。セキュリティ情報は、Persist
Security Info 値が true
に設定されない限り含まれません。
ConnectionString
プロパティを使用して、データベースに接続することができます。次の例は一般的な接続ストリングを示したものです。
"Persist Security Info=False;database=MyDB;≫ server=MySqlServer;user id=myUser;Password=myPass"
ConnectionString
プロパティを設定できるのは、接続が閉じている時だけです。接続ストリング値の多くには、対応する読み取り専用プロパティがあります。接続ストリングを設定すると、エラーが検出された場合を除いて、これらのプロパティがすべて更新されます。エラーが発生した場合は、いずれのプロパティも更新されません。MySqlConnection
プロパティは、ConnectionString
に含まれている設定だけを返します。
ローカル コンピュータに接続するには、サーバとして "localhost" を指定します。サーバを指定しないと、localhost がとられます。
閉じた接続に対して
ConnectionString
をリセットすると、パスワードを含むすべての接続ストリング値
( および関連プロパティ )
がリセットされます。例えば、Database= MyDb
を含む接続ストリングを設定した後で、その接続ストリングを
Data Source=myserver;User Id=myUser;Password=myPass
にリセットすると、
MySqlConnection.Database
プロパティは
MyDb に設定されなくなります。
接続ストリングは、設定した直後に解析されます。解析中にシンタックスのエラーが検出された場合は、ArgumentException
などの、ランタイム例外が生成されます。その他のエラーは、接続を開くときにだけ検出されます。
接続ストリングの基本的なフォーマットは、一連のキーワード/値のペアをセミコロンで区切った形となります。等号記号
( =
)
は、各キーワードとその値を結合します。オプションの設定値に関する追記は以下
:
セミコロン、単一引用符文字または二十引用符文字を含む値を指定するには、値を二十引用符で囲む必要があります。セミコロンと二重引用符の両方が値に含まれている場合は、単一引用符で値を囲むことができます。単一引用符は、値が二重引用符文字で始まる場合にも使用できます。逆に、値が単一引用符で始まる場合は、二重引用符を使用することができます。単一引用符と二重引用符の両方が値に含まれている場合、値を囲むために使用される引用符文字は、値の中で発生するたびに 2 つずつ使用する必要があります。
ストリング値の前端または末尾の空白を含めるには、単一引用符または二重引用符で値を囲む必要があります。整数値、ブール変数、列挙値の先頭または末尾の空白は、引用符に囲まれていても無視されます。ただし、ストリング リテラル キーワードやストリング値内の空白は保存されます。.NET Framework Version 1.1 を使用の場合、単一引用符または二重引用符は、引用符が値の先頭または末尾の文字でない限り、区切り文字を付けずに使用できます ( たとえば、Data Source= my'Server または DData Source= my"Server ) 。
キーワードまたは値の中で等号記号 (=) を使用する場合は、先に等号記号をもうひとつ入れる必要があります。例えば、次のような接続ストリングでは、
"key==word=value"
"key=word" で値は "value" です。
キーワード = 値のペアで特定のキーワードが接続ストリングの中に複数回発生する場合、最後に発生するものが値セットで使用されます。
キーワードの大文字と小文字は区別されません。
次の表は、ConnectionString
内のキーワード値として有効な名前の一覧です。
名前 | デフォルト | 解説 |
Connect Timeout , Connection
Timeout | 15 | 接続の試行を終了し、エラーを生成するまで、サーバへの接続を待機する時間 (秒単位)。 |
Host , Server , Data
Source , DataSource ,
Address , Addr ,
Network Address | localhost | 接続する SQL Server のインスタンスの名前またはネットワーク アドレス。複数のホストを、& で区切って指定することができます。この方法は、複数の MySQL サーバが複製のために構成されており、接続するサーバの正確性を特に求めていない場合にも利用できます。データベースへの書き込みを同期するために、プロバイダは試行しないので、このオプションを使用する際は注意が必要になります。Mono を使用した Unix 環境においては、これは MySQL ソケット ファイル名への完全修飾パスになりえます。この構成では、Unix ソケットが TCP/IP ソケットの代わりに使用されます。現時点ではシングル ソケット名のみしか与えられないので、複製された環境で Unix ソケットを使用して MySQL にアクセスすることは現在サポートされていません。 |
Ignore Prepare | true | true の場合、MySqlCommand.Prepare()
へのすべての呼び出しを無視するようプロバイダに指示します。このオプションは、サーバ側のプリペアド
ステートメントと使用する時、ステートメントの破損をともなう発行を防ぐためのものです。サーバ側のプリペアド
ステートメントを使用したい場合は、このオプションを
false
に設定してください。このオプションは、Connector/NET
5.0.3 および Connector/NET 1.0.9
に加えられています。 |
Port | 3306 | MySQL が接続の監視に使用するポート。この値を -1 に指定して名前付きパイプ接続 ( Windows のみ ) を使用します。Unix ソケットが使用されている場合、この値は無視されます。 |
Protocol | socket | サーバへ繋げる接続のタイプを指定。値は : MySQL 共有メモリを使用する、Unix ソケット接続メモリの名前付きパイプ コネクション unix のソケット接続パイプのソケットまたは tcp 。 |
CharSet , Character Set | ? | サーバに送られたすべてのクエリのエンコードに使用されるべき文字セットを指定。結果セットはいつもと同じく、戻されたデータの文字セットに返されます。 |
Logging | false | true の場合は、各種情報が構成されたどの TraceListeners にもアウトプットされます。 |
Allow Batch | true | true の場合は、複数の SQL 文を一度のコマンド実行で送信できます。注 : MySQL 4.1.1 からは、バッチ文をサーバ定義分離文字で分ける必要があります。それ以前のバージョンの MySQL に送られたコマンドは、 ';' で分けてください。 |
Encrypt | false | Connector/NET 5.0.3 以降では、true
の場合は、サーバーに証明書がインストールされていれば、クライアントとサーバの間で送信されるすべてのデータに
SSL
暗号化を使用します。認識される値は、true
、false 、yes
、および no です。5.0.3
より前のバージョンでは、このオプションは効果がありません。 |
Initial Catalog , Database | mysql | 最初に使用するデータベース名。 |
Password , pwd | ? | 使用されているMySQL アカウントのパスワード。 |
Persist Security Info | false | false または no ( 強く推奨
)
に設定する時、パスワードのようなセキュリティにかかわる情報は、コネクションが開いている場合、またはオープン状態にあった場合は、接続の一部としては戻されません。接続ストリングをリセットすると、パスワードを含むすべてのストリング値がリセットされます。認識される値は、true
、false 、yes
、および no です。 |
User Id , Username ,
Uid , User name | ? | 使用されている MySQL ログイン アカウント。 |
Shared Memory Name | MYSQL | 接続プロトコルがメモリに設定される場合に、通信に使用する共有メモリ オブジェクトの名前。 |
Allow Zero Datetime | false | True では、MySqlDataReader.GetValue()
が、不正値を持つデータや日付時刻カラムに対して
MySqlDateTime を戻します。False は
System.DateTime
オブジェクトが不正値に返され、不正値に例外が投入されます。 |
Convert Zero Datetime | false | True では、MySqlDataReader.GetValue() および
MySqlDataReader.GetDateTime()
が、不正値を持つデータまたは日付時刻カラムに対して
DateTime.MinValue を戻します。 |
Old Syntax , OldSyntax | false | '@' シンボルをパラメータ
マーカとして使用できます。詳細は
MySqlCommand
を参照。これは、互換性のためのみに使用されます。すべての将来コードは、新しい
'?' パラメータ
マーカを使用するように書かれる必要があります。 |
Pipe Name , Pipe | mysql | 名前付きパイプの名前に設定される場合、MySqlConnection
はその名前付きパイプ上で MySQL
への接続を試行します。この設定は
Windows
のプラットフォームのみに適用します。 |
Procedure Cache | 25 | ストアド プロシージャ キャッシュのサイズを設定します。デフォルトでは、Connector/NET が、最後に使用された約 25 のストアド プロシージャのメタデータ ( インプット/アウトプット データ型 ) を保存します。ストアド プロシージャ キャッシュを無効にするには、値をゼロ (0) に設定します。このオプションは、Connector/NET 5.0.2 および Connector/NET 1.0.9 に加えられています。 |
Use Procedure Bodies | true | このオプションを false
に設定すると、データベースに接続するユーザが、mysql.proc
( ストアド プロシージャ )
テーブルに対する SELECT
権限を持たないということになります。false
に設定する時、Connector/NET
はプロシージャが呼び出される際に、この情報に頼りません。Connector/NET
はこの情報を定義することができないので、すべてのパラメータのタイプを呼び出しの前に明示的に設定し、パラメータをプロシージャ定義に現れる順にコマンドに加える必要があります。このオプションは、Connector/NET
5.0.4 および Connector/NET 1.0.10
に加えられています。 |
次の表は、ConnectionString
内のプーリング値として有効な名前の一覧です。接続プールの詳細は、MySQL
Data Provider の接続プールをご覧ください。
名前 | デフォルト | 解説 |
Connection Lifetime | 0 | 接続がプールに戻された時、その作成時が現時刻と比べられ、時間間隔
( 秒単位 ) が Connection
Lifetime
で指定された値を越えている場合は、接続が破棄されます。これは、クラスター構成で、起動中のサーバとオンラインに上がったばかりのサーバの間で、ロードのバランスを取るのにも使用できます。値をゼロ
(0)
にすると、プールされた接続の接続タイムアウトが最長になります。 |
Max Pool Size | 100 | プールできる接続の最大数。 |
Min Pool Size | 0 | プールできる接続の最小数。 |
Pooling | true | true の場合、MySqlConnection
オブジェクトが適切なプールから引き出されます。または必要に応じて作成され、適切なプールに追加されます。認識される値は、true
、false 、yes
、および no です。 |
Reset Pooled Connections ,
ResetConnections ,
ResetPooledConnections | true | ping とリセットが、プールされた接続が戻る前にサーバに送信されるべきか特定します。リセットによって接続がより速く開くことはなく、また一時テーブルなどのセッション アイテムが消去されることもありません。 |
Cache Server Configuration ,
CacheServerConfiguration ,
CacheServerConfig | false | サーバ変数が、プールされた接続が戻る時に更新されるべきか特定します。これを構成すると、接続がより速く開きますが、同時に他の接続によるサーバの変更を捉えられなくなります。 |
ブール変数を必要とするキーワードまたは接続プーリング値を設定する時、'true' の代わりに 'yes' 、'false' の代わりに 'no' を使用することができます。
注記
MySQL Data Provider は、MySQL
との通信にネイティブ ソケット
プロトコルを使用します。したがって、MySQL
に接続する際、ODBC
レイヤーを追加しないため、ODBC
データソース名 (DSN)
の使用はサポートしていません。
注意
このリリースでは、ユーザの入力をもとに接続ストリングを構築している時、アプリケーションには注意が必要です
( 例えば、ユーザ ID
とパスワード情報をダイアログ
ボックスから引き出す時や、接続ストリングに追加する時など
)
。アプリケーションは、ユーザがこれらの値に余分の接続ストリング
パラメータを埋め込まないようにする必要があります
(
例えば、他のデータベースを付加しようとする場合、"validpassword;database=somedb"
のようなパスワードを入力する ) 。
例
以下の例は MySqlConnection
を作成し、そのプロパティの一部を設定します。
Visual Basic 例 :
Public Sub CreateConnection() Dim myConnection As New MySqlConnection() myConnection.ConnectionString = "Persist Security Info=False;database=myDB;server=myHost;Connect Timeout=30;user id=myUser; pwd=myPass" myConnection.Open() End Sub 'CreateConnection
C# 例 :
public void CreateConnection() { MySqlConnection myConnection = new MySqlConnection(); myConnection.ConnectionString = "Persist Security Info=False;database=myDB;server=myHost;Connect Timeout=30;user id=myUser; pwd=myPass"; myConnection.Open(); }
例
次は、MySqlConnection
を Mono
をインストールした Unix
環境で作成する例です。この例では、MySQL
ソケット ファイル名は
"/var/lib/mysql/mysql.sock"
です。実際のファイル名は、それぞれの MySQL
構成によって違います。
Visual Basic 例 :
Public Sub CreateConnection() Dim myConnection As New MySqlConnection() myConnection.ConnectionString = "database=myDB;server=/var/lib/mysql/mysql.sock;user id=myUser; pwd=myPass" myConnection.Open() End Sub 'CreateConnection
C# 例 :
public void CreateConnection() { MySqlConnection myConnection = new MySqlConnection(); myConnection.ConnectionString = "database=myDB;server=/var/lib/mysql/mysql.sock;user id=myUser; pwd=myPass"; myConnection.Open(); }
データセットを満たし、MySQL データベースの更新に使用されるデータ コマンドのセットとデータベース接続を表します。このクラスを継承することはできません。
MySQLDataAdapter
は、データの引き出しと保存のため、System.Data.DataSet
と MySQL
間のブリッジの役割をはたします。MySQLDataAdapter
は、データソースに対して適切な SQL
文を使用し、DataSet
内のデータをデータソースのデータと一致するように変える
DbDataAdapter.Fill
と、データソースのデータを
DataSet
のデータと一致するように変える
DbDataAdapter.Update
をマッピングすることによってこのブリッジを供給します。
MySQLDataAdapter
が
DataSet
をファイルする時、戻されたデータに必要なテーブルとカラムがまだない場合は、それらを作成します。ただし、プライマリ
キー情報は、System.Data.MissingSchemaAction
プロパティが
System.Data.MissingSchemaAction.AddWithKey
に設定にされていない限り、明示的に作成されたスキーマには含まれません。また、MySQLDataAdapter
が、プライマリ キー情報を含む
DataSet
のスキーマを、System.Data.Common.DbDataAdapter.FillSchema
を使用してデータとファイルする前に作成することもあります。
MySQLDataAdapter
は、MySqlConnection
と
MySqlCommand
の関連付けに使用され、MySQL
データベースに接続する際のパフォーマンスを向上します。
MySQLDataAdapter
はまた、データのロードおよび更新を促進する
MySqlDataAdapter.SelectCommand
、MySqlDataAdapter.InsertCommand
、MySqlDataAdapter.DeleteCommand
、MySqlDataAdapter.UpdateCommand
、そして DataAdapter.TableMappings
を含みます。
MySQLDataAdapter
のインスタンスが作成される際、赤/白のプロパティが初期値に設定されます。それらの値のリストは、MySQLDataAdapter
コンストラクタをご覧ください。
.NET 1.0 および 1.1 での DataColumn
クラスは、UInt16 、UInt32 、または UInt64
タイプのカラムが自動インクリメント
カラムなるのを認めないので注意してください。MySQL
で自動インクリメント
カラムを使用したい場合は、符号付き整数カラムの使用を考慮してください。
例
The following example creates a MySqlCommand
and a MySqlConnection
. The
MySqlConnection
is opened and set as the
MySqlCommand.Connection
for the
MySqlCommand
. The example then calls
MySqlCommand.ExecuteNonQuery
, and closes the
connection. To accomplish this, the
ExecuteNonQuery
is passed a connection string
and a query string that is a SQL INSERT statement.
Visual Basic 例 :
Public Function SelectRows(dataSet As DataSet, connection As String, query As String) As DataSet Dim conn As New MySqlConnection(connection) Dim adapter As New MySqlDataAdapter() adapter.SelectCommand = new MySqlCommand(query, conn) adapter.Fill(dataset) Return dataset End Function
C# 例 :
public DataSet SelectRows(DataSet dataset,string connection,string query) { MySqlConnection conn = new MySqlConnection(connection); MySqlDataAdapter adapter = new MySqlDataAdapter(); adapter.SelectCommand = new MySqlCommand(query, conn); adapter.Fill(dataset); return dataset; }
MySqlDataAdapter のオーバーロード メソッド
MySqlDataAdapter クラスの新規インスタンスを初期化します。
MySqlDataAdapter
のインスタンスが作成される際、赤/白のプロパティが以下の初期値に設定されます。
プロパティ | 初期値 |
MissingMappingAction | MissingMappingAction.Passthrough |
MissingSchemaAction |
MissingSchemaAction.Add |
これらのプロパティの値は、プロパティへの別の呼び出しを通じて変更することができます。
例
以下の例は MySqlDataAdapter
を作成し、そのプロパティの一部を設定します。
Visual Basic 例 :
Public Sub CreateSqlDataAdapter() Dim conn As MySqlConnection = New MySqlConnection("Data Source=localhost;" & _ "database=test") Dim da As MySqlDataAdapter = New MySqlDataAdapter da.MissingSchemaAction = MissingSchemaAction.AddWithKey da.SelectCommand = New MySqlCommand("SELECT id, name FROM mytable", conn) da.InsertCommand = New MySqlCommand("INSERT INTO mytable (id, name) " & _ "VALUES (?id, ?name)", conn) da.UpdateCommand = New MySqlCommand("UPDATE mytable SET id=?id, name=?name " & _ "WHERE id=?oldId", conn) da.DeleteCommand = New MySqlCommand("DELETE FROM mytable WHERE id=?id", conn) da.InsertCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id") da.InsertCommand.Parameters.Add("?name", MySqlDbType.VarChar, 40, "name") da.UpdateCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id") da.UpdateCommand.Parameters.Add("?name", MySqlDbType.VarChar, 40, "name") da.UpdateCommand.Parameters.Add("?oldId", MySqlDbType.VarChar, 5, "id").SourceVersion = DataRowVersion.Original da.DeleteCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id").SourceVersion = DataRowVersion.Original End Sub
C# 例 :
public static void CreateSqlDataAdapter() { MySqlConnection conn = new MySqlConnection("Data Source=localhost;database=test"); MySqlDataAdapter da = new MySqlDataAdapter(); da.MissingSchemaAction = MissingSchemaAction.AddWithKey; da.SelectCommand = new MySqlCommand("SELECT id, name FROM mytable", conn); da.InsertCommand = new MySqlCommand("INSERT INTO mytable (id, name) " + "VALUES (?id, ?name)", conn); da.UpdateCommand = new MySqlCommand("UPDATE mytable SET id=?id, name=?name " + "WHERE id=?oldId", conn); da.DeleteCommand = new MySqlCommand("DELETE FROM mytable WHERE id=?id", conn); da.InsertCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id"); da.InsertCommand.Parameters.Add("?name", MySqlDbType.VarChar, 40, "name"); da.UpdateCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id"); da.UpdateCommand.Parameters.Add("?name", MySqlDbType.VarChar, 40, "name"); da.UpdateCommand.Parameters.Add("?oldId", MySqlDbType.VarChar, 5, "id").SourceVersion = DataRowVersion.Original; da.DeleteCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id").SourceVersion = DataRowVersion.Original; }
関連する MySqlCommand
オブジェクトで、 MySqlDataAdapter
クラスの新規インスタンスを
SelectCommand
プロパティとして初期化します。
パラメータ :
SELECT
文、またはストアドプロシージャである
MySqlCommand
と、MySqlDataAdapter
の
SelectCommand
プロパティとして設定された
MySqlCommand
。
MySqlDataAdapter
のインスタンスが作成される際、赤/白のプロパティが以下の初期値に設定されます。
プロパティ | 初期値 |
MissingMappingAction | MissingMappingAction.Passthrough |
MissingSchemaAction |
MissingSchemaAction.Add |
これらのプロパティの値は、プロパティへの別の呼び出しを通じて変更することができます。
SelectCommand
( または他のコマンド
プロパティ ) が作成済みの
SelectCommand
に割り当てられた場合、MySqlCommand
のクローンは生成されません。SelectCommand
は、作成済みの MySqlCommand
オブジェクトへの参照を維持します。
例
以下の例は MySqlDataAdapter
を作成し、そのプロパティの一部を設定します。
Visual Basic 例 :
Public Sub CreateSqlDataAdapter() Dim conn As MySqlConnection = New MySqlConnection("Data Source=localhost;" & _ "database=test") Dim cmd as new MySqlCommand("SELECT id, name FROM mytable", conn) Dim da As MySqlDataAdapter = New MySqlDataAdapter(cmd) da.MissingSchemaAction = MissingSchemaAction.AddWithKey da.InsertCommand = New MySqlCommand("INSERT INTO mytable (id, name) " & _ "VALUES (?id, ?name)", conn) da.UpdateCommand = New MySqlCommand("UPDATE mytable SET id=?id, name=?name " & _ "WHERE id=?oldId", conn) da.DeleteCommand = New MySqlCommand("DELETE FROM mytable WHERE id=?id", conn) da.InsertCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id") da.InsertCommand.Parameters.Add("?name", MySqlDbType.VarChar, 40, "name") da.UpdateCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id") da.UpdateCommand.Parameters.Add("?name", MySqlDbType.VarChar, 40, "name") da.UpdateCommand.Parameters.Add("?oldId", MySqlDbType.VarChar, 5, "id").SourceVersion = DataRowVersion.Original da.DeleteCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id").SourceVersion = DataRowVersion.Original End Sub
C# 例 :
public static void CreateSqlDataAdapter() { MySqlConnection conn = new MySqlConnection("Data Source=localhost;database=test"); MySqlCommand cmd = new MySqlCommand("SELECT id, name FROM mytable", conn); MySqlDataAdapter da = new MySqlDataAdapter(cmd); da.MissingSchemaAction = MissingSchemaAction.AddWithKey; da.InsertCommand = new MySqlCommand("INSERT INTO mytable (id, name) " + "VALUES (?id, ?name)", conn); da.UpdateCommand = new MySqlCommand("UPDATE mytable SET id=?id, name=?name " + "WHERE id=?oldId", conn); da.DeleteCommand = new MySqlCommand("DELETE FROM mytable WHERE id=?id", conn); da.InsertCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id"); da.InsertCommand.Parameters.Add("?name", MySqlDbType.VarChar, 40, "name"); da.UpdateCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id"); da.UpdateCommand.Parameters.Add("?name", MySqlDbType.VarChar, 40, "name"); da.UpdateCommand.Parameters.Add("?oldId", MySqlDbType.VarChar, 5, "id").SourceVersion = DataRowVersion.Original; da.DeleteCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id").SourceVersion = DataRowVersion.Original; }
SelectCommand
と
MySqlConnection
オブジェクトで、
MySqlDataAdapter
クラスの新規インスタンスを初期化します。
パラメータ
:MySqlDataAdapter
の
SelectCommand
プロパティによって使用される、SQL
SELECT
文またはストアド
プロシージャである String
。
パラメータ
:接続を表す MySqlConnection
。
この MySqlDataAdapter
の実装は、MySqlConnection
を、まだ開いていなければ開閉します。これは、ふたつ以上の
MySqlDataAdapter
オブジェクトに対して
DbDataAdapter.Fill
を呼び出す必要のあるアプリケーションでも使用できます。MySqlConnection
がすでに開いている場合、閉じるには
MySqlConnection.Close
または
MySqlConnection.Dispose
を明示的に呼び出す必要があります。
MySqlDataAdapter
のインスタンスが作成される際、赤/白のプロパティが以下の初期値に設定されます。
プロパティ | 初期値 |
MissingMappingAction | MissingMappingAction.Passthrough |
MissingSchemaAction |
MissingSchemaAction.Add |
これらのプロパティの値は、プロパティへの別の呼び出しを通じて変更することができます。
例
以下の例は MySqlDataAdapter
を作成し、そのプロパティの一部を設定します。
Visual Basic 例 :
Public Sub CreateSqlDataAdapter() Dim conn As MySqlConnection = New MySqlConnection("Data Source=localhost;" & _ "database=test") Dim da As MySqlDataAdapter = New MySqlDataAdapter("SELECT id, name FROM mytable", conn) da.MissingSchemaAction = MissingSchemaAction.AddWithKey da.InsertCommand = New MySqlCommand("INSERT INTO mytable (id, name) " & _ "VALUES (?id, ?name)", conn) da.UpdateCommand = New MySqlCommand("UPDATE mytable SET id=?id, name=?name " & _ "WHERE id=?oldId", conn) da.DeleteCommand = New MySqlCommand("DELETE FROM mytable WHERE id=?id", conn) da.InsertCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id") da.InsertCommand.Parameters.Add("?name", MySqlDbType.VarChar, 40, "name") da.UpdateCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id") da.UpdateCommand.Parameters.Add("?name", MySqlDbType.VarChar, 40, "name") da.UpdateCommand.Parameters.Add("?oldId", MySqlDbType.VarChar, 5, "id").SourceVersion = DataRowVersion.Original da.DeleteCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id").SourceVersion = DataRowVersion.Original End Sub
C# 例 :
public static void CreateSqlDataAdapter() { MySqlConnection conn = new MySqlConnection("Data Source=localhost;database=test"); MySqlDataAdapter da = new MySqlDataAdapter("SELECT id, name FROM mytable", conn); da.MissingSchemaAction = MissingSchemaAction.AddWithKey; da.InsertCommand = new MySqlCommand("INSERT INTO mytable (id, name) " + "VALUES (?id, ?name)", conn); da.UpdateCommand = new MySqlCommand("UPDATE mytable SET id=?id, name=?name " + "WHERE id=?oldId", conn); da.DeleteCommand = new MySqlCommand("DELETE FROM mytable WHERE id=?id", conn); da.InsertCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id"); da.InsertCommand.Parameters.Add("?name", MySqlDbType.VarChar, 40, "name"); da.UpdateCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id"); da.UpdateCommand.Parameters.Add("?name", MySqlDbType.VarChar, 40, "name"); da.UpdateCommand.Parameters.Add("?oldId", MySqlDbType.VarChar, 5, "id").SourceVersion = DataRowVersion.Original; da.DeleteCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id").SourceVersion = DataRowVersion.Original; }
SelectCommand
と
接続ストリングで、
MySqlDataAdapter
クラスの新規インスタンスを初期化します。
パラメータ
:MySqlDataAdapter
の
SelectCommand
プロパティよって使用される、SQL
SELECT
文またはストアド
プロシージャである string
。
パラメータ : 接続ストリング
MySqlDataAdapter
のインスタンスが作成される際、赤/白のプロパティが以下の初期値に設定されます。
プロパティ | 初期値 |
MissingMappingAction | MissingMappingAction.Passthrough |
MissingSchemaAction |
MissingSchemaAction.Add |
これらのプロパティの値は、プロパティへの別の呼び出しを通じて変更することができます。
例
以下の例は MySqlDataAdapter
を作成し、そのプロパティの一部を設定します。
Visual Basic 例 :
Public Sub CreateSqlDataAdapter() Dim da As MySqlDataAdapter = New MySqlDataAdapter("SELECT id, name FROM mytable", "Data Source=localhost;database=test") Dim conn As MySqlConnection = da.SelectCommand.Connection da.MissingSchemaAction = MissingSchemaAction.AddWithKey da.InsertCommand = New MySqlCommand("INSERT INTO mytable (id, name) " & _ "VALUES (?id, ?name)", conn) da.UpdateCommand = New MySqlCommand("UPDATE mytable SET id=?id, name=?name " & _ "WHERE id=?oldId", conn) da.DeleteCommand = New MySqlCommand("DELETE FROM mytable WHERE id=?id", conn) da.InsertCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id") da.InsertCommand.Parameters.Add("?name", MySqlDbType.VarChar, 40, "name") da.UpdateCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id") da.UpdateCommand.Parameters.Add("?name", MySqlDbType.VarChar, 40, "name") da.UpdateCommand.Parameters.Add("?oldId", MySqlDbType.VarChar, 5, "id").SourceVersion = DataRowVersion.Original da.DeleteCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id").SourceVersion = DataRowVersion.Original End Sub
C# 例 :
public static void CreateSqlDataAdapter() { MySqlDataAdapter da = new MySqlDataAdapter("SELECT id, name FROM mytable", "Data Source=localhost;database=test"); MySqlConnection conn = da.SelectCommand.Connection; da.MissingSchemaAction = MissingSchemaAction.AddWithKey; da.InsertCommand = new MySqlCommand("INSERT INTO mytable (id, name) " + "VALUES (?id, ?name)", conn); da.UpdateCommand = new MySqlCommand("UPDATE mytable SET id=?id, name=?name " + "WHERE id=?oldId", conn); da.DeleteCommand = new MySqlCommand("DELETE FROM mytable WHERE id=?id", conn); da.InsertCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id"); da.InsertCommand.Parameters.Add("?name", MySqlDbType.VarChar, 40, "name"); da.UpdateCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id"); da.UpdateCommand.Parameters.Add("?name", MySqlDbType.VarChar, 40, "name"); da.UpdateCommand.Parameters.Add("?oldId", MySqlDbType.VarChar, 5, "id").SourceVersion = DataRowVersion.Original; da.DeleteCommand.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id").SourceVersion = DataRowVersion.Original; }
データセットのレコードを削除するための SQL 文またはストアド プロシージャを取得または設定します。
値
:System.Data.Common.DataAdapter.Update
中に、DataSet
内の削除された行に対応するデータベース内のレコードを削除するための
MySqlCommand
。
System.Data.Common.DataAdapter.Update
中、プロパティが設定されておらず、プライマリ
キー情報が DataSet
内に存在する場合、SelectCommand
プロパティを設定し、MySqlCommandBuilder
を使用すれば、DeleteCommand
を自動生成することが可能です。その後、設定していない追加のコマンドは、MySqlCommandBuilder
によって生成されます。この生成ロジックでは、
DataSet
内にキー
カラム情報が存在している必要があります。
DeleteCommand
が作成済みの
SelectCommand
に割り当てられた場合、MySqlCommand
のクローンは作成されません。DeleteCommand
は、作成済みの MySqlCommand
オブジェクトへの参照を維持します。
例
以下の例は MySqlDataAdapter
を作成し、SelectCommand
と
DeleteCommand
プロパティを設定します。ここでは、MySqlConnection
オブジェクトがすでに作成されていることを前提にしています。
Visual Basic 例 :
Public Shared Function CreateCustomerAdapter(conn As MySqlConnection) As MySqlDataAdapter Dim da As MySqlDataAdapter = New MySqlDataAdapter() Dim cmd As MySqlCommand Dim parm As MySqlParameter ' Create the SelectCommand. cmd = New MySqlCommand("SELECT * FROM mytable WHERE id=?id AND name=?name", conn) cmd.Parameters.Add("?id", MySqlDbType.VarChar, 15) cmd.Parameters.Add("?name", MySqlDbType.VarChar, 15) da.SelectCommand = cmd ' Create the DeleteCommand. cmd = New MySqlCommand("DELETE FROM mytable WHERE id=?id", conn) parm = cmd.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id") parm.SourceVersion = DataRowVersion.Original da.DeleteCommand = cmd Return da End Function
C# 例 :
public static MySqlDataAdapter CreateCustomerAdapter(MySqlConnection conn) { MySqlDataAdapter da = new MySqlDataAdapter(); MySqlCommand cmd; MySqlParameter parm; // Create the SelectCommand. cmd = new MySqlCommand("SELECT * FROM mytable WHERE id=?id AND name=?name", conn); cmd.Parameters.Add("?id", MySqlDbType.VarChar, 15); cmd.Parameters.Add("?name", MySqlDbType.VarChar, 15); da.SelectCommand = cmd; // Create the DeleteCommand. cmd = new MySqlCommand("DELETE FROM mytable WHERE id=?id", conn); parm = cmd.Parameters.Add("?id", MySqlDbType.VarChar, 5, "id"); parm.SourceVersion = DataRowVersion.Original; da.DeleteCommand = cmd; return da; }
データ セットにレコードを挿入するための SQL 文またはストアド プロシージャを取得または設定します。
値
:System.Data.Common.DataAdapter.Update
中に、DataSet
内の新しい行に対応するデータベースにレコードを挿入するための
MySqlCommand
。
System.Data.Common.DataAdapter.Update
中、プロパティが設定されておらず、プライマリ
キー情報が DataSet
内に存在する場合、SelectCommand
プロパティを設定し、MySqlCommandBuilder
を使用すれば、InsertCommand
を自動生成することが可能です。その後、設定していない追加のコマンドは、MySqlCommandBuilder
によって生成されます。この生成ロジックでは、
DataSet
内にキー
カラム情報が存在している必要があります。
InsertCommand
が作成済みの
SelectCommand
に割り当てられた場合、MySqlCommand
のクローンは作成されません。InsertCommand
は、作成済みの MySqlCommand
オブジェクトへの参照を維持します。
このコマンドの実行によって行が返される場合、
MySqlCommand
オブジェクトの
MySqlCommand.UpdatedRowSource
プロパティの設定によっては、返された行が
DataSet
に追加されることがあります。
例
以下の例は MySqlDataAdapter
を作成し、SelectCommand
と
InsertCommand
プロパティを設定します。ここでは、MySqlConnection
オブジェクトがすでに作成されていることを前提にしています。
Visual Basic 例 :
Public Shared Function CreateCustomerAdapter(conn As MySqlConnection) As MySqlDataAdapter Dim da As MySqlDataAdapter = New MySqlDataAdapter() Dim cmd As MySqlCommand Dim parm As MySqlParameter ' Create the SelectCommand. cmd = New MySqlCommand("SELECT * FROM mytable WHERE id=?id AND name=?name", conn) cmd.Parameters.Add("?id", MySqlDbType.VarChar, 15) cmd.Parameters.Add("?name", MySqlDbType.VarChar, 15) da.SelectCommand = cmd ' Create the InsertCommand. cmd = New MySqlCommand("INSERT INTO mytable (id,name) VALUES (?id, ?name)", conn) cmd.Parameters.Add( "?id", MySqlDbType.VarChar, 15, "id" ) cmd.Parameters.Add( "?name", MySqlDbType.VarChar, 15, "name" ) da.InsertCommand = cmd Return da End Function
C# 例 :
public static MySqlDataAdapter CreateCustomerAdapter(MySqlConnection conn) { MySqlDataAdapter da = new MySqlDataAdapter(); MySqlCommand cmd; MySqlParameter parm; // Create the SelectCommand. cmd = new MySqlCommand("SELECT * FROM mytable WHERE id=?id AND name=?name", conn); cmd.Parameters.Add("?id", MySqlDbType.VarChar, 15); cmd.Parameters.Add("?name", MySqlDbType.VarChar, 15); da.SelectCommand = cmd; // Create the InsertCommand. cmd = new MySqlCommand("INSERT INTO mytable (id,name) VALUES (?id,?name)", conn); cmd.Parameters.Add("?id", MySqlDbType.VarChar, 15, "id" ); cmd.Parameters.Add("?name", MySqlDbType.VarChar, 15, "name" ); da.InsertCommand = cmd; return da; }
データ ソース内のレコードの更新に使用される SQL 文またはストアド プロシージャを取得または設定します。
値
:System.Data.Common.DataAdapter.Update
中に、DataSet
からのデータで、データベース内のレコードを更新するための
MySqlCommand
。
System.Data.Common.DataAdapter.Update
中、プロパティが設定されておらず、プライマリ
キー情報が DataSet
内に存在する場合、SelectCommand
プロパティを設定し、MySqlCommandBuilder
を使用すれば、UpdateCommand
を自動生成することが可能です。その後、設定していない追加のコマンドは、MySqlCommandBuilder
によって生成されます。この生成ロジックでは、
DataSet
内にキー
カラム情報が存在している必要があります。
UpdateCommand
が作成済みの
SelectCommand
に割り当てられた場合、MySqlCommand
のクローンは作成されません。UpdateCommand
は、作成済みの MySqlCommand
オブジェクトへの参照を維持します。
このコマンドの実行によって行が返される場合、
MySqlCommand
オブジェクトの
MySqlCommand.UpdatedRowSource
プロパティの設定によっては、返された行が
DataSet にマージされることがあります。
例
以下の例は MySqlDataAdapter
を作成し、SelectCommand
と
UpdateCommand
プロパティを設定します。ここでは、MySqlConnection
オブジェクトがすでに作成されていることを前提にしています。
Visual Basic 例 :
Public Shared Function CreateCustomerAdapter(conn As MySqlConnection) As MySqlDataAdapter Dim da As MySqlDataAdapter = New MySqlDataAdapter() Dim cmd As MySqlCommand Dim parm As MySqlParameter ' Create the SelectCommand. cmd = New MySqlCommand("SELECT * FROM mytable WHERE id=?id AND name=?name", conn) cmd.Parameters.Add("?id", MySqlDbType.VarChar, 15) cmd.Parameters.Add("?name", MySqlDbType.VarChar, 15) da.SelectCommand = cmd ' Create the UpdateCommand. cmd = New MySqlCommand("UPDATE mytable SET id=?id, name=?name WHERE id=?oldId", conn) cmd.Parameters.Add( "?id", MySqlDbType.VarChar, 15, "id" ) cmd.Parameters.Add( "?name", MySqlDbType.VarChar, 15, "name" ) parm = cmd.Parameters.Add("?oldId", MySqlDbType.VarChar, 15, "id") parm.SourceVersion = DataRowVersion.Original da.UpdateCommand = cmd Return da End Function
C# 例 :
public static MySqlDataAdapter CreateCustomerAdapter(MySqlConnection conn) { MySqlDataAdapter da = new MySqlDataAdapter(); MySqlCommand cmd; MySqlParameter parm; // Create the SelectCommand. cmd = new MySqlCommand("SELECT * FROM mytable WHERE id=?id AND name=?name", conn); cmd.Parameters.Add("?id", MySqlDbType.VarChar, 15); cmd.Parameters.Add("?name", MySqlDbType.VarChar, 15); da.SelectCommand = cmd; // Create the UpdateCommand. cmd = new MySqlCommand("UPDATE mytable SET id=?id, name=?name WHERE id=?oldId", conn); cmd.Parameters.Add("?id", MySqlDbType.VarChar, 15, "id" ); cmd.Parameters.Add("?name", MySqlDbType.VarChar, 15, "name" ); parm = cmd.Parameters.Add( "?oldId", MySqlDbType.VarChar, 15, "id" ); parm.SourceVersion = DataRowVersion.Original; da.UpdateCommand = cmd; return da; }
データ ソース内のレコードの選択に使用される SQL 文またはストアド プロシージャを取得または設定します。
値
:System.Data.Common.DbDataAdapter.Fill
中に、DataSet
に格納するレコードをデータベースから選択するための
MySqlCommand
。
SelectCommand
が作成済みの
SelectCommand
に割り当てられた場合、MySqlCommand
のクローンは作成されません。SelectCommand
は、作成済みの MySqlCommand
オブジェクトへの参照を維持します。
SelectCommand
が行を戻さない場合、DataSet
にテーブルは追加されず、例外も発生しません。
例
以下の例は MySqlDataAdapter
を作成し、SelectCommand
と
InsertCommand
プロパティを設定します。ここでは、MySqlConnection
オブジェクトがすでに作成されていることを前提にしています。
Visual Basic 例 :
Public Shared Function CreateCustomerAdapter(conn As MySqlConnection) As MySqlDataAdapter Dim da As MySqlDataAdapter = New MySqlDataAdapter() Dim cmd As MySqlCommand Dim parm As MySqlParameter ' Create the SelectCommand. cmd = New MySqlCommand("SELECT * FROM mytable WHERE id=?id AND name=?name", conn) cmd.Parameters.Add("?id", MySqlDbType.VarChar, 15) cmd.Parameters.Add("?name", MySqlDbType.VarChar, 15) da.SelectCommand = cmd ' Create the InsertCommand. cmd = New MySqlCommand("INSERT INTO mytable (id,name) VALUES (?id, ?name)", conn) cmd.Parameters.Add( "?id", MySqlDbType.VarChar, 15, "id" ) cmd.Parameters.Add( "?name", MySqlDbType.VarChar, 15, "name" ) da.InsertCommand = cmd Return da End Function
C# 例 :
public static MySqlDataAdapter CreateCustomerAdapter(MySqlConnection conn) { MySqlDataAdapter da = new MySqlDataAdapter(); MySqlCommand cmd; MySqlParameter parm; // Create the SelectCommand. cmd = new MySqlCommand("SELECT * FROM mytable WHERE id=?id AND name=?name", conn); cmd.Parameters.Add("?id", MySqlDbType.VarChar, 15); cmd.Parameters.Add("?name", MySqlDbType.VarChar, 15); da.SelectCommand = cmd; // Create the InsertCommand. cmd = new MySqlCommand("INSERT INTO mytable (id,name) VALUES (?id,?name)", conn); cmd.Parameters.Add("?id", MySqlDbType.VarChar, 15, "id" ); cmd.Parameters.Add("?name", MySqlDbType.VarChar, 15, "name" ); da.InsertCommand = cmd; return da; }
MySQLDataReader
を作成するには、コンストラクタを直接使用するのではなく、MySqlCommand
オブジェクトの
MySqlCommand.ExecuteReader
メソッドを呼び出す必要があります。
MySqlDataReader
が使用されている間、関連する
MySqlConnection
は
MySqlDataReader
への供給に忙しく、MySqlConnection
で、閉じる以外の作業を行うことはできません。MySqlDataReader
の MySqlDataReader.Close
メソッドが呼び出されるまでは、その状態が続きます。
MySqlDataReader
を閉じた後に呼び出せるプロパティは、MySqlDataReader.IsClosed
および MySqlDataReader.RecordsAffected
のみです。RecordsAffected
プロパティは、MySqlDataReader
が存在する間はいつでもアクセスすることが可能ですが、RecordsAffected
の値を戻す前はいつも Close
を呼び出し、戻り値が正確であるようにしてください。
適切にパフォーマンスを行うために、MySqlDataReader
は不要なオブジェクトの作成や、不必要なデータのコピーを作ることを避けます。結果として、MySqlDataReader.GetValue
をはじめとするメソッドへの複数のセルが、同じオブジェクトへ参照を返します。GetValue
などのメソッドによって戻されたオブジェクトの、基礎となる値を改変している場合は、十分に注意してください。
例
次は、MySqlConnection
、MySqlCommand
、そして
MySqlDataReader
を作成する例です。この例はデータを読み取り、コンソールへ書き出します。そして最終的にMySqlDataReader
を閉じ、その後 MySqlConnection
を閉じます。
Visual Basic 例 :
Public Sub ReadMyData(myConnString As String) Dim mySelectQuery As String = "SELECT OrderID, CustomerID FROM Orders" Dim myConnection As New MySqlConnection(myConnString) Dim myCommand As New MySqlCommand(mySelectQuery, myConnection) myConnection.Open() Dim myReader As MySqlDataReader myReader = myCommand.ExecuteReader() ' Always call Read before accessing data. While myReader.Read() Console.WriteLine((myReader.GetInt32(0) & ", " & myReader.GetString(1))) End While ' always call Close when done reading. myReader.Close() ' Close the connection when done with it. myConnection.Close() End Sub 'ReadMyData
C# 例 :
public void ReadMyData(string myConnString) { string mySelectQuery = "SELECT OrderID, CustomerID FROM Orders"; MySqlConnection myConnection = new MySqlConnection(myConnString); MySqlCommand myCommand = new MySqlCommand(mySelectQuery,myConnection); myConnection.Open(); MySqlDataReader myReader; myReader = myCommand.ExecuteReader(); // Always call Read before accessing data. while (myReader.Read()) { Console.WriteLine(myReader.GetInt32(0) + ", " + myReader.GetString(1)); } // always call Close when done reading. myReader.Close(); // Close the connection when done with it. myConnection.Close(); }
GetBytes
は、フィールドで使用可能なバイトの数を戻します。ほとんどの場合、これはフィールドの長さと同じになります。ただし、フィールドからバイトを得るために
GetBytes
がすでに使用されている場合は、戻された数がフィールドの実際の長さより少ない場合があります。例えば、MySqlDataReader
が大規模なデータ構造をバッファに読み込んでいる場合も、そのケースに当てはまる可能性があります。詳細は、MySqlCommand.CommandBehavior
の SequentialAccess
設定を参照してください。
ヌル リファレンス ( Visual Basic では
Nothing
)
であるバッファを渡す場合は、GetBytes
がフィールドの長さをバイトで戻します。
変換は行われません。そのため、取り出されたデータはすでにバイト列である必要があります。
指定したカラムの値を TimeSpan
オブジェクトとして取得します。
パラメータ : カラムの 0 から始まる序数。
戻り値 : 指定したカラムの値。
指定したカラムの値を
System.DateTime
オブジェクトとして取得します。
MySQL は、日付カラムが値 '0000-00-00'
を、日付時刻カラムが値 '0000-00-00
00:00:00'
を受け入れるのを許可します。DateTime
構造はこれらの値を含んだり、また表したりすることはできません。ゼロ値を含む可能性のあるカラムから日付時刻値を読み取るには、GetMySqlDateTime
を使用します。このメソッドを使ってゼロ日付時刻カラムを読み取る動作は、ZeroDateTimeBehavior
接続ストリング
オプションによって定義されます。このオプションの詳細は、MySqlConnection.ConnectionString
を参照してください。
パラメータ : カラムの 0 から始まる序数。
戻り値 : 指定したカラムの値。
指定したカラムの値を
MySql.Data.Types.MySqlDateTime
オブジェクトとして取得します。
パラメータ : カラムの 0 から始まる序数。
戻り値 : 指定したカラムの値。
このクラスは、MySQL Data Provider がサーバから生成されたエラーを検出するたびに作成されます。
オープン接続は、例外が投入されても自動的には閉じません。クライアント
アプリケーションが例外は致命的だと判断した場合、開いているすべての
MySqlDataReader
オブジェクトまたは
MySqlConnection
オブジェクトを閉じるようになっています。
例
次の例は、サーバの紛失に際して
MySqlException
を生成し、その後に例外を表示します。
Visual Basic 例 :
Public Sub ShowException() Dim mySelectQuery As String = "SELECT column1 FROM table1" Dim myConnection As New MySqlConnection ("Data Source=localhost;Database=Sample;") Dim myCommand As New MySqlCommand(mySelectQuery, myConnection) Try myCommand.Connection.Open() Catch e As MySqlException MessageBox.Show( e.Message ) End Try End Sub
C# 例 :
public void ShowException() { string mySelectQuery = "SELECT column1 FROM table1"; MySqlConnection myConnection = new MySqlConnection("Data Source=localhost;Database=Sample;"); MySqlCommand myCommand = new MySqlCommand(mySelectQuery,myConnection); try { myCommand.Connection.Open(); } catch (MySqlException e) { MessageBox.Show( e.Message ); } }
パラメータ名の大文字と小文字は区別されません。
例
次の例は MySqlDataAdapter
内の
MySqlParameterCollection
コレクションを介して、MySqlParameter
の複数のインスタンスを作成します。これらのパラメータはデータ
ソースからデータを選択し、DataSet
にそのデータを格納するために使用されます。この例は、DataSet
と MySqlDataAdapter
が、適切なスキーマ、コマンド、および接続ですでに作成されているという前提に基づいています。
Visual Basic 例 :
Public Sub AddSqlParameters() ' ... ' create myDataSet and myDataAdapter ' ... myDataAdapter.SelectCommand.Parameters.Add("@CategoryName", MySqlDbType.VarChar, 80).Value = "toasters" myDataAdapter.SelectCommand.Parameters.Add("@SerialNum", MySqlDbType.Long).Value = 239 myDataAdapter.Fill(myDataSet) End Sub 'AddSqlParameters
C# 例 :
public void AddSqlParameters() { // ... // create myDataSet and myDataAdapter // ... myDataAdapter.SelectCommand.Parameters.Add("@CategoryName", MySqlDbType.VarChar, 80).Value = "toasters"; myDataAdapter.SelectCommand.Parameters.Add("@SerialNum", MySqlDbType.Long).Value = 239; myDataAdapter.Fill(myDataSet); }
コレクション内のパラメータの数は、コマンド テキスト内のパラメータ プレースホルダの数、または生成される例外の数と同じでなければなりません。
例
次の例は MySqlDataAdapter
内の
MySqlParameterCollection
コレクションを介して、MySqlParameter
の複数のインスタンスを作成します。これらのパラメータはデータ
ソース内のデータを選択し、DataSet
にそのデータを格納するために使用されます。このコード、DataSet
と MySqlDataAdapter
が、適切なスキーマ、コマンド、および接続ですでに作成されているという前提に基づいています。
Visual Basic 例 :
Public Sub AddParameters() ' ... ' create myDataSet and myDataAdapter ' ... myDataAdapter.SelectCommand.Parameters.Add("@CategoryName", MySqlDbType.VarChar, 80).Value = "toasters" myDataAdapter.SelectCommand.Parameters.Add("@SerialNum", MySqlDbType.Long).Value = 239 myDataAdapter.Fill(myDataSet) End Sub 'AddSqlParameters
C# 例 :
public void AddSqlParameters() { // ... // create myDataSet and myDataAdapter // ... myDataAdapter.SelectCommand.Parameters.Add("@CategoryName", MySqlDbType.VarChar, 80).Value = "toasters"; myDataAdapter.SelectCommand.Parameters.Add("@SerialNum", MySqlDbType.Long).Value = 239; myDataAdapter.Fill(myDataSet); }
MySQL データベース内で作成される SQL トランザクションを表示。このクラスを継承することはできません。
アプリケーションは、MySqlConnection
オブジェクト上で
MySqlConnection.BeginTransaction
を呼び出すことによって、MySqlTransaction
オブジェクトを作成します。トランザクションに関連するすべての後続の操作
(
例えば、トランザクションのコミットまたはアボート
) は、MySqlTransaction
オブジェクト上で行われます。
例
次は、MySqlConnection
と
MySqlTransaction
を作成する例です。MySqlConnection.BeginTransaction
、MySqlTransaction.Commit
、MySqlTransaction.Rollback
の各メソッドの使い方も示します。
Visual Basic 例 :
Public Sub RunTransaction(myConnString As String) Dim myConnection As New MySqlConnection(myConnString) myConnection.Open() Dim myCommand As MySqlCommand = myConnection.CreateCommand() Dim myTrans As MySqlTransaction ' Start a local transaction myTrans = myConnection.BeginTransaction() ' Must assign both transaction object and connection ' to Command object for a pending local transaction myCommand.Connection = myConnection myCommand.Transaction = myTrans Try myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')" myCommand.ExecuteNonQuery() myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')" myCommand.ExecuteNonQuery() myTrans.Commit() Console.WriteLine("Both records are written to database.") Catch e As Exception Try myTrans.Rollback() Catch ex As MySqlException If Not myTrans.Connection Is Nothing Then Console.WriteLine("An exception of type " & ex.GetType().ToString() & _ " was encountered while attempting to roll back the transaction.") End If End Try Console.WriteLine("An exception of type " & e.GetType().ToString() & _ "was encountered while inserting the data.") Console.WriteLine("Neither record was written to database.") Finally myConnection.Close() End Try End Sub 'RunTransaction
C# 例 :
public void RunTransaction(string myConnString) { MySqlConnection myConnection = new MySqlConnection(myConnString); myConnection.Open(); MySqlCommand myCommand = myConnection.CreateCommand(); MySqlTransaction myTrans; // Start a local transaction myTrans = myConnection.BeginTransaction(); // Must assign both transaction object and connection // to Command object for a pending local transaction myCommand.Connection = myConnection; myCommand.Transaction = myTrans; try { myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"; myCommand.ExecuteNonQuery(); myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"; myCommand.ExecuteNonQuery(); myTrans.Commit(); Console.WriteLine("Both records are written to database."); } catch(Exception e) { try { myTrans.Rollback(); } catch (MySqlException ex) { if (myTrans.Connection != null) { Console.WriteLine("An exception of type " + ex.GetType() + " was encountered while attempting to roll back the transaction."); } } Console.WriteLine("An exception of type " + e.GetType() + " was encountered while inserting the data."); Console.WriteLine("Neither record was written to database."); } finally { myConnection.Close(); } }
ロールバックは保留状態からのトランザクションです。
Rollback メソッドは、MySQL ステートメント ROLLBACK に相当します。トランザクションは、保留状態からのみロールバックできます ( BeginTransaction が呼び出された後、かつ Commit が呼び出される前 ) 。
例
次は、MySqlConnection
と
MySqlTransaction
を作成する例です。MySqlConnection.BeginTransaction
、Commit
、Rollback
の各メソッドの使い方も示します。
Visual Basic 例 :
Public Sub RunSqlTransaction(myConnString As String) Dim myConnection As New MySqlConnection(myConnString) myConnection.Open() Dim myCommand As MySqlCommand = myConnection.CreateCommand() Dim myTrans As MySqlTransaction ' Start a local transaction myTrans = myConnection.BeginTransaction() ' Must assign both transaction object and connection ' to Command object for a pending local transaction myCommand.Connection = myConnection myCommand.Transaction = myTrans Try myCommand.CommandText = "Insert into mytable (id, desc) VALUES (100, 'Description')" myCommand.ExecuteNonQuery() myCommand.CommandText = "Insert into mytable (id, desc) VALUES (101, 'Description')" myCommand.ExecuteNonQuery() myTrans.Commit() Console.WriteLine("Success.") Catch e As Exception Try myTrans.Rollback() Catch ex As MySqlException If Not myTrans.Connection Is Nothing Then Console.WriteLine("An exception of type " & ex.GetType().ToString() & _ " was encountered while attempting to roll back the transaction.") End If End Try Console.WriteLine("An exception of type " & e.GetType().ToString() & _ "was encountered while inserting the data.") Console.WriteLine("Neither record was written to database.") Finally myConnection.Close() End Try End Sub
C# 例 :
public void RunSqlTransaction(string myConnString) { MySqlConnection myConnection = new MySqlConnection(myConnString); myConnection.Open(); MySqlCommand myCommand = myConnection.CreateCommand(); MySqlTransaction myTrans; // Start a local transaction myTrans = myConnection.BeginTransaction(); // Must assign both transaction object and connection // to Command object for a pending local transaction myCommand.Connection = myConnection; myCommand.Transaction = myTrans; try { myCommand.CommandText = "Insert into mytable (id, desc) VALUES (100, 'Description')"; myCommand.ExecuteNonQuery(); myCommand.CommandText = "Insert into mytable (id, desc) VALUES (101, 'Description')"; myCommand.ExecuteNonQuery(); myTrans.Commit(); Console.WriteLine("Both records are written to database."); } catch(Exception e) { try { myTrans.Rollback(); } catch (MySqlException ex) { if (myTrans.Connection != null) { Console.WriteLine("An exception of type " + ex.GetType() + " was encountered while attempting to roll back the transaction."); } } Console.WriteLine("An exception of type " + e.GetType() + " was encountered while inserting the data."); Console.WriteLine("Neither record was written to database."); } finally { myConnection.Close(); } }
データベースのトランザクションをコミットします。
Commit
メソッドは、MySQL
ステートメント COMMIT に相当します。
例
次は、MySqlConnection
と
MySqlTransaction
を作成する例です。MySqlConnection.BeginTransaction
、Commit
、Rollback
の各メソッドの使い方も示します。
Visual Basic 例 :
Public Sub RunSqlTransaction(myConnString As String) Dim myConnection As New MySqlConnection(myConnString) myConnection.Open() Dim myCommand As MySqlCommand = myConnection.CreateCommand() Dim myTrans As MySqlTransaction ' Start a local transaction myTrans = myConnection.BeginTransaction() ' Must assign both transaction object and connection ' to Command object for a pending local transaction myCommand.Connection = myConnection myCommand.Transaction = myTrans Try myCommand.CommandText = "Insert into mytable (id, desc) VALUES (100, 'Description')" myCommand.ExecuteNonQuery() myCommand.CommandText = "Insert into mytable (id, desc) VALUES (101, 'Description')" myCommand.ExecuteNonQuery() myTrans.Commit() Console.WriteLine("Success.") Catch e As Exception Try myTrans.Rollback() Catch ex As MySqlException If Not myTrans.Connection Is Nothing Then Console.WriteLine("An exception of type " & ex.GetType().ToString() & _ " was encountered while attempting to roll back the transaction.") End If End Try Console.WriteLine("An exception of type " & e.GetType().ToString() & _ "was encountered while inserting the data.") Console.WriteLine("Neither record was written to database.") Finally myConnection.Close() End Try End Sub
C# 例 :
public void RunSqlTransaction(string myConnString) { MySqlConnection myConnection = new MySqlConnection(myConnString); myConnection.Open(); MySqlCommand myCommand = myConnection.CreateCommand(); MySqlTransaction myTrans; // Start a local transaction myTrans = myConnection.BeginTransaction(); // Must assign both transaction object and connection // to Command object for a pending local transaction myCommand.Connection = myConnection; myCommand.Transaction = myTrans; try { myCommand.CommandText = "Insert into mytable (id, desc) VALUES (100, 'Description')"; myCommand.ExecuteNonQuery(); myCommand.CommandText = "Insert into mytable (id, desc) VALUES (101, 'Description')"; myCommand.ExecuteNonQuery(); myTrans.Commit(); Console.WriteLine("Both records are written to database."); } catch(Exception e) { try { myTrans.Rollback(); } catch (MySqlException ex) { if (myTrans.Connection != null) { Console.WriteLine("An exception of type " + ex.GetType() + " was encountered while attempting to roll back the transaction."); } } Console.WriteLine("An exception of type " + e.GetType() + " was encountered while inserting the data."); Console.WriteLine("Neither record was written to database."); } finally { myConnection.Close(); } }
このセクションでは、BLOB 処理、日付処理、そして Crystal Reports などの基本的なツールを使った Connector/NET の使用などを含む、Connector/NET のより一般的な使い方の例について説明します。
.NET アプリケーションと MySQL
サーバの間のすべてのアプリケーションは、MySqlConnection
オブジェクトを通して経路指定されます。アプリケーションがサーバと交信できるようになる前に、MySqlConnection
オブジェクトはインスタンスが作成され、構成され、開かれていなければなりません。
MySqlHelper
クラスを使用している時でも、MySqlConnection
オブジェクトはヘルパー
クラスによって作成されます。
このセクションでは、MySqlConnection
オブジェクトを使用して MySQL
に接続する方法を説明します。
MySqlConnection
オブジェクトは、接続ストリングを使って構成されます。接続ストリングは、セミコロンで区切られたサーバ
キー/値のペアを含みます。それぞれのキー/値のペアは等号記号で結ばれます。
以下は接続ストリングのサンプルです。
NotInheritable Public Class MySqlCommand_ Inherits Component_ Implements IDbCommand, ICloneable
この例では、MySqlConnection
オブジェクトは、127.0.0.1
で MySQL
サーバに接続するよう構築されています。ユーザ名は
root
、パスワードは
12345
です。すべてのステートメントのデフォルトのデータベースは
test
データベースになります。
次のオプションは通常的に使用されるものです ( オプションの完全なリストは 項24.2.3.3.15. 「ConnectionString」 の API 使用で閲覧できます ) :
Server
:接続する MySQL
のインスタンスの名前またはネットワーク
アドレス。デフォルトは
localhost
。エイリアスには
host
、Data Source
、DataSource
、Address
、Addr
、Network Address
がある。
Uid
:接続に使用する MySQL
ユーザ アカウント。エイリアスには
User Id
、Username
、User name
がある。
Pwd
:使用されている MySQL
アカウントのパスワード。エイリアス
Password
も使用できる。
Database
:すべてのステートメントが適用されるデフォルトのデータベース。デフォルトは
mysql
。エイリアス
Initial Catalog
も使用できる。
Port
:MySQL
が接続の監視に使用するポート。デフォルトは
3306
。この値を
-1
に指定して名前付きパイプ接続を使用する。
接続ストリングを作成すると、MySQL サーバへの接続を開くのに使用することができます。
次のコードは MySqlConnection
オブジェクトの作成、接続ストリングの設定、接続の開通に使用されます。
Visual Basic 例 :
public sealed class MySqlCommand : Component, IDbCommand, ICloneable
C# 例 :
Overloads Public Sub New()
また、接続ストリングを
MySqlConnection
クラスのコンストラクタに渡すこともできます。
Visual Basic 例 :
public MySqlCommand();
C# 例 :
Overloads Public Sub New( _ ByVal cmdText As String _ )
Once the connection is open it can be used by the other Connector/NET classes to communicate with the MySQL server.
外部サーバへの接続は予測不可能であるため、各
.NET
アプリケーションのエラー処理を加えることが重要になります。接続でエラーが発生すると、MySqlConnection
クラスが MySqlException
オブジェクトを返します。このオブジェクトはエラーの処理時に重要なふたつのプロパティを持っています
:
Message
:現在の例外を解説するメッセージ。
Number
:MySQL エラー番号。
処理にエラーが発生した時、エラー番号からアプリケーションの反応を予測することができます。接続で発生する一般的なエラー番号 2 種 :
0
: サーバへ接続できません。
1045
:
無効なユーザ名、および/またはパスワード。
次のコードは、実際のエラーに基づいて、アプリケーションの反応に適応する方法を示します :
Visual Basic 例 :
public MySqlCommand( stringcmdText );
C# 例 :
Overloads Public Sub New( _ ByVal cmdText As String, _ ByVal connection As MySqlConnection _ )
重要点 :
複数言語データベースを使用している場合は、接続ストリングで文字セットを指定する必要があります。文字セットを指定しない場合、接続はデフォルトで
latin1
文字セットになります。文字セットは接続ストリングの一部として指定することができます。例
:
public MySqlCommand( stringcmdText, MySqlConnectionconnection );
MySQL 4.1 から、Connector/NET でプリペアド ステートメントが使用できるようになりました。プリペアド ステートメントの使用により、一度以上実行されるクエリの性能が大きく改善されました。
準備された実行は、基本的にクエリの解析が一度だけなので、一度以上実行されるステートメントの実行を、直接実行するより素早く行います。直接実行の場合、クエリは実行のたびに解析されます。準備された実行はまた、実行のたびにパラメータにデータを送るだけで済むので、ネットワークの通信料を減らす効果があります。
プリペアド ステートメントの他の利点は、クライアントとサーバ間のデータ伝達をより効果的にするバイナリ プロトコルを使用していることです。
ステートメントを準備するには、コマンド
オブジェクトを作成し、.CommandText
プロパティをクエリに設定します。
ステートメントを入力した後、MySqlCommand
オブジェクトの .Prepare
メソッドを呼び出します。ステートメントが準備できたら、クエリの各動的要素にパラメータを加えます。
クエリとパラメータを入力した後、.ExecuteNonQuery()
、.ExecuteScalar()
、または
.ExecuteReader
のメソッドを使用してステートメントを実行します。
後続の実行では、パラメータの値を改変し、execute
メソッドを呼び出すだけで済み、.CommandText
プロパティを設定したり、パラメータを定義し直す必要はありません。
Visual Basic 例 :
NotInheritable Public Class MySqlConnection_ Inherits Component_ Implements IDbConnection, ICloneable
C# 例 :
public sealed class MySqlConnection : Component, IDbConnection, ICloneable
MySQL バージョン 5 のリリースにより、MySQL サーバは、SQL 2003 ストアド プロシージャ シンタックスでストアド プロシージャをサポートするようになりました。
ストアド プロシージャは、サーバで保管が可能な SQL 文です。これが実行されると、クライアントは各ステートメントを発行し続ける必要がなくなり、代わりにストアド プロシージャを参照します。
ストアド プロシージャは、次のような状況で特に利点があります :
複数のクライアントが、複数の言語で書かれている場合、または異なるプラットフォームで使用するが、同じデータベース操作を行う必要がある場合。
セキュリティを最優先する場合。例えば銀行では、すべての通常的なオペレーションにストアド プロシージャを使用します。ストアド プロシージャは安全で安定した環境を供給し、プロシージャは各オペレーションが正しくログされるよう保証します。このようなセットアップでは、アプリケーションとユーザはデータベース テーブルへ直接アクセスされる心配がなく、特定のストアド プロシージャのみを実行します。
Connector/NET は、MySqlCommand
オブジェクトを通したストアド
プロシージャの呼び出しをサポートします。MySqlCommand.Parameters
コレクションの使用を通じて、MySQL ストアド
プロシージャにデータを受け渡しすることができます。
ストアド
プロシージャを呼び出す際、コマンド
オブジェクトは追加の SELECT
呼び出しでストアド
プロシージャのパラメータを決定します。プロシージャを呼び出すユーザは、パラメータの検証を行うために、mysql.proc
テーブルの SELECT
権限を取得していなければなりません。権限を持たないと、プロシージャを呼び出す際にエラーが発生します。
このセクションには、Stored Procedures の作成の詳しい情報は記載されていません。それらの詳細は、http://dev.mysql.com/doc/mysql/en/stored-procedures.html をご覧ください。
Connector/NET でのストアド
プロシージャの使用例を示したアプリケーションのサンプルは、Connector/NET
インストレーションの Samples
ディレクトリでご覧いただけます。
MySQL のストアド
プロシージャは、様々なツールを使用して作成することができます。まず、ストアド
プロシージャは mysql
コマンドラインのクライアントを使って作成できます。次に、MySQL
Query Browser
GUI
クライアントでも作成できます。最後に、MySqlCommand
オブジェクトの .ExecuteNonQuery
メソッドでも作成することができます :
Visual Basic 例 :
Overloads Public Sub New()
C# 例 :
public MySqlConnection();
Connector/NET でストアド プロシージャを作成する際、コマンドラインや GUI クライアントとは異なり、特別な区切り符号を指定する必要がないのも特筆するべき点です。
Connector/NET を使用してストアド
プロシージャを呼び出すには、MySqlCommand
オブジェクトを作成し、ストアド
プロシージャ名を .CommandText
プロパティとして渡します。.CommandType
プロパティを
CommandType.StoredProcedure
に設定してください。
ストアド
プロシージャに名前が付けられたら、ストアド
プロシージャのすべてのパラメータにつき、MySqlCommand
パラメータをひとつ作成します。IN
パラメータは、パラメータ名と値を含むオブジェクトで定義され、OUT
パラメータはパラメータ名と戻される予定のデータタイプで定義されます。すべてのパラメータは、パラメータの方向が定義されなければなりません。
パラメータを定義した後、MySqlCommand.ExecuteNonQuery()
メソッドを使用して、ストアド
プロシージャを呼び出してください :
Visual Basic 例 :
Overloads Public Sub New( _ ByVal connectionString As String _ )
C# 例 :
public MySqlConnection( stringconnectionString );
ストアド
プロシージャが呼び出されたら、MySqlConnector.Parameters
コレクションの .Value
プロパティを使って、出力パラメータの値を取り出すことができます。
MySQL
の一般的な使い方のひとつに、BLOB
カラムのバイナリ
データの保管があります。MySQL は 4 種類の BLOB
データタイプをサポートしています
:TINYBLOB
、BLOB
、MEDIUMBLOB
、および
LONGBLOB
。
BLOB カラムに保管されたデータには、Connector/NET を使ってアクセスすることができ、クライアント側コードで操作することができます。BLOB データで Connector/NET を使用するための特別な条件はありません。
簡単なコードの例は、このセクションに記載されています。アプリケーションの完全なサンプルは、Connector/NET
インストレーションの Samples
ディレクトリでご覧いただけます。
まず最初に、BLOB データで MySQL を使用すると、サーバが構成されます。アクセスするテーブルの作成から始めましょう。例に取り上げるファイル テーブルには、4 つのカラムがあります :ファイルを特定するプライマリ キーとして作動する、適切なサイズ (UNSIGNED SMALLINT) の AUTO_INCREMENT カラム、ファイル名を保管する VARCHAR カラム、ファイルのサイズを保管する UNSIGNED MEDIUMINT カラム、そしてファイルそのものを保管する MEDIUMBLOB カラム。例えば、次のテーブル定義を使用するとします :
NotOverridable Public Property ConnectionString As String _ _ Implements IDbConnection.ConnectionString
テーブルを作成した後、max_allowed_packet システム変数を改変しなければならない場合があります。この変数は、MySQL サーバに遅れるパケットの大きさ ( 例 : 1 行 ) を特定します。デフォルトでは、サーバーは最大 1 メガのサイズしかクライアント アプリケーションから受け入れないようになっています。1 メガを越えることがないようならば、これで問題ありません。1 メガを越えるファイルを転送する場合は、この数字を上げる必要があります。
max_allowed_packet オプションは、MySQL
Administrator's Startup Variables
画面で改変することができます。Networking
タブの Memory セクションにある Maximum Allowed
オプションを、適切な設定に調節します。値を調節したら、Service Control
画面でサーバを再起動します。また、my.cnf
ファイルで直接この値を変えることもできます
( max_allowed_packet=xxM を読み取るラインを加える
) 。MySQL 内の SET max_allowed_packet=xxM;
シンタックスを使用しても値を調節できます。
BLOB データの転送には時間がかかることがあるので、max_allowed_packet の設定は慎重に行ってください。使用目的に適した値を設定し、必要に応じて値を上げるようにしてください。
データベースへファイルを書き込むには、ファイルをバイト列に変換し、そしてそのバイト列を
INSERT
クエリへのパラメータとして使用します。
次のコードは、FileStream
オブジェクトを使用してファイルを開き、バイト列に読み出して、それを
file
テーブルに挿入します :
Visual Basic 例 :
public string ConnectionString {get; set;}
C# 例 :
NotOverridable Public ReadOnly Property ConnectionTimeout As Integer _ _ Implements IDbConnection.ConnectionTimeout
FileStream
オブジェクトの
Read
メソッドは、ファイルを
FileStream オブジェクトの Length
プロパティによってサイズ分類されたバイト列にロードするために使われます。
バイト列を MySqlCommand
オブジェクトのパラメータとして割り当てた後、ExecuteNonQuery
メソッドが呼び出され、BLOB が
file
テーブルに挿入されます。
フィールドが file
テーブルにロードされたら、MySqlDataReader
クラスを使用してそれを取り出すことができます。
次のコードは file
テーブルからコードを取り出し、そしてそのデータを
FileStream
オブジェクトにロードしてディスクへ書き込みます
:
Visual Basic 例 :
public int ConnectionTimeout {get;}
C# 例 :
NotOverridable Public ReadOnly Property Database As String _ _ Implements IDbConnection.Database
接続後、file
テーブルのコンテンツは
MySqlDataReader
オブジェクトにロードされます。MySqlDataReader
の GetBytes
メソッドによって BLOB
がバイト列にロードされ、FileStream
オブジェクトを使ってディスクに書き込まれます。
MySqlDataReader の GetOrdinal
メソッドで、名前付きカラムの整数インデックスを定義することができます。SELECT
クエリのカラムの順が変更された場合、GetOrdinal
メソッドを使用すると、エラーを防ぐことができます。
Crystal Reports は Windows アプリケーション開発者が使用する一般的なツールで、レポートとドキュメントの生成を行います。このセクションでは、MySQL および Connector/NET との Crystal Reports XI の使用方法を説明します。
Crystal Reports でレポートを作成する際、レポートを設計しながら MySQL データにアクセスするためのオプションがふたつあります。
第一のオプションは、レポートを設計する時に、Connector/ODBC を ADO データとして使用する方法です。データベースをブラウズし、テーブルやフィールドを選んで、ドラッグ アンド ドロップでレポートを構築することがでいます。この方法の欠点は、レポートが示すものと一致するデータセットを生成するために、アプリケーション内で追加の操作を行わなければいけないことです。
第二のオプションは、VB.NET でデータセットを作成し、XML として保存する方法です。この XML ファイルはレポートの設計に使用することができます。この方法は、アプリケーションにレポートを表示する時には非常に効果的ですが、データセットを作成する際に関連するカラムをすべて選ばなければならないので、設計時間の点で劣ります。カラムを忘れてしまった場合は、カラムをレポートに追加する前にデータセットを再作成する必要があります。
次のコードはクエリからのデータセットの作成と、ディスクへの書き込みに使用できます :
Visual Basic 例 :
public string Database {get;}
C# 例 :
Public ReadOnly Property DataSource As String
XML ファイルの結果物は、レポートを設計する際に ADO.NET XML データソースとして使用できます。
Connector/ODBC を使用してレポートを設計する場合は、dev.mysql.com からダウンロードすることができます。
ほとんどの目的において、Standard Report ウィザードはレポートの初期作成を助けます。ウィザードを立ち上げるには、Crystal Reports を開き、File メニュから New > Standard Report オプションを選択します。
ウィザードはまず、データソースの入力を促します。Connector/ODBC をデータソースとして使用している場合、データソースを選択する際に、ODBC (RDO) ツリーではなく、OLE DB (ADO) ツリーからの ODBC オプションに OLEDB プロバイダを使用します。保存されたデータセットを使用している場合は、ADO.NET (XML) オプションを使用して、保存されたデータセットをブラウズします。
レポート作成プロセスの残部はウィザードが自動的に行います。
レポートが作成されたら、Report Options... entry of the File メニュを選びます。Save Data With Report オプションのチェックを外してください。これによって、保存されたデータがアプリケーション内のデータのロードを妨げるのを防ぎます。
レポートを表示するには、まずレポートに必要なデータをデータセットに移植し、そしてレポートをロード、データセットに結合させます。最後に、レポートを crViewer コントロールに渡してユーザに表示します。
次のリファレンスはレポートを表示するプロジェクトに必要なものです :
CrytalDecisions.CrystalReports.Engine
CrystalDecisions.ReportSource
CrystalDecisions.Shared
CrystalDecisions.Windows.Forms
次のコードは、レポートが
項24.2.4.5.2. 「データソースの作成」
で示されているコードを使用して保存されたデータセットで作成され、フォームに
myViewer
と名付けられた crViewer
コントロールがあるという前提で書かれています。
Visual Basic 例 :
public string DataSource {get;}
C# 例 :
Public ReadOnly Property ServerThread As Integer
新しいデータセットは、保存された以前のデータセットに使用された同じクエリで生成されます。データセットへの記入が終わったら、ReportDocument によってレポート ファイルがロードされ、データセットへ結合されます。ReportDocument は、crViewer の ReportSource として渡されます。
Connection/ODBC を使用して単一テーブルからレポートが作成される場合にも、同じ方法が取られます。データセットがレポートで使用されたテーブルを交換し、レポートが正しく表示されます。
Connector/ODBC を使って、複数のテーブルからレポートが作成される場合、複数のテーブルとのデータセットは、各自のアプリケーション内で作成されなければなりません。これにより、レポート データソースの各テーブルが、データセットのレポートに取り替えられます。
MySqlCommand オブジェクトに複数の
SELECT
文を供給することにより、複数のテープルをデータセットに移植します。これらの
SELECT
文は、Database メニューの
Show SQL Query オプションの Crystal Reports
に示されている SQL
クエリに基づいています。次のクエリを想定します
:
public int ServerThread {get;}
このクエリは、ふたつの SELECT
クエリに変換され、次のコードで表示されます
:
Visual Basic 例 :
Public ReadOnly Property ServerVersion As String
C# 例 :
public string ServerVersion {get;}
SELECT
クエリをアルファベット順に並べることが重要です。レポートはこの順で入るべきソース
テーブルを予想します。
この方法は、Crystal Reports がクライアント側でテーブル同士を結合させる必要があり、保存済みのデータセットを使用するより遅くなるため、性能上の問題があります。
MySQL と .NET
言語の日付時間情報の処理は異なり、MySQL は
'0000-00-00 00:00:00
'
のような、.NET データ
タイプでは表せない日付も使用することができます。適切に処理を行わなければ、この違いによって問題が起きることがあります。
このセクションでは、Connector/NET を使用する場合の、日付時間情報の正しい処理の方法を説明します。
日付の処理の違いは、無効な日付を使用する開発者にとって問題の原因になりえます。無効な
MySQL の日付を、NULL
の日付を含む、ネイティブの .NET
DateTime
オブジェクトにロードすることはできません。
この問題により、無効な日付は
System.ArgumentOutOfRangeException
例外の発生の原因になるので、.NET
DataSet
オブジェクトを
MySqlDataAdapter
クラスの
Fill
メソッドで作成することはできません。
日付の問題に対する最善の解決策は、ユーザの無効な日付の使用を制限することです。これはクライアント側、またはサーバ側で行えます。
クライアント側で無効な日付を制限するのは簡単で、データの処理に常に
.NET DateTime
クラスを使用するだけです。DateTime
クラスは、データベース内の値も有効であることを確認し、有効な日付だけを許可します。この方法の欠点は、それぞれのアプリケーションが独自の日付の発行を行う必要があり、データベースの操作に
.NET および .NET
コードが使われている混合環境での使用が困難な点です。
MySQL 5.0.2
以降のユーザは、無効な日付値の使用を制限する、新しい
traditional
SQL
モードを使用することができます。traditional
SQL
モードの使用に関する情報は、項4.2.6. 「SQL モード」
をご覧ください。
.NET
アプリケーションでの無効な日付の使用は避けることが推奨されますが、MySqlDateTime
データタイプを用いて無効な日付を使用することは可能です。
MySqlDateTime
データタイプは、MySQL
サーバでサポートされている日付値と同じものを適用しています。Connector/NET
のデフォルト動作は、.NET DateTime
オブジェクトを有効な日付値に戻し、エラーを無効な日付に返します。このデフォルトは、Connector/NET
が無効な日付に MySqlDateTime
オブジェクトを返すように改変できます。
無効な日付に MySqlDateTime
を返すよう Connector/NET
に指示するには、次のラインを接続ストリングに追加してください
:
NotOverridable Public ReadOnly Property State As ConnectionState _ _ Implements IDbConnection.State
MySqlDateTime
クラスの使用には、依然として問題があることに注意してください。以下は既知の問題の一部です
:
無効な日付のデータ構築は依然、エラーの原因になります ( 0000-00-00 などのゼロの日付ではこの問題は起こらない模様 ) 。
ToString
メソッドは、標準の
MySQL
の形式でフォーマットされた日付を戻します
( 例えば、2005-02-23 08:50:25
)
。これは、.NET DateTime クラスの
ToString
動作とは異なるものです。
MySqlDateTime
クラスは NULL
の日付をサポートし、.NET DateTime
クラスはこれをサポートしません。この差により、MySQLDateTime
を DateTime に変換する時、最初に NULL
を確認しておかなければエラーが発生します。
これは既知の問題であるため、有効な日付のみをアプリケーションで使用するのが最善の方法になります。
.NET DateTime
データタイプは、NULL
値を処理することができません。そのため、クエリから
DateTime
変数に値を設定する時、最初に値が
NULL
かどうかを確認する必要があります。
MySqlDataReader
を使用している時、設定の前に
.IsDBNull
メソッドを使って、値が
NULL
か確認してください。
Visual Basic 例 :
public System.Data.ConnectionState State {get;}
C# 例 :
Public ReadOnly Property UseCompression As Boolean
NULL
値はデータセット内で作用し、特別な処理なしで結合してコントロールを形成することが可能です。
Connector/NET の開発者は、ソフトウェア開発のプロセスにおいて、ユーザの声を大変貴重なものと考えています。Connector/NET が大切な機能を欠いているとお気づきになった場合、またはバグを発見し、バグ レポートを提出したい場合は、項1.7. 「質問またはバグの報告」 の指示をお読みください。
Connector/NET のコミュニティー支援は、http://forums.mysql.com のフォーラムで得ることができます。
また、Connector/NET のコミュニティー支援を、http://lists.mysql.com のメーリング リストを介して得ることも可能です。
MySQL AB では有料サポートも提供しています。その他の情報は http://www.mysql.com/support/ でご覧いただけます。
Connector/NET に不具合や問題があった場合は、Connector/NET コミュニティー 項24.2.5.1. 「Connector/NET のコミュニティー支援」 にご連絡ください。
まず最初に、mysql クライアント
プログラムか、admndemo
からの同じ
SQL
文やコマンドを実行してみてください。エラーが
Connector/NET か MySQL
で発生しているものか調べることができます。
問題をレポートする際は、メールに次の情報をご記入いただくと参考になります。
オペレーション システムとバージョン
Connector/NET のバージョン
MySQL サーバのバージョン
エラー メッセージ、または他の想定外のアウトプットのコピー。
簡単な再現可能サンプル
詳しい詳細を提供していただくのが問題解決には一番ですので、その旨をご理解ください。
バグの問題と思われる場合は、http://bugs.mysql.com/ からバグをレポートするようお願いします。
Connector/NET Change History ( Changelog ) は、MySQL のメイン Changelog に収められています。項C.3. 「Connector/NET Change History」 参照。
MySQL Visual Studio プラグインは DDEX プロバイダです。データベース構成の維持管理を可能にする Visual Studio 2005 用のプラグインで、内蔵のデータ駆動型アプリケーションをサポートします。
現行バージョンの MySQL Visual Studio プラグインには、データベース保守 ツールのみが含まれています。データ駆動型アプリケーション開発ツールはサポートされていません。
MySQL DDEX プロバイダは、Visual Studio 2005 の Server Explorer メニューを通じて使用できる Visual Studio Data Designer 機能の標準エクステンションとして作動し、MySQL データベース内のデータベース オブジェクトとデータの作成を可能にします。
MySQL Visual Studio プラグインは MySQL バージョン 5.0 との使用を目的にデザインされていますが、MySQL 4.1.1 とも互換性があり、また SQL 5.1 にも制限付きで適応します。
MySQL Visual Studio プラグインを利用するには、Visual Studio 2005 Professional Edition がインストールされていなければならず、従って動作環境とシステムの必要条件も同じということになります。
下記は MySQL Visual Studio プラグインをインストールする前に、あらかじめ導入しておくべきコンポーネントのリストです。
Visual Studio 2005 Standard、Professional、または Team Developer Edition
MySQL Server 4.1.1 以降 ( 同じマシンか別のサーバにインストールされたもの )
MySQL Connector/NET 5.0.
Connector/NET をインストールする際、まず Global Assembly Cache (GAC) にコネクタがインストール済みか確認してください。Connector/NET インストーラはこの作業を自動的に行うようになっていますが、カスタム インストー ルではこのオプションが無効になっている場合があります。
以前からMySQL サーバへ接続しているユーザーがMySQL Visual Studio プラグインの機能を利用するには、以下の権限を取得しなければなりません。
INFORMATION_SCHEMA
データベースに対する SELECT
権限
SHOW CREATE TABLE
文に対する
EXECUTE
権限
mysql.proc
テーブルに対する
SELECT
権限 ( ストアド
プロシージャおよびファンクションの操作に必要
)
mysql.func
テーブルに対する
SELECT
権限 ( ユーザ定義関数 (UDF)
の操作に必要 )
SHOW ENGINE STATUS
文に対する
EXECUTE
権限 (
拡張エラー情報の読み出しに必要 )
実行された操作に対する適切な特権 ( 例 :
テーブルからデー タを閲覧するために必要な
SELECT
特権、等 )
MySQL Visual Studio プラグインは、 プロバイダのインストール、アンインストール、または再インストールに使用できる MSI パッケージとして配信されます。Windows XP か Windows Server 2003 を使用していない場合は、Windows Installer System を最新バージョンにアップグレードしてください ( http://support.microsoft.com/default.aspx?scid=kb;EN-US;292539 参照 )
MSI パッケージの名称は
MySQL.VisualStudio.msi
です。MySQL Visual
Studio プラグインをインストールするには、MSI
ファイルを右クリックし、
を選択します。インストールの手順は次の通りです。
標準の Welcome ダイアログが開きます。Next をクリックし、インストールを続けます。
License agreement (GNU GPL) ウィンドウが開きます。契約に合意し、
をクリックして次に進みます。
移動先フォルダを指定するダイアログが開きます。ここで、MySQL
Visual Studio
プラグインがインストールされるフォルダを指定できます。デフォルトの移動先フォルダは
%ProgramFilesDir%\MySQL\MySQL DDEX Data
Provider
で、%ProgramFilesDir%
がインストールするマシンの Program Files
フォルダになります。移動先フォルダを選択したら、
をクリックして次に進みます。
インストーラが、インストールの確認を求めます。Install をクリックしてインストールを開始してください。
インストールが開始します。この段階の最後に、Visual Studio コマンド テーブルが再構築されます ( このプロセスの完了には数分間かかります) 。
インストールが完了したら、
ボタンをクリックしてインストールを終了します。MySQL Visual Studio プラグインをアンインストールする場合は、Control Panel の Add/Remove Programs コンポーネントか、同じ MSI パッケージを使用す ることができます。Remove オプションを選択すると、プロバイダは自動的にアンインストールされます。
プロバイダを修復するには、MSI パッケージを右クリックし、
オプションを選択。MySQL Visual Studio プラグインが自動的に修復されます。インストール パッケージには次のファイルが含まれています。
MySQL.VisualStudio.dll
? MySQL DDEX
プロバイダ アセンブリ
MySQL.Data.dll
?
プロバイダが使用する MySQL Connector .NET
を含んだアセンブリ
MySql.VisualStudio.dll.config
?
MySQL Visual Studio
プラグインの情報設定ファイル。このファイルにはプロバイダの
GUI
レイアウトのデフォルト値が含まれています。
プロバイダを実際に使用してみるまで、このファイルは削除しないでください。
Register.reg
?
手作業でインストールする場合に、MySQL DDEX
プロバイダを登録するのに使用するレジストリ登録のファイル
Install.js
? Connector .NET を
machine.config ファイル内の ADO.NET データ
プロバイダとして登録するために使用するスクリプト
Release notes.doc
?
リリース情報のドキュメント
プロバイダを手作業でインストールするには、インストール パッケージの全ファイルを希望の保存先にコピーし、プロバイダ アセンブリにフルパスを CodeBase 項目の値として設定する。例:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Packages\{79A115C9-B133-4891-9E7B-242509DAD272}]@="MySql.Data.VisualStudio.MySqlDataProviderPackage" "InprocServer32"="C:\\WINNT\\system32\\mscoree.dll" "Class"="MySql.Data.VisualStudio.MySqlDataProviderPackage" "CodeBase"="C:\\MySqlDdexProvider\\MySql.VisualStudio.dll"
次に、Register.reg ファイルからの情報を、ファイルをクリックしてレジストリにインポートします。確認ダイアログでは「 Yes 」を選択してください。次に、Command Prompt 内の devenv.exe /setup コマンドを実行し、Visual Studio コマンド テーブルを再構築します。
MySQL Visual Studio プラグインをインストールし終えたら、MySQL データベースとの接続を作成、変更、削除することができます。MySQL データベースとの接続を作成するには、次の手順を実行してください。
Visual Studio 2005 を開始し、
メニューから オプションを選択して、Server Explorer ウィンドウを開きます。Data Connections ノードを右クリックして、 ボタンを選択します。
Add Connection ダイアログが開きます。
ボタンを押して、MySQL Database をデータソースに指定します。
Change Data Source
ダイアログが開きます。データソースの中から
MySQL Database を選び ( MySQL Database
がない場合はother
オプションを選択 ) 、データ
プロバイダの選択情報から .NET Framework
Data Provider for MySQL を選択します。
を押して、選択を確認します。
接続設定を入力します。サーバホスト名 ( 例えば、MySQL サーバがローカル マシンにインストールされる場合は localhost ) 、ユーザ名、パスワード、およびデフォルト データベース スキーマ。接続する際にはデフォルト スキーマ名の指定が必要になるので注意してください。
ボタンを押すと、MySQL サーバの接続に使用するポートを設定することもできます。MySQL サーバとの接続をテストするには、サーバホスト名、ユーザ名、パスワードを設定し、 ボタンを押します。テストが失敗した場合は、入力した接続値が正しいか、ユーザとその MySQL サーバでの権限が設定されているか確認してください。
すべての設定をセットし、接続をテストして問題がなければ
を押します。新しく作成された接続は、Server Explorer に表示されます。これで、標準 Server Explorer インターフェースを通して MySQL サーバを使用することができます。接続が正常に稼動したら、すべての接続設定は保存されます。次回また Visual Studio を開くと、MySQL サーバへの接続が Server Explorer に表示されるので、また MySQL サーバへ接続することができます。
接続を変更または削除する場合は、
コンテキスト メニューを使用してノードに対応します。現行の値を新しいものに上書きするだけで、設定を変更できます。接続の変更・削除は、そのオブジェクトのエディタが開いていない時に行うよう注意してください。データが失われる恐れがあります。MySQL Visual Studio プラグインを利用して MySQL サーバを使用するには、Visual Studio 2005 を立ち上げ、Server Explorer を開き、必要な接続を選択します。MySQL Visual Studio プラグインの作業エリアは3つの構成になっています。
データベース オブジェクト ( テーブル、ビュー、内臓ルーチン、トリガ、ユーザ定義関数 ) が Server Explorer のツリーに表示されます。ここでは、オブジェクトを選択し、プロパティと定義を変更することができます。
選択したデータベース オブジェクトのプロパティは、Properties パネルに表示されます。プロパティのいくつかは、このウィンドウから直接変更できます。
編集パネルから、SQL 文や特定のオブジェクトの定義に直接アクセスすることができます。例えば、ストアド プロシージャ定義内の SQL 文もこのパネルで表示・変更できます。
Table Editor には、Server Explorer のテーブルタイプ ノードからマウス操作でアクセスすることができます。新しいテーブルを作成するには、Table ノード ( 接続ノード下 ) を右クリックし、コンテキスト メニューから コマンドを選択します。現存のテーブルを編集するには、変更したいテーブルのノードをダブル クリックするか、同じノードを右クリックしてコンテキスト メニューから コマンドを選択します。どちらのコマンドでも Table Editor を開くことができます。
MySQL Visual Studio Plugin Table Editor は標準 Query Browser Table Editor と同様の方法で実行されますが、やや異なる部分があります。
Table Editor は以下の部位で構成されています。
Columns Editor ? カラムの作成、変更、削除
Indexes タブ ? テーブルおよびカラムのインデックス管理
Foreign Keys タブ ? 外部キーの構成
Column Details タブ ? 高度なカラム オプションの設定に使用
Properties ウィンドウ ? テーブルのプロパティの設定に使用
Table Editor での変更を保存するには、Visual Studio のメイン ツールバーにある Save または Save All ボタンを使うか、Ctrl+S を押してください。変更を保存する前に、MySQL データベース内の対象オブジェクトのアップデート承認を求める確認ダイアログが表示されます。
Column Editor を使用して、テーブル カラムの名称やデータ タイプ、デフォルト値、その他のプロパティを設定・変更することができます。各カラムのプロパティを設定するには、マウスでカラムを選択します。または、Tab キーと Shift+Tab を使ってグリッドからグリッドへ移動する方法もあります。
カラムの名称やデータ タイプ、デフォルト値、コメントを設定および変更するには、該当のセルを選択し、値を編集します。
フラグ型カラムのプロパティ ( 例 :
プライマリ キー、NOT NULL
、自動インクリメントのもの、フラグ )
を設定または設定解除するには、該当するチェックボックスをチェック、または未チェックにします。使用可能なカラム
フラグはカラムのデータ
タイプによって違うので注意してください。
カラムやインデックス カラム、または外部キー カラムの順序変更を Column Editor で行うには、カラム グリッドの左側にあるセレクタ カラムをクリックして、順序変更をしたいカラム全体を選択します。次に、Ctrl+Up ( カラムを上に移動 ) や Ctrl+Down ( カラムを下に移動 ) キーを使ってカラムを移動させます。
カラムを削除するには、カラム グリッドの左側にあるカラム セレクタをクリックし、キーボードの Delete ボタンを押します。
インデックスの管理は Indexes タブを介して行われます。
インデックスを加えるには、Index Settings グループ ボックスでプロパティを設定します。インデックスの名称、種類、タイプ、インデックス カラムのセットを設定することができます。
ボタンを押し、右側のインデックスを取り除くには、リストから対象のインデックスを選び、
ボタンを押します。インデックスの設定を変更するには、対象のインデックスをリストから選択、インデックスの詳細情報は Index Settings パネルに表示されます。
テーブル カラムをドラッグ アンド ドロップでインデックス カラムにすることはできません。その代わり、テーブルに新しいインデックス カラムを加え、Indexes タブ内に埋め込まれたエディタを使ってそれらのテーブル カラムをセットできます。
Foreign Key の管理は、Foreign Keys タブを介して行われます。
外部キーを加えるには、Foreign Keys Settings パネルでプロパティを設定します。外部キーの名称、参照されるテーブルの名称、外部キー コラムと、更新と削除動作の設定をすることができます。
ボタンを押し、外部キーを取り除くには、該当の外部キーを選び、
ボタンを押します。外部キーの設定を変更するには、該当の外部キーを選択し、Foreign Keys Settings パネルを使ってプロパティを変更します。
外部キーが変更されたら、MySQL Visual Studio プラグインがふたつの照会を形成します。第1の照会は変更されたキーの除去を、第2の照会は新しい値の再作成を確認をします。この動作は、Bug#8377 と Bug#8919 を回避するためのものです。
変更された値がなんらかの理由で矛盾し、第2の照会の失敗の原因となった場合は、影響のあるすべての外部キーが除去されます。その場合、MySQL VIsual Studio プラグインは Table Editor 内にそれらのキーを新規としてマークするので、あとで再作成する必要があります。しかし、Table Editor を保存せずに閉じると、それらの外部キーは失われます。
Column Details タブはカラム オプションの設定に使用できます。Column Editor に表示されるメイン カラム プロパティに加え、Column Details タブでふたつの追加のプロパティ オプション、キャラクタセットと照合順序が設定できます。
テーブル オプションと高度オプションはすべて同じタブにあります。すべてのテーブル オプションは、Visual Studio 2005 の Properties ウィンドウで参照・変更できます。
以下のテーブル プロパティが設定できます。
Auto Increment
Average Row Length
Character Set
Checksum for Rows
Collation
Comment
Connection
Data Directory
Delay Key Updates
Engine
Index Directory
Insert Method
Maximum Rows
Minimum Rows
Name
Pack Keys
Password
Row Format
Union
これらのプロパティのいくつかは任意のテキスト値を設定することができ、その他は事前定義セットからの値を受け入れます。
Schema と Server のプロパティは読み取り専用です。
Table Data Editor では、テーブルのデータの参照、作成、編集ができます。Table Data Editor は自動作成カラム付きの簡単なデータ グリッドとして実行されます。
Table Data Editor へアクセスするには、テーブルを提示しているノードか、Server Explorer のビューを右クリックします。ノードのコンテキスト メニューから、
か コマンドを選択します。テーブルと更新可能なビューでは、このコマンドが編集モードで Table Data Editor を開きます。更新不可能なビューでは、このコマンドは読み取り専用モードで Table Data Editor を開きます。編集モードの場合、表示されたテーブルの内容を直接変えることで、テーブル データを変更することができます。横列を追加するには、グリッドの最後列で希望の値を設定します。値を変更するには、適切なセルに新しい値を入力します。横列を削除するには、グリッド左側のセレクタ カラムをクリックして対象列を選択し、
ボタンを押します。Table Editor での変更を保存するには、Visual Studio のメイン ツールバーにある Ctrl+S を押してください。確認ダイアログが、変更をデータベースに保存するか確認します。
または ボタンを使うか、新しいビューを作成するには、Server Explorer の接続ノード下の View ノードを右クリックします。ノードのコンテキスト メニューから、
コマンドを選択します。このコマンドで SQL Editor が開きます。現存のビューを編集するには、変更したいビューのノードをダブル クリックするか、同じノードを右クリックしてコンテキスト メニューから
コマンドを選択します。どちらのコマンドでも SQL Editor を開くことができます。SQL Editor を使ってビュー定義を作成・変更するには、SQL Editor に適切な SQL 文を入力します。
定義文のみを入力し、CREATE VIEW
AS
序文は除外してください。
他のすべてのビュー プロパティは Properties ウィンドウで設定できます。それらのプロパティは以下です。
Algorithm
Check Option
Definer
Name
Security Type
これらのプロパティのいくつかは任意のテキスト値を設定することができ、その他は事前定義セットからの値を受け入れます。
Is Updatable 、Schema 、Server プロパティは読み出し専用です。
変更を保存するには、Visual Studio のメイン ツールバーにある Ctrl+S を押してください。確認ダイアログが、変更をデータベースに保存するか確認します。
または ボタンを使うか、新しいストアド プロシージャを作成するには、Server Explorer の接続ノード下の Stored Procedures ノードを右クリックします。ノードのコンテキスト メニューから、
コマンドを選択します。このコマンドで SQL Editor が開きます。新しいストアド プロシージャを作成するには、Server Explorer の接続ノード下の Functions ノードを右クリックします。ノードのコンテキスト メニューから、 コマンドを選択します。
現存の内臓ルーチンを編集するには ( プロシージャまたはファンクション ) 、変更したいルーチンのノードをダブル クリックするか、同じノードを右クリックしてコンテキスト メニューから
コマンドを選択します。どちらのコマンドでも SQL Editor を開くことができます。SQL Editor を使ってルーチン定義を作成・変更するには、標準 SQL を使用して SQL Editor にこの定義を入力します。
他のすべてのルーチン プロパティは Properties ウィンドウで設定できます。それらのプロパティは以下です。
Comment
Data Access
Definer
Is Deterministic
Security Type
これらのプロパティのいくつかは任意のテキスト値を設定することができ、その他は事前定義セットからの値を受け入れます。
また、標準 CREATE PROCEDURE
か
CREATE FUNCTION
文を使用して、すべてのオプションを SQL Editor
から直接設定することができます。しかしそれよりも、Properties
ウィンドウの使用をお勧めします。
ルーチン定義には決して CREATE
序文を加えないでください。
Properties ウィンドウの Name 、Schema 、Server プロパティは読み出し専用です。SQL エディタでプロシージャ名を設定または変更してください。
変更を保存するには、Visual Studio のメイン ツールバーにある Ctrl+S を押してください。確認ダイアログが、変更をデータベースに保存するか確認します。
または ボタンを使うか、新しいトリガを作成するには、トリガを新たに加えたいテーブルのノードを右クリックします。ノードのコンテキスト メニューから、
コマンドを選択します。このコマンドで SQL Editor が開きます。現存のトリガを編集するには、変更したいトリガのノードをダブル クリックするか、同じノードを右クリックしてコンテキスト メニューから
コマンドを選択します。どちらのコマンドでも SQL Editor を開くことができます。SQL Editor を使ってトリガ定義を作成・変更するには、標準 SQL を使用して SQL Editor にトリガ文を入力します。
FOR EACH ROW
句の後にある
CREATE TRIGGER
問い合わせの一部の、トリガ文のみを入力してください。
他のすべてのトリガ プロパティは Properties ウィンドウで設定できます。それらのプロパティは以下です。
Definer
Event Manipulation
Name
Timing
これらのプロパティのいくつかは任意のテキスト値を設定することができ、その他は事前定義セットからの値を受け入れます。
Properties ウィンドウの Event Table 、Schema 、Server プロパティは読み出し専用です。
変更を保存するには、Visual Studio のメイン ツールバーにある Ctrl+S を押してください。確認ダイアログが、変更をデータベースに保存するか確認します。
または ボタンを使うか、新しいユーザ定義関数 ( UDF ) を作成するには、Server Explorer の接続ノード下の UDFs ノードを右クリックします。ノードのコンテキスト メニューから、
コマンドを選択します。このコマンドで UDF Editor が開きます。現存の UDF を編集するには、変更したい UDF のノードをダブル クリックするか、同じノードを右クリックしてコンテキスト メニューから Alter UDF コマンドを選択します。どちらのコマンドでも UDF Editor を開くことができます。
UDF エディタでは、プロパティ パネルを介して次のプロパティを設定することができます。
Name
So-name (DLL name)
Return type
Is Aggregate
Properties ウィンドウの Server プロパティは読み出し専用です。
変更を保存するには、Visual Studio のメイン ツールバーにある Ctrl+S を押してください。確認ダイアログが、変更をデータベースに保存するか確認します。
または ボタンを使うか、テーブル、ビュー、内臓ルーチン、トリガ、UDF は各コンテキスト メニューからの適切な
コマンド、 、 、 、 、 で削除することができます。確認ダイアログが、対象の削除問い合わせを実行するか確認を求めます。
複数のオブジェクトの削除はサポートされていません。
感想や、バグを発見した場合は、MySQL バグ トラッキング システム ( http://bugs.mysql.com ) から問題の報告や提案をお寄せください。
Questions
25.3.4.1.1: 接続を作成する時に接続詳細を入力すると、接続ウィンドウが閉じてしまいます。
Questions and Answers
25.3.4.1.1: 接続を作成する時に接続詳細を入力すると、接続ウィンドウが閉じてしまいます。
Connector/NET 5.0.2. 以前のバージョンには問題があり、Connector/NET 1.0.x は作動しないと報告されています。それらのバージョンがインストールされている場合、またはそれ以前のバージョンからアップグレードした場合は、 Connector/NET を完全にアンインストールし、Connector/NET 5.0.2. をインストールしてください。
MySQL は、Java プログラム言語で開発されたクライアント アプリケーションに、JDBC ドライバを介する接続を提供しており、 それを MySQL Connector/J と呼びます。
MySQL Connector/J は JDBC-3.0 Type 4 ドライバで、純粋 Java です。JDBC 仕様のバージョン 3.0 を導入しており、また、MySQL プロトコルを仕様して MySQL サーバと直接通信を行います。
JDBC はそれのみで便利なものですが、このマニュアルの最初の数セクションを読んでみても理解しがたい場合は、無償 JDBC の使用は分かりやすい問題のみにとどめ、JDBC でしばしば必要になる反復作業や、より重要な作業には、 Hibernate 、Spring's JDBC templates 、または Ibatis SQL Maps などの一般的なパーシステンス フレームワークを使用することをお薦めします。
このセクションは、JDBC の完全なチュートリアルとして書かれたものではありません。JDBC の使用に関するさらなる情報をお求めの場合は、次のオンライン チュートリアルにより詳しい情報が掲載されています:
JDBC Basics ? JDBC の初級トピックを収録した、Sun からのチュートリアル。
JDBC Short Course ? Sun と JGuru からの、より詳細なチュートリアル。
現在利用できる Connector/J には 3 バージョンあります :
Connector/J 3.0 はコア機能を提供し、MySQL 3.x または MySQL 4.1 サーバとの接続を条件に設計されていますが、それ以降のバージョンの MySQL にも基本対応が可能です。Connector/J 3.0 はサーバ側プリペアド ステートメントをサポートしていません。また、MySQL 4.1 以降のいかなる機能もサポートしていません。
Connector/J 3.1 は、MySQL 4.1 と MySQL 5.0 のサーバへの接続を条件に設計され、MySQL 5.0 の分散トランザクション (XA) サポートを除いた全機能をサポートしています。
Connector/J 5.0 は、分散トランザクション (XA) サポートを含む、Connector/J 3.1 のすべての機能をサポートしています。
現在推奨されている Connector/J のバージョンは 5.0 です。このガイドでは、コネクタの 3 バージョンすべてをカバーし、特定のオプションへの設定に関する注意を記載しています。
MySQL Connector/J は、以下を含む ava-2 JVM をサポートしています :
JDK 1.2.x ( Connector/J 3.1.x 以前のみ )
JDK 1.3.x
JDK 1.4.x
JDK 1.5.x
ソース配布物を利用して ( 項24.4.2.4. 「開発ソースツリーからのインストール」 参照 ) ソースから Connector/J を構築する場合は、Connector パッケージのコンパイルに JDK 1.4.x 以降を使用する必要があります。
MySQL Connector/J は、JDK-1.1.x または JDK-1.0.x をサポートしていません。
java.sql.Savepoint
の導入により、クラス検証機能がオフ ( Java
ランタイムに -Xverify:none
オプションを設定 )
にされていない限り、Connector/J 3.1.0
以降をバージョン 1.4 より前の JDK
で実行することはできません。これはクラス検証機能が、セーブポイント機能を開発者が使用しない限りドライバからアクセスを受けることはないにもかかわらず、java.sql.Savepoint
にクラス定義をロードしようとするためです。
Connector/J 3.1.0
以降で提供されているキャッシング機能もまた、JDK-1.4.0.
から利用可能になった
java.util.LinkedHashMap
に頼るため、バージョン 1.4 より古い JVM
では利用できません。
Connector/J
パッケージのインストールは、バイナリ配布物かソース配布物を使用して行うことができます。バイナリ配布物の使用はより簡単なインストールの方法です。一方、ソース配布物を使用する場合は、インストールのより複雑なカスタマイズが可能になります。どちらの方法でも、Connector/J
ロケーションを手動で Java CLASSPATH
に追加する必要があります。
インストールの 2 種類の方法のうち、Connector/J
パッケージの
バイナリ配布物を使用する方法は極めて簡単です。バイナリ配布物は
Tar/Gzip または Zip
ファイルの状態で入手することができます。それをまず適当なロケーションに摘出し、オプションとして、CLASSPATH
を変更することで、パッケージの情報を利用可能にします
( 項24.4.2.2. 「ドライバのインストールと CLASSPATH
の構成」 参照 )
。
MySQL Connector/J は、ソース、クラス
ファイル、mysql-connector-java-
と名付けられた JAR アーカイブ、そして
Connector/J 3.1.8
からは、[version]
-bin.jarmysql-connector-java-
と名付けられたファイルにあるドライバのデバッグ
ビルドを含んだ、.zip または .tar.gz
アーカイブとして配布されています。
[version]
-bin-g.jar
Connector/J 3.1.9 からは、JAR ファイルを構成する
.class
ファイルは、ドライバ JAR
ファイルの一部としてのみ含まれています。
ドライバのデバッグ
ビルドは実稼動環境で実行するようには設計されておらず、使用するとパフォーマンスに悪影響が出るため、問題やバグを
MySQL AB
に報告する際に指示されない限り使用しないでください。また、デバッグ
バイナリは、Connector/J 配布物に添付された
src/lib/aspectjrt.jar
ファイルにある、Aspect/J ランタイム
ライブラリに依存します。
開発者は、適切なグラフィカル ユーティリティ、またはコマンドライン ユーティリティを使用して、配布物を未保管にする必要があります ( 例えば、.zip アーカイブには WinZip 、そして .tar.gz アーカイブには tar ) 。配布物には長いファイルネームがある場合があるので、GNU tar アーカイブ フォーマットを使用しています。配布物の .tar.gz 型を解凍するには、GNU tar ( または GNU tar アーカイブ フォーマットを理解するアプリケーション ) を使用する必要があります。
配布物アーカイブを摘出し終えたら、CLASSPATH
環境変数にフルパスを追加するか、JVM
を起動する際にコマンドライン スイッチ -cp
で直接指定して、クラスパスに
mysql-connector-java-[version]-bin.jar
を据えることで、ドライブをインストールすることができます。
JDBC DriverManager
でドライバを使用する場合は、com.mysql.jdbc.Driver
を java.sql.Driver
を実行するクラスとして利用します。
Unix 、Linux 、または Mac OS X 下の
CLASSPATH
環境変数を、ユーザのために
.profile
、.login
、または他のログイン
ファイル内でローカルに設定することができます。また、グローバル
/etc/profile
ファイルを編集すれば、グローバルに設定することも可能です。
例えば、C シェル (csh 、tcsh)
下では、次を使用して Connector/J ドライバを
CLASSPATH
に追加します :
shell> setenv CLASSPATH /path/mysql-connector-java-[ver]-bin.jar:$CLASSPATH
また、Bourne 互換シェル (sh 、ksh 、bash) では :
export set CLASSPATH=/path/mysql-connector-java-[ver]-bin.jar:$CLASSPATH
Windows 2000 、Windows XP 、そして Windows Server 2003 内では、System コントロール パネルを通して環境変数を設定する必要があります。
Tomcat か JBoss などのアプリケーション サーバと
MySQL Connector/J
を使用する場合、ほとんどのアプリケーション
サーバが CLASSPATH
環境変数を無視するため、サードパーティ
クラス
ライブラリの構成に関しては各ベンダーの説明資料をお読みください。J2EE
アプリケーション
サーバの構成例は、項24.4.5.2. 「J2EE および 他の Java フレームワークで Connector/J
を使用する」
を参照してください。ただし、特定のアプリケーション
サーバに対する JDBC
接続プール構成情報の信頼できるソースは、そのアプリケーション
サーバの資料になります。
サーブレット や JSP を開発していて、使用するアプリケーション サーバが J2EE に適合している場合、ドライバの .jar ファイルを webapp の WEB-INF/lib サブディレクトリに入れることができます。それが J2EE ウェブ アプリケーションのサードパーティ クラス ライブラリの標準ロケーションです。
また、使用する J2EE アプリケーション
サーバでサポートまたは要求されていれば、com.mysql.jdbc.jdbc2.optional
パッケージの MysqlDataSource か
MysqlConnectionPoolDataSource
を使用することもできます。Connector/J 5.0.0
からは、javax.sql.XADataSource
インターフェイスは
com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
クラスを介して導入され、MySQL
サーバのバージョン 5.0 と併用すると、XA
分散トランザクションをサポートします。
様々な MysqlDataSource クラスが、以下のパラメータを ( 標準セット ミューテータを通して ) サポートしています :
user
password
serverName ( フェイル オーバ ホストについて前セクションを参照 )
databaseName
port
MySQL AB はアップデートの手順を可能な限り簡潔に保つよう努力しておりますが、どのソフトウェアでもあるように、新しい機能のサポート、現存の機能の改良、または新たな基準の実施などのために、新しいバージョンでは変更があることもあります。
このセクションでは、ユーザが Connector/J のバージョンをアップグレードする( または JDBC 機能に関連して、MySQL サーバを新バージョンにアップグレードする ) 際の注意を記述します。
Connector/J 3.1 は、Connector/J 3.0 にできるだけ後方互換性を持つよう設計されています。主な変更は MySQL-4.1 以降 の新しい機能に特定されており、Unicode 文字セット、サーバ側プリペアド ステートメント、エラー メッセージでサーバによって戻される SQLState 、構成プロパティを介して有効または無効にできる様々な性能強化、などがその対象です。
Unicode 文字セット
? この MySQL
の新機能については、次のセクション、および
章?9. キャラクタセットサポート
をご参照ください。構成ができない場合は通常、
Illegal mix of collations
に似たメッセージでエラーが表示されます。
サーバ側プリペアド ステートメント ? Connector/J 3.1 は、サーバ側プリペアド ステートメントが利用可能な場合、それらを自動的に検出して使用します ( MySQL サーバ バージョン 4.1.0 以降 ) 。
バージョン 3.1.7
からは、Connection.prepareStatement()
のすべての変形を介して準備している SQL
をドライバがスキャンし、サーバ側での準備がサポートされているタイプのステートメントかを判断します。そして、サーバでサポートされていない場合は、クライアント側のエミュレートされるプリペアド
ステートメントとして準備されます。この機能は、emulateUnsupportedPstmts=false
を JDBC URL
で渡すことで無効にすることができます。
アプリケーションとサーバ側プリペアド ステートメントとの間に問題がある場合、接続プロパティ useServerPrepStmts=false で、4.1.0 より前の MySQL サーバでまだ使用されている旧式のクライアント側のエミュレートされたプリペアド ステートメント コードに戻すこともできます。
Datetimes
すべてゼロのコンポーネント
(0000-00-00 ...
) ?
それらの値は、Java
では確実に表示されません。Connector/J 3.0.x
は ResultSet
から読み取る時はいつもそれらを NULL
に変換します。
Connector/J 3.1 は、これらの値が JDBC と SQL の標準に沿う最も適切な動作として検出される場合に、デフォルトとして例外を投入します。この動作は zeroDateTimeBehavior 構成プロパティを使用して変更することができます。許容値は以下 :
exception
( デフォルト ) -
SQLState の S1009
で SQLException
を投入。
convertToNull
-
>データの代わりに NULL
を戻す。
round
-
データを、0001-01-01
という最も近い整数に丸める。
Connector/J 3.1.7
からは、noDatetimeStringSync=true
( デフォルト値は false
)
を介して ResultSet.getString()
をこの動作から切り離すことができ、それによって未修正のすべてゼロの値を
String
として取り出すことができます。また、これはどんなタイムゾーン変換の使用も除外し、そのためドライバは
noDatetimeStringSync と
useTimezone
を同時に有効にすることを拒否しますのでご注意ください。
新しい SQLState コード ? Connector/J 3.1 は、MySQL サーバ ( サポートされている場合 ) によって戻された SQL:1999 SQLState コードを使用します。これは Connector/J 3.0 が使用する旧式の X/Open ステート コードとは異なります。MySQL-4.1.0 より前の MySQL サーバに接続している場合 ( 最も古いバージョンは、SQLState をエラーコードの一部として戻します ) 、ドライバは設定済みのマッピングを使用します。構成プロパティ useSqlStateCodes=false を使うと、以前のマッピングに戻すことが可能です。
ResultSet.getString()
? ResultSet.getString()
を BLOB
カラムで呼び出すと、BLOB の String
表現ではなく、byte[]
アレイのアドレスが戻るようになりました。BLOB
は文字セットを持たないため、データの紛失や破損の心配なく
java.lang.Strings に変換することができます。
ストリングを LOB 動作で MySQL に保存するには、ドライバが java.sql.Clob として扱う TEXT タイプのひとつを使用します。
デバッグ ビルド
? Connector/J 3.1.8
からは、mysql-connector-java-
と名付けられたファイルのドライバのデバッグ
ビルドは、[version]
bin-g.jarmysql-connector-java-
という名の通常バイナリの jar
ファイルに沿って出荷されます。
[version]
-bin.jar
Connector/J 3.1.9 からは、.class ファイルを細分化された状態では出荷しなくなり、それらはドライバと出荷する JAR アーカイブでのみ利用できます。
ドライバのデバッグ
ビルドは実稼動環境で実行するようには設計されておらず、使用するとパフォーマンスに悪影響が出るため、問題やバグを
MySQL AB
に報告する際に指示されない限り使用しないでください。また、デバッグ
バイナリは、Connector/J 配布物に添付された
src/lib/aspectjrt.jar
ファイルにある、Aspect/J ランタイム
ライブラリに依存します。
UTF-8 文字エンコードの使用 - MySQL サーバ 4. 1 より古いバージョンでは、UTF-8 文字エンコードはサーバではサポートされていませんでしたが、JDBC ドライバでは使用が可能で、サーバの latin1 テーブルに複数の文字セットを保存することができました。
MySQL-4.1 からは、この機能は廃止になります。アプリケーションがこの機能を利用しており、MySQL サーバ 4.1 以降での公式の Unicode 文字サポートを使用することができない場合は、次のプロパティを接続 URL に加えてください :
useOldUTF8Behavior=true
サーバ側プリペアド ステートメント - Connector/J 3.1 は、サーバ側プリペアド ステートメントが利用可能な場合、それらを自動的に検出して使用します ( MySQL サーバ バージョン 4.1.0 以降 ) 。アプリケーションとサーバ側プリペアド ステートメントとの間に問題がある場合、次の接続プロパティで、4.1.0 より前の MySQL サーバでまだ使用されている旧式のクライアント側のエミュレートされたプリペアド ステートメント コードに戻すこともできます :
useServerPrepStmts=false
注意 :? 当社の新しいコードのテストにご興味がおありの場合は、このセクションをお読みください。単に MySQL Connector/J をシステム上で稼動させるだけであれば、標準のリリース配布物を使用してください。
開発ソースツリーから MySQL Connector/J をインストールするには、次の前提条件が満たされている必要があります :
リポジトリからのソースを確認する副バージョン ( http://subversion.tigris.org/ で入手可 ) 。
Apache Ant バージョン 1.6 以降 ( http://ant.apache.org/ で入手可 ) 。
JDK-1.4.2 以降。MySQL Connector/J は古い JDK にインストールすることもできますが、ソースからコンパイルするためには JDK-1.4.2 以降が必要になります。
MySQL Connector/J 用の副バージョン ソースコード リポジトリは http://svn.mysql.com/svnpublic/connector-j にあります。普通、リポジトリは MySQL Connector/J 用のすべてのブランチおよびタグを含んでおり、かなりの大きさになるため、全リポジトリの確認はしません。
MySQL Connector/J の特定のブランチを確認し、コンパイルするには、次の手順に従ってください :
この資料の作成時点では、Connector/J
のアクティブ ブランチは 3 つあります
:branch_3_0
、branch_3_1
および
branch_5_0
。次のコマンドで、所望のブランチから最新コードを確認
( [major]
と
[minor]
に適切なバージョン番号を入力 ) 。
shell> svn co ≫
http://svn.mysql.com/svnpublic/connector-j/branches/branch_[major]
_[minor]
/connector-j
これで、希望のブランチの最新ソースを含んだ現行ディレクトリに、connector-j
が作成されます。
connector-j
ディレクトリにロケーションを変更し、現行の作業ディレクトリにします
:
shell> cd connector-j
次のコマンドを発行して、ドライバをコンパイルし、インストールに適した
.jar
ファイルを作成 :
shell> ant dist
これで、現行ディレクトリに
build
ディレクトリが作成され、すべてのビルドの出力先になります。構築に使用しているソースのバージョン番号を含む
build
ディレクトリに、ディレクトリが作成されます。このディレクトリはソース、コンパイルされた
.class
ファイル、そして開発に適した
.jar
ファイルを含みます。完全にパッケージされた配布物を含む、他に可能性のあるターゲットには、次のコマンドを発行します
:
shell> ant --projecthelp
新たに作成された、JDBC ドライバを含む
.jar
ファイルは、ディレクトリ
build/mysql-connector-java-
に配置されます。
[version]
新たに作られた JDBC
ドライバをインストールし、同時に、項24.4.2.2. 「ドライバのインストールと CLASSPATH
の構成」
にある手順で MySQL
からダウンロードしたバイナリ
.jar
ファイルをインストールします。
Connector/J の使用例は、この資料の各所に含まれています。このセクションでは、これらの例の要約とリンクを紹介します。
このマニュアルの当セクションには、MySQL Connector/J の参考資料が記載されています。中には、Connector/J 構築プロセス中に自動的に生成されたものも含まれています。
MySQL Connector/J に java.sql.Driver
を導入するクラスの名称は、com.mysql.jdbc.Driver
です。また、org.gjt.mm.mysql.Driver
クラス名は、MM.MySQL
との後方互換性を保つのにも使用できます。ドライバを登録する際、またそれ以外では
MySQL Connector/J
を使用するようソフトウェアを構成する時に、このクラス名を使用します。
MySQL Connector/J 用の JDBC URL フォーマットは以下。角括弧 ([ 、]) で閉じられたアイテムはオプションです。
jdbc:mysql://[host][,failoverhost...][:port]/[database] ≫ [?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...
ホスト名が指定されていない場合、デフォルトで 127.0.0.1 になります。ポートが指定されていない場合は、デフォルトで3306になり、それがMySQL サーバのデフォルトのポート番号です。
jdbc:mysql://[host:port],[host:port].../[database] ≫ [?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...
データベースが指定されていなければ、デフォルトのデータベースなしで接続が作成されます。その場合、Connection
インスタンスにある setCatalog()
メソッドを呼び出すか、データベース名 ( 例 :
SELECT dbname.tablename.colname FROM
dbname.tablename...
)
を使ってテーブル名を厳密に指定する必要があります。接続に使用するデータベースを指定しない方法は、通常、GUI
データベース
マネージャのように、複数のデータベースと作動するツールを構築する時のみに効果があります。
MySQL Connector/J はフェイルオーバ
サポートを有しています。これによって、ドライバはどんなスレーブ
ホスト番号にもフェイルオーバでき、かつ読み込み専用クエリを実行することが可能になります。フェイルオーバは、トランザクションの進行中は確実でないため、接続が
autoCommit(true)
状態にある時にのみ起こります。ほとんどのアプリケーション
サーバと接続プールは、毎回、トランザクション/接続の使用の最後に
autoCommit
を true
に設定します。
フェイルオーバ機能は次の動作を行います :
URL プロパティ autoReconnect が false の場合 :フェイルオーバは接続初期化でのみ起こり、フェイルバックはドライバが、最初のホストが再度利用可能になったと判断したときに起こります。
URL プロパティ autoReconnect が
true の場合
:フェイルオーバはドライバが、接続不能と判断した場合に起こり
( すべての クエリの前 )
、ホストが再度利用可能になったと判断した時、最初のホストにフェイルバックします
( queriesBeforeRetryMaster
クエリが発行された後 ) 。
どちらのケースでも、"フェイルオーバされた" サーバに接続するたびに、接続は読み取り専用の状態に設定され、データを改変するクエリには例外が投入されます ( クエリが MySQL サーバで処理されることは 絶対にありません ) 。
構成プロパティは、Connector/J がどのように MySQL サーバへの接続を行うか定義します。特別な指示がない限り、プロパティを DataSource オブジェクト、または Connection オブジェクトに設定することができます。
構成プロパティは、以下のどれかの方法で設定することができます :
java.sql.DataSource の MySQL 実装の set*() メソッドを使用する ( java.sql.DataSource の実装を使用する際に推奨される方法 ) 。
com.mysql.jdbc.jdbc2.optional.MysqlDataSource
com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource
DriverManager.getConnection()
または
Driver.connect()
に渡された
java.util.Properties インスタンスの値/キー
ペアとして。
java.sql.DriverManager.getConnection()
、java.sql.Driver.connect()
、または
javax.sql.DataSource
setURL()
メソッドの MySQL
実装に供給された URL 内の JDBC URL
パラメータとして。
注意 :? JDBC URL の構成に使用する仕組みが XML ベースの場合、アンド記号 (&) は XML の予約語であるため、構成パラメータを区切るには、XML 文字リテラル & を使う必要があります。
次の表はプロパティの一覧です :
接続/認証.?
プロパティ名 | 定義 | デフォルト値 | 対応開始したバージョン |
user | 接続のユーザ名義 | ? | すべて |
password | 接続に使用するパスワード | ? | すべて |
socketFactory | サーバにソケット接続を作成するのに、ドライバが使用するべきクラスの名称。このクラスは、インターフェイス 'com.mysql.jdbc.SocketFactory' を実行し、パブリック no-args コンストラクタを有する必要があります。 | com.mysql.jdbc.StandardSocketFactory | 3.0.3 |
connectTimeout | ソケット接続のタイムアウト ( ミリ秒単位 ) 。0 はタイムアウト無し。JDK-1.4 以降でのみ有効。デフォルトで '0' になります。 | 0 | 3.0.1 |
socketTimeout | ネットワーク ソケット動作のタイムアウト ( デフォルトの 0 ではタイムアウト無し ) 。 | 0 | 3.0.1 |
useConfigs | URL の解析、またはユーザ指定プロパティの適用の前に、構成プロパティのコンマ区切りのリストをロード。これらの構成は、資料の ' 構成 ' で説明されています。 | ? | 3.1.5 |
interactiveClient | WAIT_TIMEOUT でなく INTERACTIVE_TIMEOUT を基に、MySQL にタイムアウトを指示する CLIENT_INTERACTIVE フラグを設定。 | false | 3.1.0 |
propertiesTransform | 接続を試みる前にドライバに渡される URL プロパティの改変に、ドライバが使用する com.mysql.jdbc.ConnectionPropertiesTransform の実行。 | ? | 3.1.4 |
useCompression | サーバとの交信中に zlib 圧縮を使用 (true/false) ? デフォルトで 'false' になる。 | false | 3.0.17 |
高可用性とクラスタ.?
プロパティ名 | 定義 | デフォルト値 | 対応開始したバージョン |
autoReconnect | ドライバは膠着した接続、および/または切断された接続の再確立を試みますか ? 有効になれば、ドライバは停滞または切断された接続で発行された、現行のトランザクションに属するクエリに例外を投入しますが、接続の試みは、新たなトランザクションでの接続で発行される次のクエリの前に行います。この機能の使用は、アプリケーションが SQLExceptions プロパティを扱わない場合、セッション状態とデータの一貫性に対する副次的な悪影響をひきおこします。また、切断され停滞した接続プロパティの結果として、SQLExceptions を扱うアプリケーションを構築できない時にのみ使用するよう設計されているため、利用はお勧めできません。他の方法として、MySQL サーバ変数 "wait_timeout" を、デフォルトの 8 時間でなく、高い値にすることが考えられます。 | false | 1.1 |
autoReconnectForPools | 接続プールに適した再接続の手段を使用 ( デフォルトで 'false' になる ) 。 | false | 3.1.3 |
failOverReadOnly | autoReconnect モードでフェイルオーバが起こる場合、接続は 'read-only' に設定しますか ? | true | 3.0.12 |
reconnectAtTxEnd | autoReconnect が true に設定されている場合、ドライバは毎トランザクションの最後に再接続を試みますか ? | false | 3.0.10 |
roundRobinLoadBalance | autoReconnect が有効で、failoverReadonly が false の場合、ラウンドロビン方式で接続するホストを選びますか ? | false | 3.1.2 |
queriesBeforeRetryMaster | フェイルオーバが起きた際、マスタへフォールバックする前に発行されるクエリの数 ( マルチ ホストのフェイルオーバを使用する場合 ) 。'queriesBeforeRetryMaster' または 'secondsBeforeRetryMaster' の、先に条件に合った方がマスタへの接続を促します。デフォルトで 50 になります。 | 50 | 3.0.2 |
secondsBeforeRetryMaster | フェイルオーバが起こる時、ドライバがマスタ サーバへの接続を試みるまでの待機時間は ? 'queriesBeforeRetryMaster' または 'secondsBeforeRetryMaster' の、先に条件に合った方がマスタへの接続を促します。時間は秒単位で、デフォルトで 30 になります。 | 30 | 3.0.2 |
enableDeprecatedAutoreconnect | 自動再接続機能は、バージョン 3.2 からは使用停止になり、バージョン 3.3 では削除予定。このプロパティを 'true' に設定し、構成中の機能のチェックを無効にします。 | false | 3.2.1 |
resourceId | URL で使用されているホスト名からドライバが値を判断できない場合に、XAResource.isSameRM() に使用される、このデータソースまたはコネクションが接続されているソースを特定する大域的に一意な名称。 | ? | 5.0.1 |
セキュリティ.?
プロパティ名 | 定義 | デフォルト値 | 対応開始したバージョン |
allowMultiQueries | ひとつのステートメントの間で、複数のクエリを区切るために ';' の使用を可能にします (true/false 、デフォルトの 'false' になる ) | false | 3.1.1 |
useSSL | サーバとの通信中に SSL を使用 ( true/false ) 。デフォルトの false' になります。 | false | 3.0.2 |
requireSSL | useSSL=true の場合、SSL 接続は必須 ? ( デフォルトの 'false' になる ) 。 | false | 3.1.0 |
allowUrlInLocalInfile | ドライバは 'LOAD DATA LOCAL INFILE' ステートメントで URL を許可しますか ? | false | 3.1.4 |
paranoid | エラーメッセージに機密情報が表示されるのを防ぐ対策を取り、可能な場合は機密データを持つデータ構造を消去しますか ? ( デフォルトの 'false' になる ) | false | 3.0.1 |
性能拡張.?
プロパティ名 | 定義 | デフォルト値 | 対応開始したバージョン |
metadataCacheSize | cacheResultSetMetaData が 'true' に設定されている場合の、cacheResultSetMetadata へのクエリの数 ( デフォルトは 50 ) 。 | 50 | 3.1.1 |
prepStmtCacheSize | プリペアド ステートメントのキャッシングが有効な場合に、キャッシュされるプリペアド ステートメントの数は ? | 25 | 3.0.10 |
prepStmtCacheSqlLimit | ステートメントのキャッシングが有効な場合、ドライバが解析をキャッシュする最大の SQL は ? | 256 | 3.0.10 |
useCursorFetch | ステートメント上の MySQL > 5.0.2 、および setFetchSize() > 0 に接続している場合、そのステートメントは行の取り出しにカーソル ベースのフェッチを使用しますか ? | false | 5.0.0 |
blobSendChunkSize | ServerPreparedStatements を介して BLOB/CLOB を送る時に使用するチャンク。 | 1048576 | 3.1.9 |
cacheCallableStmts | ドライバは CallableStatements の解析過程をキャッシュしますか ? | false | 3.1.2 |
cachePrepStmts | ドライバは、クライアント側プリペアド ステートメントの PreparedStatements 、サーバ側プリペアドの適合性の "check" 、そしてサーバ側プリペアド ステートメントそのものの解析過程をキャッシュしますか ? | false | 3.0.10 |
cacheResultSetMetadata | ドライバは Statements および PreparedStatements の ResultSetMetaData をキャッシュしますか ? ( Req. JDK-1.4+ 、true/false 、デフォルトは 'false' ) | false | 3.1.1 |
cacheServerConfiguration | ドライバは、毎 URL ベースで 'SHOW VARIABLES' および 'SHOW COLLATION' の結果をキャッシュしますか ? | false | 3.1.5 |
defaultFetchSize | ドライバはこの値を使用して、新しく作成されたステートメントのすべてで setFetchSize(n) を呼び出します。 | 0 | 3.1.9 |
dontTrackOpenResources | JDBC の仕様は、ドライバが自動的にリソースを追跡し閉じることを必須としていますが、もしアプリケーションがステートメントまたは結果セットで上手く close() を明示的に呼び出せていない場合は、これがメモリ リークの原因になることがあります。このプロパティを true に設定することで、その制約を緩和することができ、アプリケーションによってはメモリ効率を上げることにもなります。 | false | 3.1.7 |
dynamicCalendars | デフォルトのカレンダーが必要な場合、ドライバはそれを取り出す、または 毎接続/セッションでキャッシュしますか ? | false | 3.1.5 |
elideSetAutoCommits | MySQL-4.1 以降を使用している場合、サーバの状態が Connection.setAutoCommit(boolean) の要求した状態と合わない時に、ドライバは 'set autocommit=n' クエリのみを発行しますか ? | false | 3.1.3 |
holdResultsOpenOverStatementClose | JDBC 仕様で要求されているように、ドライバは Statement.close() で結果セットを閉じますか ? | false | 3.1.7 |
locatorFetchBufferSize | 'emulateLocators' が 'true' に構成されている場合、getBinaryInputStream の BLOB データをフェッチする時に使用するバッファのサイズは ? | 1048576 | 3.2.1 |
rewriteBatchedStatements | executeBatch() が呼び出された時に、ドライバは多値インサートへの INSERT のために、プリペアド ステートメントの書き換えをすると共に、マルチクエリを ( "allowMultiQueries" の設定に関係なく ) 使用しますか ? 普通の java.sql.Statements を使用していて、コードがインプットを正しくサニタイズしない場合、これは SQL インジェクションになりえることをご留意ください。プリペアド ステートメントでは、サーバ側プリペアド ステートメントは現在この書き換えオプションを利用できません。また、PreparedStatement.set*Stream() の使用時にストリーム長を指定していない場合、ドライバはバッチ当たりのパラメータの適した数を判断することができず、結果パケットが大きすぎるというエラーが出るおそれがあるので注意してください。これらの書き換えられたステートメントの Statement.getGeneratedKeys() は、全体のバッチが INSERT 文を含む場合にしか作動しません。 | false | 3.1.13 |
useFastIntParsing | 過剰なオブジェクトの作成を避けるために内部 String->Integer 変換ルーチンを使用 ? | true | 3.1.4 |
useJvmCharsetConverters | 1 バイト文字セットをテーブルのルックアップ表を使用するより、JVM に組み込まれた文字エンコード ルーチンを常に使用する ? ( このデフォルトである "true" は、より新しい JVM に適しています ) | true | 5.0.1 |
useLocalSessionState | ドライバは、データベースを問い合わせるより、Connection.setAutoCommit() および Connection.setTransactionIsolation() によって設定された、自動コミットとトランザクションの隔離の内部値を参照しますか ? | false | 3.1.7 |
useReadAheadInput | サーバから読み取る時、より新しい、最適化された非ブロッキングの、バッファされた入力ストリームを使用 ? | true | 3.1.5 |
デバッグ/プロファイリング.?
プロパティ名 | 定義 | デフォルト値 | 対応開始したバージョン |
logger | メッセージのログ先として使用される 'com.mysql.jdbc.log.Log' を実行するクラスの名称 ( デフォルトは 'com.mysql.jdbc.log.StandardLogger' で、STDERR にログ ) 。 | com.mysql.jdbc.log.StandardLogger | 3.1.1 |
profileSQL | デフォルトの false になる構成されたロガ (true/false) へのクエリとその実行/フェッチ時間を追跡。 | false | 3.1.0 |
reportMetricsIntervalMillis | 'gatherPerfMetrics' が有効な場合のログの頻度は ( ミリ秒単位 ) ? | 30000 | 3.1.2 |
maxQuerySizeToLog | プロファイリングまたはトレースの際に記録されるクエリの最大長/サイズを制御。 | 2048 | 3.1.3 |
packetDebugBufferSize | 'enablePacketDebug' が true の場合に、保留するパケットの最大数。 | 20 | 3.1.3 |
slowQueryThresholdMillis | 'logSlowQueries' が有効な場合、クエリが 'slow' と記録されるまでの長さは ( ミリ秒単位 ) ? | 2000 | 3.1.2 |
useUsageAdvisor | ドライバは、適切で効果的な JDBC および MySQL Connector/J の使用を忠告する 'usage' 警告をログに発行しますか ( true/false 、デフォルトの 'false' になる ) ? | false | 3.1.1 |
autoGenerateTestcaseScript | ドライバは、サーバ側プリペアド ステートメントを含む、実行中の SQL を STDERR へダンプしますか ? | false | 3.1.9 |
dumpMetadataOnColumnNotFound | ドライバは、ResultSet.findColumn() が履行に失敗した場合、結果セットのフィールドレベル メタデータを例外メッセージにダンプしますか ? | false | 3.1.13 |
dumpQueriesOnException | ドライバは、サーバに送られたクエリの内容を、SQLExceptions のメッセージにダンプしますか ? | false | 3.1.3 |
enablePacketDebug | 有効な場合、'packetDebugBufferSize' パケットのリングバッファは維持され、ドライバのコードの重要エリアに例外が投入される際にダンプされます。 | false | 3.1.3 |
explainSlowQueries | 'logSlowQueries' が有効な場合、ドライバは自動的にサーバに 'EXPLAIN' を発行し、WARN レベルで結果を構成されたログに送りますか ? | false | 3.1.2 |
logSlowQueries | 'slowQueryThresholdMillis' より長くかかるクエリを記録しますか ? | false | 3.1.2 |
traceProtocol | トレース レベル ネットワーク プロトコルを記録しますか ? | false | 3.1.2 |
その他.?
プロパティ名 | 定義 | デフォルト値 | 対応開始したバージョン |
useUnicode | ドライバは、ストリングを扱う際、Unicode 文字エンコードを使用しますか ? ドライバが文字セットのマッピングを識別できない、または、MySQL が元来サポートしない文字セット ( 例えば UTF-8 ) を使用するために、ドライバの 'force' を試みる場合にのみに使用する ? true/false 、デフォルトの 'true' になります。 | true | 1.1g |
characterEncoding | 'useUnicode' が true に設定されている場合、ストリングを扱う際にドライバが使用する文字エンコーディングは ? ( デフォルトは 'autodetect' ) | ? | 1.1g |
characterSetResults | 戻す結果の文字セットをサーバに指示。 | ? | 3.0.13 |
connectionCollation | 設定された場合、 'set collation_connection' を介してこのコレクションを使用するようサーバに指示。 | ? | 3.0.13 |
sessionVariables | ドライバが接続した際、SET SESSION ... としてサーバに送られる、コンマで区切られた名前/値ペアのリスト。 | ? | 3.1.8 |
allowNanAndInf | ドライバは、PreparedStatement.setDouble() で NaN or +/- INF 値を許容しますか ? | false | 3.1.5 |
autoClosePStmtStreams | ドライバは、set*() メソッドを介して引数として渡される .close() を、ストリーム/リーダとして自動的呼び出しますか ? | false | 3.1.12 |
autoDeserialize | ドライバは、BLOB フィールドに保管されたオブジェクトを、自動的に検出してデシリアル化しますか ? | false | 3.1.5 |
capitalizeTypeNames | DatabaseMetaData でタイプ名を大文字にしますか ? ( 通常は WebObjects を使用している場合にのみ有効、true/false 、デフォルトの 'false' になる ) | false | 2.0.7 |
clobCharacterEncoding | 構成された接続 characterEncoding の代わりに、TEXT 、MEDIUMTEXT 、および LONGTEXT 値の送信と引き出しに使用する文字エンコード。 | ? | 5.0.0 |
clobberStreamingResults | これによって、'streaming' ResultSet は自動的に閉じられ、すべてのデータをサーバから読み取る前に他のクエリが実行された場合、まだサーバからストリーミングが続いている未決のデータは破棄されます。 | false | 3.0.9 |
continueBatchOnError | ひとつのステートメントが履行に失敗した場合、ドライバはバッチ コマンドの処理を続けますか ? JDBC 仕様はどちらも許可 ( デフォルトの 'true' になる ) 。 | true | 3.0.3 |
createDatabaseIfNotExist | URL で提供されるデータベースがまだなければ作成。構成されたユーザはデータベース作成の許可を取っているものとします。 | false | 3.1.9 |
emptyStringsConvertToZero | ドライバは、殻のストリング フィールドから '0' の数値への変換を許可しますか ? | true | 3.1.8 |
emulateLocators | N/A | false | 3.1.0 |
emulateUnsupportedPstmts | ドライバは、サーバにサポートされていないプリペアド ステートメントを検出し、それらをクライアント側のエミュレートされたバージョンに置き換えますか ? | true | 3.1.7 |
ignoreNonTxTables | ロールバックの非トランザクション テーブル警告を無視しますか ? ( デフォルトの 'false' になる ) | false | 3.0.9 |
jdbcCompliantTruncation | 警告をサポートするサーバに接続する場合 ( MySQL 4.1.0 以降 ) 、JDBC 仕様で要求されるようにデータがトランザクションされる時に、ドライバは java.sql.DataTruncation 例外を投入しますか ? | true | 3.1.2 |
maxRows | 返す行の最大数 ( デフォルトの 0 は、すべての行を返します ) 。 | -1 | all versions |
noAccessToProcedureBodies | CallableStatements のプロシージャ パラメータ タイプを識別する際に、接続しているユーザが "SHOW CREATE PROCEDURE" を介してプロシージャ本体にアクセスできない場合、または mysql.proc で選択できない場合、ドライバは例外を投入する代わりに、基本メタデータ ( INOUT VARCHAR としてレポートされたすべてのパラメータ ) を作成しますか ? | false | 5.0.3 |
noDatetimeStringSync | ResultSet.getDatetimeType().toString().equals(ResultSet.getString()) を確立しません。 | false | 3.1.7 |
noTimezoneConversionForTimeType | 'useTimezone'='true' の場合、サーバ時間帯を使って TIME 値を変換しません。 | false | 5.0.0 |
nullCatalogMeansCurrent | DatabaseMetadataMethods が 'catalog' パラメータを要求する際、値 null は現在のカタログを使用するという意味ですか ? ( これは JDBC 対応ではありませんが、前バージョンのドライバ旧来の動作に従っています ) | true | 3.1.8 |
nullNamePatternMatchesAll | *pattern パラメータを受け付ける DatabaseMetaData メソッドは、null を '%' と同様に扱いますか ? ( これは JDBC 対応ではありませんが、旧バージョンのドライバは、仕様からこれを受け入れます ) | true | 3.1.8 |
overrideSupportsIntegrityEnhancementFacility | ドライバは、外部キーのシグナル サポートに "true" を戻すアプリケーションを避けるために、DatabaseMetaData.supportsIntegrityEnhancementFacility() に "true" を戻しますか ? データベースはこの関数をサポートしておらず、SQL 仕様はこの機能が外部キーのサポート以上のものを含んでいると示しています。そのような回避アプリケーションのひとつには Openoffice があります。 | false | 3.1.12 |
pedantic | 例外なく JDBC 仕様に従います。 | false | 3.0.0 |
pinGlobalTxToPhysicalConnection | XAConnections を使用する時、ドライバは、与えられた XID 上の作業が常に同じ物理接続に送られるよう確認するべきですか ? これは、"XA END" が呼び出された後、XAConnection が "XA START ... JOIN" をサポートするのを許可します。 | false | 5.0.1 |
processEscapeCodesForPrepStmts | ドライバは、準備されたクエリのエスケープ コードを処理しますか ? | true | 3.1.12 |
relaxAutoCommit | ドライバが接続する MySQL のバージョンがトランザクションをサポートしない場合でも、commit() 、 rollback() 、および setAutoCommit() への呼び出しを許可しますか ( true/false 、デフォルトの 'false' になる ) ? | false | 2.0.13 |
retainStatementAfterResultSetClose | ドライバは、ResultSet.close() が呼び出された後、ResultSet の Statement リファレンス を保持しますか ? JDBC-4.0 以降では、これは JDBC 対応ではありません ) | false | 3.1.11 |
rollbackOnPooledClose | プール内の理論接続が閉じられた後、ドライバは rollback() を発行しますか ? | true | 3.0.15 |
runningCTS13 | Sun の JDBC 適応性テストスイート バージョン 1.3 のバグの回避を有効にします。 | false | 3.1.7 |
serverTimezone | timezone の検出/マッピングをオーバーライドします。サーバからの timezone が Java timezone にマップしない場合に使用されます。 | ? | 3.0.2 |
strictFloatingPoint | 適合テストの旧バージョンでのみ使用。 | false | 3.0.0 |
strictUpdates | ドライバは更新可能な結果セットに厳密なチェック ( 選択されたすべてのプライマリ キー ) を行いますか ( true 、false 、デフォルトの 'true' になる ) ? | true | 3.0.4 |
tinyInt1isBit | ドライバは datatype TINYINT(1) を BIT タイプとして扱いますか ( テーブルを作成する時にサーバが BIT -> TINYINT(1) を暗黙的に変換するため ) ? | true | 3.0.16 |
transformedBitIsBoolean | ドライバが TINYINT(1) を他のタイプに変換する場合、MySQL-5.0 は BIT タイプを持っているので、今後の MySQL-5.0 との互換性のため、BIT でなく BOOLEAN を使用しますか ? | false | 3.1.9 |
ultraDevHack | UltraDev が破損しており、prepareCall() for _all_ statements を発行するため、必要な場合は、prepareCall() に PreparedStatements を作成しますか ? ( true/false 、デフォルトの 'false' になる ) | false | 2.0.3 |
useGmtMillisForDatetimes | Date と Timestamp のインスタンスを作成する前に、セッション timezone と GMT 間を変換します ( "false" の値は旧来の動作、"true" はより JDBC 対応の動作を起こします ) 。 | false | 3.1.12 |
useHostsInPrivileges | DatabaseMetaData.getColumn/TablePrivileges() でユーザに '@hostname' を加えます (true/false) 。デフォルトの 'true' になります 。 | true | 3.0.2 |
useInformationSchema | MySQL-5.0.7 以降に接続する場合、ドライバは DatabaseMetaData をを使って DatabaseMetaData に使用されている情報を引き出しますか ? | false | 5.0.0 |
useJDBCCompliantTimezoneShift | java.util.Calendar 引数を取るそれらの JDBC 引数の、TIME/TIMESTAMP/DATETIME 値の timezone 情報を変換する時、ドライバは JDBC 対応 ルールを使用しますか ? ( このオプションは "useTimezone=true" 構成オプション専用です ) | false | 5.0.0 |
useOldAliasMetadataBehavior | ドライバは、カラムおよびテーブルの "AS" 句に旧来の動作を使用し、エイリアス ( もしあれば ) を、元のカラム/テーブル名でなく、ResultSetMetaData.getColumnName() または ResultSetMetaData.getTableName() にのみ戻しますか ? | true | 5.0.4 |
useOldUTF8Behavior | 4.0 以前のサーバと交信している時、ドライバが行った UTF-8 動作を使用。 | false | 3.1.6 |
useOnlyServerErrorMessages | サーバが戻したエラー メッセージに、'standard' SQLState エラー メッセージを付加しません。 | true | 3.0.15 |
useServerPrepStmts | サーバがサポートする場合は、サーバ側プリペアド ステートメントを使用しますか ? ( デフォルトの 'true' になる ). | true | 3.1.0 |
useSqlStateCodes | 'legacy' X/Open/SQL 状態コードでなく、SQL Standard 状態コードを使用 (true/false) 。デフォルトは 'true' 。 | true | 3.1.3 |
useStreamLengthsInPrepStmts | PreparedStatement/ResultSet.setXXXStream() メソッド コールでストリーム長パラメータを引き受けます (true/false 、デフォルトの 'true' になる )? | true | 3.0.2 |
useTimezone | クライアントとサーバの timezone 間の時間/日付タイプを変換しますか (true/false 、デフォルトの 'false' になる ) ? | false | 3.0.2 |
useUnbufferedInput | サーバからのデータ読み取りに BufferedInputStream を使用しません。 | true | 3.0.11 |
yearIsDateType | JDBC ドライバは MySQL タイプ "YEAR" を、java.sql.Date または SHORT として扱いますか ? | true | 3.1.9 |
zeroDateTimeBehavior | ドライバが、すべてゼロで構成された DATETIME 値 ( 無効な日付を表すために MySQL で使用される ) に遭遇した時のリアクションは ?有効値は 'exception' 、'round' 、および 'convertToNull' 。 | exception | 3.1.4 |
Connector/J はまた、socketFactory
プロパティを通して、NamedPipeSocketFactory
をプラグイン ソケット
ファクトリとして使用する Windows NT/2000/XP
の名前付きパイプを介したMySQL
へのアクセスをサポートします。namedPipePath
プロパティを使わない場合、'\\.\pipe\MySQL'
のデフォルトが使用されます。NamedPipeSocketFactory
を使用する場合は、JDBC url
内のホスト名とポート番号の値は無視されます。その機能は次を使って有効にすることができます
:
socketFactory=com.mysql.jdbc.NamedPipeSocketFactory
名前付きパイプは、JDBC ドライバが使用されているのと同じマシンで MySQL に接続している時にのみ作動します。簡単な作動テストでは、名前付きパイプのアクセスは、標準のアクセスより 30% から 50% 速いという結果が出ています。
com.mysql.jdbc.NamedPipeSocketFactory
、または
com.mysql.jdbc.StandardSocketFactory
のコード例を使用して、独自のソケット
ファクトリを作成することができます。
MySQL Connector/J は一般的に利用可能な Sun の JDBC 対応テストスイートの全バージョンで、すべてのテストにパスしています。ただし、JDBC 仕様は、特定の機能をどのように実装するか、もしくは、その仕様は実装でリーウェイを許可するかについての点で曖昧な部分が多くみられます。
このセクションでは、特定の実装の決定が MySQL Connector/J の使用方法におよぼす影響の詳細を、インターフェイスごとに説明します。
Blob
Connector/J 3.1.0 からは、プロパティ
'emulateLocators=true' を JDBC URL
に加えることで、ロケータで Blob
をエミュレートすることができます。この方法を使うと、他のデータを取り出すまでドライバは実際の
Blob データのローディングを遅らせ、その後
blob データ ストリームで摘出メソッド (
getInputStream()
、getBytes()
、など )
を使用します。
これを実行するには、実際の Blob の名称に カラムの値を伴うカラム エイリアスを使用する必要があります。その例は :
SELECT id, data as 'data' from blobtable
これを行うには、次のルールに従う必要があります :
SELECT
はまた、ただひとつのテーブルを参照していなければならず、そのテーブルはプライマリ
キーを持っている必要があります。
SELECT
はプライマリ
キーを組成するすべてのカラムをカバーする必要があります。
Blob 実装はインプレース変更を許可しません
( DatabaseMetaData.locatorsUpdateCopies()
メソッドで報告されたように、それらはコピーです
) 。このため、対応する
PreparedStatement.setBlob()
または
ResultSet.updateBlob()
(
更新可能な結果セットの場合 )
メソッドを使い、変更をデータベースに戻して保存するようにしてください。
CallableStatement
Connector/J 3.1.1 からは、ストアド
プロシージャが、CallableStatement
インターフェイスを介して MySQL バージョン
5.0
以降に接続している時にサポートされるようになりました。現在は、CallableStatement
の getParameterMetaData()
メソッドはサポートされていません。
Clob
Clob 実装はインプレース変更を許可しません
( DatabaseMetaData.locatorsUpdateCopies()
メソッドで報告されたように、それらはコピーです
)
。このため、PreparedStatement.setClob()
メソッドを使用して、変更をデータベースに戻して保存するようにしてください。JDBC
API は ResultSet.updateClob()
メソッドを持っていません。
Connection
MM.MySQL
の旧バージョンとは異なり、isClosed()
メソッドはサーバを ping
して生きているかを判断しません。JDBC
仕様に従い、closed()
が接続で呼び出された時にのみ true
を戻します。接続がまだ有効か確認したい場合は、SELECT
1
などの簡単なクエリを発行してください。接続が無効になっていれば、ドライバは例外を投入します。
DatabaseMetaData
外部キー情報 (
getImportedKeys()
/getExportedKeys()
および getCrossReference()
) は
InnoDB
テーブルでのみ入手可能です。ただし、ドライバは
SHOW CREATE TABLE
を使用してこの情報を取り出すので、他の保存エンジンが外部キーをサポートする場合、ドライバはそれらも透過的にサポートします。
PreparedStatement
PreparedStatements は、MySQL がプリペアド
ステートメント機能を持たないため、ドライバによって実装されます。これにより、ドライバがクライアントの完全な
SQL
のパーサを持つことが要求されるため、ドライバは
getParameterMetaData()
または
getMetaData()
を実装しません。
MySQL Connector/J 3.1.0 からは、サーバ側プリペアド ステートメントおよびバイナリ エンコードされた結果セットは、サーバがそれらをサポートする場合に使用されます。
setBinaryStream()
、setAsciiStream()
、setUnicodeStream()
、setBlob()
、または
setClob()
を介して設定された
large
パラメータとサーバ側プリペアド
ステートメントを使用する際は注意してください。非
large パラメータに変更された large
パラメータとステートメントを再実行したい場合、clearParameters()
を呼び出し、すべてのパラメータを再度設定する必要があります。その理由は以下です
:
サーバ側プリペアド
ステートメントとクライアント側エミュレーションの双方の間、大きなデータは
PreparedStatement.execute()
が呼び出された時にのみ交換されます。
それが終了したら、クライアント側のデータの読み取りに使用されたストリームは閉じられ ( JDBC 仕様により ) 、再度読み取ることはできません。
パラメータが large から 非 large
へ変更する場合、ドライバはプリペアド
ステートメントのサーバ側の状況をリセットし、変更するパラメータが前の大きな値になり代わるの許可する必要があります。これにより、サーバに送られたすべての大きなデータが取り除かれ、したがってデータの再送を
setBinaryStream()
、setAsciiStream()
、setUnicodeStream()
、setBlob()
、または
setClob()
を介して要求します。
結果的に、パラメータのタイプを非 large
にしたい場合は、再実行される前に、clearParameters()
を呼び出し、プリペアド
ステートメントのすべてのパラメータを再度設定する必要があります。
ResultSet
デフォルトにより、ResultSets は完全に摘出され、メモリに保存されます。ほとんどの場合において、これは最も効果的な操作方法であり、MySQL の設計により、ネットワーク プロトコルはより簡単に実装できます。多大な行や大きな値を持つ ResultSets を扱っていて、要求されるメモリのために JVM に十分なスペースを割り振れない場合は、ドライバに結果を一行ごとにストリームし戻すよう指示することができます。
この機能を有効にするには、次の方法で Statement インスタンスを作成する必要があります。
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY); stmt.setFetchSize(Integer.MIN_VALUE);
フェッチのサイズが
Integer.MIN_VALUE
の、前進専用、読み取り専用のコンビネーションは、行ごとに結果セットをストリームするようドライバに指示する信号として機能します。この後、このステートメントで作成された結果セットは行ごとに摘出されます。
このアプローチには注意点がいくつかあります。接続にクエリを発行する前に、結果セットのすべての行を読まなければならず、さもなければ例外が投入されます。
これらのステートメントが保持するロックが解除されうる最も早い時点は
( InnoDB
などの他の保存エンジンの
MyISAM
テーブル レベル
ロック、または 行レベル ロックであっても
) 、ステートメントが完遂された時です。
ステートメントがトランザクションの範囲内にある時は、ロックはトランザクションが完遂した時に解除されます ( つまり、ステートメントが先に完遂される必要があります ) 。他のほとんどのデータベースと同じく、ステートメントで保留になっているすべての結果が読み取られるまで、またはステートメントのアクティブな結果セットが閉じられるまで、ステートメントは完遂されません。
したがって、結果のストリーミングを使用する場合、結果セットを作成しているステートメントが参照するテーブルへの並行アクセスを維持したいのであれば、それらをできるだけ速く処理してください。
ResultSetMetaData
isAutoIncrement()
メソッドは MySQL
サーバ 4.0
以降を使用している時にのみ作動します。
Statement
JDBC ドライバの 3.2.1
以前のバージョンを使用し、5.0.3
以前のバージョンのサーバに接続している場合、上記のように結果セットのストリーミングをトグルする以外では、setFetchSize()
は無効です。
Connector/J 5.0.0
以降は、Statement.cancel()
と
Statement. setQueryTimeout()
両方へのサポートを含みます。両方ともに
MySQL 5.0.0 以降が必要で、KILL
QUERY
文を発行するために別の接続が要求されます。setQueryTimeout()
の場合、その実装はタイムアウト機能を扱うために追加のスレッドを作成します。
タイムアウトの期限切れによって取り消されるクエリを実行するスレッドのブロックを解除し、例外として投入する方法が現在はないため、setQueryTimeout()
へのステートメントの取り消しの失敗は、そのまま失敗するのではなく、それ自体を
RuntimeException
として宣言する場合があります。
MySQL はSQL カーソルをサポートせず、JDBC ドライバはそれらをエミュレートしないので、"setCursor- Name()" は無効です。
MySQL Connector/J は、MySQL データタイプと Java データタイプ間の変換の扱い方に柔軟に対応します。
丸めやオーバフロー、もしくは精度の損失がおこることはありますが、一般的に、どんな MySQL データタイプでも java.lang.String に変換することが可能で、また、いかなる数値タイプも Java 数値タイプに自由に変換することができます。
Connector/J 3.1.0 からは、プロパティ
jdbcCompliantTruncation を
false
に設定して接続の構成に使用し、その動作を規制しない限り、JDBC
ドライバは JDBC
仕様で要求される通り警告を発行、もしくは
DataTruncation 例外を投入します。
常に作動が保証されている変換は、次の表の通りです :
接続プロパティ - その他.?
これらの MySQL データタイプは | 常時以下の Java タイプへの変換が可能 |
CHAR, VARCHAR, BLOB, TEXT, ENUM, and SET | java.lang.String, java.io.InputStream, java.io.Reader,
java.sql.Blob, java.sql.Clob |
FLOAT, REAL, DOUBLE PRECISION, NUMERIC, DECIMAL, TINYINT,
SMALLINT, MEDIUMINT, INTEGER, BIGINT | java.lang.String, java.lang.Short, java.lang.Integer,
java.lang.Long, java.lang.Double,
java.math.BigDecimal |
DATE, TIME, DATETIME, TIMESTAMP | java.lang.String, java.sql.Date, java.sql.Timestamp |
変換の対象になる MySQL データタイプより低い精度または容量を持つ Java 数値データタイプを選択した場合、丸め、オーバフロー、もしくは制度の損失が起こることがあります。
ResultSet.getObject()
メソッドは、適切な JDBC
仕様にしたがって、MySQL と Java
タイプ間のタイプ変換を使用します。ResultSet-
MetaData.GetColumnClassName()
によって戻される値も以下に記載されています。java.sql.Types
のクラスに関する詳細は、Java
2 Platform Types をご覧ください。
ResultSet.getObject() の MySQL タイプ から Java タイプへ.?
MySQL タイプ名 | GetColumnClassName
の戻り値 | Java クラスとして返還 |
BIT(1) ( MySQL-5.0 から ) | BIT | java.lang.Boolean |
BIT( > 1) ( MySQL-5.0 から ) | BIT | byte[] |
TINYINT | TINYINT | java.lang.Boolean 構成プロパティ
tinyInt1isBit が
true ( デフォルト )
に設定され、格納サイズが 1
の場合。それ以外では
java.lang.Integer |
BOOL, BOOLEAN | TINYINT | 上記 TINYINT 参照。TINYINT(1) のエイリアス。現行。 |
SMALLINT[(M)] [UNSIGNED] | SMALLINT [UNSIGNED] | java.lang.Integer ( UNSIGNED
である場合、ない場合両方 ) |
MEDIUMINT[(M)] [UNSIGNED] | MEDIUMINT [UNSIGNED] | java.lang.Integer, UNSIGNED であれば
java.lang.Long |
INT,INTEGER[(M)] [UNSIGNED] | INTEGER [UNSIGNED] | java.lang.Integer , UNSIGNED であれば
java.lang.Long |
BIGINT[(M)] [UNSIGNED] | BIGINT [UNSIGNED] | java.lang.Long , UNSIGNED であれば
java.math.BigInteger |
FLOAT[(M,D)] | FLOAT | java.lang.Float |
DOUBLE[(M,B)] | DOUBLE | java.lang.Double |
DECIMAL[(M[,D])] | DECIMAL | java.math.BigDecimal |
DATE | DATE | java.sql.Date |
DATETIME | DATETIME | java.sql.Timestamp |
TIMESTAMP[(M)] | TIMESTAMP | java.sql.Timestamp |
TIME | TIME | java.sql.Time |
YEAR[(2|4)] | YEAR | yearIsDateType 構成プロパティが false
に設定されている場合、戻されるオブジェクトのタイプは
java.sql.Short 。true (
デフォルト ) の場合のオブジェクト
タイプは java.sql.Date (
日付設定は 1 月 1 日の深夜まで ) 。 |
CHAR(M) | CHAR | java.lang.String ( カラムの文字セットが
BINARY の場合は
byte[] が戻される ) |
VARCHAR(M) [BINARY] | VARCHAR | java.lang.String ( カラムの文字セットが
BINARY の場合は
byte[] が戻される ) |
BINARY(M) | BINARY | byte[] |
VARBINARY(M) | VARBINARY | byte[] |
TINYBLOB | TINYBLOB | byte[] |
TINYTEXT | VARCHAR | java.lang.String |
BLOB | BLOB | byte[] |
TEXT | VARCHAR | java.lang.String |
MEDIUMBLOB | MEDIUMBLOB | byte[] |
MEDIUMTEXT | VARCHAR | java.lang.String |
LONGBLOB | LONGBLOB | byte[] |
LONGTEXT | VARCHAR | java.lang.String |
ENUM('value1','value2',...) | CHAR | java.lang.String |
SET('value1','value2',...) | CHAR | java.lang.String |
JDBC
ドライバからサーバへ送られた、Statement.execute()
、Statement.executeUpdate()
、Statement.executeQuery()
を介して送られたクエリ、そして、set-
Bytes()
、setBinaryStream()
、setAsciiStream()
、setUnicodeStream()
、および
set- Blob()
を使用するパラメータ
セットを除く
Prepared- Statement
および
CallableStatement
パラメータを含むすべてのストリングは、元来の
Java Unicode 型から
クライアント側の文字エンコードに自動的に変換されます。
MySQL Server 4.1 より前では、Connector/J
は、サーバ構成から自動的に検出が可能な、もしくは
useUnicode
および
characterEncoding
プロパティを通じてユーザが構成することができる、接続当たりの単一文字エンコードをサポートしていました。
MySQL Server 4.1 からは、Connector/J
はクライアントとサーバ間の単一文字エンコードと、Result-
Sets
でサーバによってクライアントに返されたデータの文字エンコードのすべての数をサポートしています。
クライアントとサーバ間の文字エンコードは、接続に基づいて自動的に検出されます。ドライバに使用されるエンコードは、4.1.0
より前のバージョンのサーバでは
character_set
システム変数、4.1.0
以降では character_set_server
を介して、サーバで特定されます。詳細は
項9.3.1. 「サーバのキャラクタセットおよび照合順序」 をご覧ください。
クライアント側の自動検出エンコードをオーバライドするには、サーバへの接続に使用される
URL の characterEncoding
プロパティを使用します。
クライアント側で文字エンコードを特定する際、Java スタイルの名称を使用してください。次の表は MySQL 文字セット用の Java スタイルの名称のリストです :
MySQL から Java エンコード名への変換.?
MySQL 文字セット名 | Java スタイル文字エンコード名 |
ascii | US-ASCII |
big5 | Big5 |
gbk | GBK |
sjis | SJIS (or Cp932 or MS932 for MySQL Server < 4.1.11) |
cp932 | Cp932 or MS932 (MySQL Server > 4.1.11) |
gb2312 | EUC_CN |
ujis | EUC_JP |
euckr | EUC_KR |
latin1 | ISO8859_1 |
latin2 | ISO8859_2 |
greek | ISO8859_7 |
hebrew | ISO8859_8 |
cp866 | Cp866 |
tis620 | TIS620 |
cp1250 | Cp1250 |
cp1251 | Cp1251 |
cp1257 | Cp1257 |
macroman | MacRoman |
macce | MacCentralEurope |
utf8 | UTF-8 |
ucs2 | UnicodeBig |
注意.? ドライバは文字セットの変更を検出できず、最初の接続セットアップで検出された文字セットを使い続けるため、Connector/J で 'set names' クエリを発行しないでください。
クライアントからの複数の文字セットの送信を許可するには、UTF-8
の使用が必要です。utf8
をデフォルトのサーバ文字セットとして構成するか、characterEncoding
を通して UTF-8 を使用するよう JDBC
ドライバを構成してください。
MySQL Connector/J の SSL は、JDBC ドライバとサーバ間のすべてのデータ ( 最初のハンドシェイク以外 ) を暗号化します。SSL を有効にした場合の性能上の影響として、クエリの処理時間が、クエリのサイズと戻すデータの量によって、35% から 50% 長くなります。
SSL Support の作動には、以下が必要になります :
JDK-1.4.1 以降などの、JSSE ( Java Secure Sockets Extension ) を高める JDK 。SSL は現在、次のバグにより、JDK-1.2.x または JDK-1.3.x などの JESSE を追加できる JDK とは作動しません : http://developer.java.sun.com/developer/bugParade/bugs/4273544.html
SSL をサポートし、そのためにコンパイルおよび構成された、MySQL-4.0.4 以降の MySQL サーバ。詳細は 項4.8.7. 「接続安全」 をご覧ください。
クライアント証明書 ( このセクション内であとに説明 ) 。
まず最初に、MySQL サーバ CA Certificate を Java
truststore にインポートしてください。CA Certificate
のサンプルは、MySQL ソース配布物の
SSL
サブディレクトリにあります。SSL
はこれを使用して、安全な MySQL
サーバと交信しているかを判断します。
Java の keytool を使って truststore
を現行のディレクトリに作成し、サーバの CA
証明書 (cacert.pem
)
をインポートするには、次の手順で行うことができます
( keytool
がパスにあることを前提としています。keytool
は JDK または JRE の bin
サブディレクトリにあります ) :
shell> keytool -import -alias mysqlServerCACert \ -file cacert.pem -keystore truststore
Keytool は次の情報で応答します :
Enter keystore password: ********* Owner: EMAILADDRESS=walrus@example.com, CN=Walrus, O=MySQL AB, L=Orenburg, ST=Some-State, C=RU Issuer: EMAILADDRESS=walrus@example.com, CN=Walrus, O=MySQL AB, L=Orenburg, ST=Some-State, C=RU Serial number: 0 Valid from: Fri Aug 02 16:55:53 CDT 2002 until: Sat Aug 02 16:55:53 CDT 2003 Certificate fingerprints: MD5: 61:91:A0:F2:03:07:61:7A:81:38:66:DA:19:C4:8D:AB SHA1: 25:77:41:05:D5:AD:99:8C:14:8C:CA:68:9C:2F:B8:89:C3:34:4D:6C Trust this certificate? [no]: yes Certificate was added to keystore
その後、クライアント証明書を生成し、安全なクライアントと交信していることをMySQL サーバに知らせます :
shell> keytool -genkey -keyalg rsa \ -alias mysqlClientCertificate -keystore keystore
Keytool
は次の情報のプロンプトを出し、keystore
と名付けられた keystore
を現行のディレクトリに作成します。
その状況に適した情報で応答してください :
Enter keystore password: ********* What is your first and last name? [Unknown]: Matthews What is the name of your organizational unit? [Unknown]: Software Development What is the name of your organization? [Unknown]: MySQL AB What is the name of your City or Locality? [Unknown]: Flossmoor What is the name of your State or Province? [Unknown]: IL What is the two-letter country code for this unit? [Unknown]: US Is <CN=Matthews, OU=Software Development, O=MySQL AB, L=Flossmoor, ST=IL, C=US> correct? [no]: y Enter key password for <mysqlClientCertificate> (RETURN if same as keystore password):
最後に、生成した keystore と truststore を JSSE に使わせるには、JVM を起動する時に次のシステム プロパティを設定し、path_to_keystore_file を作成した鍵ストアへの完全パスに、path_to_truststore_file を作成した truststore に置き換え、各プロパティに適したパスワード値を使用する必要があります。
-Djavax.net.ssl.keyStore=path_to_keystore_file -Djavax.net.ssl.keyStorePassword=********* -Djavax.net.ssl.trustStore=path_to_truststore_file -Djavax.net.ssl.trustStorePassword=*********
また、useSSL=true
を URL
に加えるか、DriverManager.getConnection()
に渡す java.util.Properties
インスタンスでプロパティ useSSL
を true
に設定して、MySQL Connector/J
の接続パラメータで useSSL を
true
に設定する必要があります。
JESSE デバッグ ( 下記参照 ) を有効にし、次のキー イベントを探すことで、SSL が作動しているかテストすることができます :
... *** ClientHello, v3.1 RandomCookie: GMT: 1018531834 bytes = { 199, 148, 180, 215, 74, 12, ≫ 54, 244, 0, 168, 55, 103, 215, 64, 16, 138, 225, 190, 132, 153, 2, ≫ 217, 219, 239, 202, 19, 121, 78 } Session ID: {} Cipher Suites: { 0, 5, 0, 4, 0, 9, 0, 10, 0, 18, 0, 19, 0, 3, 0, 17 } Compression Methods: { 0 } *** [write] MD5 and SHA1 hashes: len = 59 0000: 01 00 00 37 03 01 3D B6 90 FA C7 94 B4 D7 4A 0C ...7..=.......J. 0010: 36 F4 00 A8 37 67 D7 40 10 8A E1 BE 84 99 02 D9 6...7g.@........ 0020: DB EF CA 13 79 4E 00 00 10 00 05 00 04 00 09 00 ....yN.......... 0030: 0A 00 12 00 13 00 03 00 11 01 00 ........... main, WRITE: SSL v3.1 Handshake, length = 59 main, READ: SSL v3.1 Handshake, length = 74 *** ServerHello, v3.1 RandomCookie: GMT: 1018577560 bytes = { 116, 50, 4, 103, 25, 100, 58, ≫ 202, 79, 185, 178, 100, 215, 66, 254, 21, 83, 187, 190, 42, 170, 3, ≫ 132, 110, 82, 148, 160, 92 } Session ID: {163, 227, 84, 53, 81, 127, 252, 254, 178, 179, 68, 63, ≫ 182, 158, 30, 11, 150, 79, 170, 76, 255, 92, 15, 226, 24, 17, 177, ≫ 219, 158, 177, 187, 143} Cipher Suite: { 0, 5 } Compression Method: 0 *** %% Created: [Session-1, SSL_RSA_WITH_RC4_128_SHA] ** SSL_RSA_WITH_RC4_128_SHA [read] MD5 and SHA1 hashes: len = 74 0000: 02 00 00 46 03 01 3D B6 43 98 74 32 04 67 19 64 ...F..=.C.t2.g.d 0010: 3A CA 4F B9 B2 64 D7 42 FE 15 53 BB BE 2A AA 03 :.O..d.B..S..*.. 0020: 84 6E 52 94 A0 5C 20 A3 E3 54 35 51 7F FC FE B2 .nR..\ ..T5Q.... 0030: B3 44 3F B6 9E 1E 0B 96 4F AA 4C FF 5C 0F E2 18 .D?.....O.L.\... 0040: 11 B1 DB 9E B1 BB 8F 00 05 00 .......... main, READ: SSL v3.1 Handshake, length = 1712 ...
次のシステム プロパティを設定する時、JSSE は
( STDOUT に ) デバッグを提供します :
-Djavax.net.debug=all
これは、どの鍵ストアおよび truststore
を使用しているか、SSL
ハンドシェイクと証明書交換の間に何が起きているかを報告します。SSL
接続を開きたい時に、何が作動していないか判断するのに便利です。
Connector/J 3.1.7
からは、クエリを自動的に読込/書込マスタに送るドライバの変異型か、Connection.getReadOnly()
の状況によってフェイルオーバかラウンドロビンのロードバランスされたスレーブのセットを利用できるようにしています。
アプリケーションは、Connection.
setReadOnly(true)
の呼び出しによって、トランザクションを読み出し専用にする信号を出します。この複製を考慮した接続は、ラウンドロビン
スキーマを使用するロードバランスされた per-vm
であるスレーブ接続のひとつを使用します (
供給された接続は、スレーブがサービスから削除されない限り、スレーブに付着します
)
。書込トランザクションがある場合、または時間に敏感な読み込みがある場合
( MySQL での複製は非同期なので注意 )
、Connection.setReadOnly(false)
を呼び出し、接続が読み込み専用にならないよう設定すると、ドライバは以後の呼び出しが確実にマスタ
MySQL
サーバに送られるようにします。ドライバは、このロードバランス機能の完遂に使用するすべての接続間の自動コミット、隔離レベル、およびカタログの現状
の伝搬を行います。
この機能を有効にするには、アプリケーション
サーバの接続プールを構成する時か、スタンドアロン
アプリケーションに JDBC
ドライバのインスタンスを作成する時に、"
com.mysql.jdbc.ReplicationDriver
"
クラスを使用します。URL フォーマットを標準の
MySQL JDBC
ドライバとして受け入れるので、ReplicationDriver
は現在、それが DriverManager
に登録された唯一の MySQL JDBC
ドライバでない限り、java.sql.DriverManager
ベースの接続作成とは作動しません。
以下は、ReplicationDriver のスタンドアロン アプリケーションでの、手短で簡単な使用例です :
import java.sql.Connection; import java.sql.ResultSet; import java.util.Properties; import com.mysql.jdbc.ReplicationDriver; public class ReplicationDriverDemo { public static void main(String[] args) throws Exception { ReplicationDriver driver = new ReplicationDriver(); Properties props = new Properties(); // We want this for failover on the slaves props.put("autoReconnect", "true"); // We want to load balance between the slaves props.put("roundRobinLoadBalance", "true"); props.put("user", "foo"); props.put("password", "bar"); // // Looks like a normal MySQL JDBC url, with a // comma-separated list of hosts, the first // being the 'master', the rest being any number // of slaves that the driver will load balance against // Connection conn = driver.connect("jdbc:mysql://master,slave1,slave2,slave3/test", props); // // Perform read/write work on the master // by setting the read-only flag to "false" // conn.setReadOnly(false); conn.setAutoCommit(false); conn.createStatement().executeUpdate("UPDATE some_table ...."); conn.commit(); // // Now, do a query from a slave, the driver automatically picks one // from the list // conn.setReadOnly(true); ResultSet rs = conn.createStatement().executeQuery("SELECT a,b FROM alt_table"); ....... } }
このセクションでは、JDBC の一般的な背景を説明します。
アプリケーション サーバの外で JDBC
を使用している場合、DriverManager
クラスは Connections の確立を管理します。
DriverManager
は、Connections をどの
JDBC ドライバ
で作成するべきかの指示を必要とします。この最も簡単な方法は、java.sql.Driver
インターフェイスを実装するクラスで
Class.forName()
を使用することです。MySQL Connector/J
では、このクラスの名称は
com.mysql.jdbc.Driver
になります。このメソッドで、外部構成ファイルを使用して、データベースへの接続に使用するドライバ
クラス名とドライバ
パラメータを供給することが可能です。
次のセクションの Java
コードは、アプリケーションの
main()
メソッドから MySQL Connector/J
を登録する方法を表しています。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; // Notice, do not import com.mysql.jdbc.* // or you will have problems! public class LoadDriver { public static void main(String[] args) { try { // The newInstance() call is a work around for some // broken Java implementations Class.forName("com.mysql.jdbc.Driver").newInstance(); } catch (Exception ex) { // handle the error } }
ドライバが DriverManager
に登録されたら、DriverManager.getConnection()
を呼び出すことによって、特定のデータベースに接続される
Connection
インスタンスを取得することができます :
例 24.1. DriverManager
から接続を取得する
この例は、DriverManager
から
Connection
インスタンスを取得する方法を示しています。getConnection()
メソッドにはいくつかの異なる署名があります。JDK
に添付されている API
資料で、詳しい使用方法を確認してください。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; ... try { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test?" + "user=monty&password=greatsqldb"); // Do something with the Connection ... } catch (SQLException ex) { // handle any errors System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); }
Connection
が確立されたら、Statement
と
PreparedStatement
のオブジェクトの作成、そしてデータベースに関するメタデータの摘出に使用できます。これについては次のセクションで説明されます。
Statement
オブジェクトは、後で説明されるように、基本的な
SQL クエリを実行し、ResultSet
クラスを通しての結果の摘出を可能にします。
Statement
を作成するには、前で説明した
DriverManager.getConnection()
か
Data- Source.getConnection()
メソッドのひとつを介して摘出した
Connection
オブジェクトで
createStatement()
メソッドを呼び出します。
Statement
インスタンスを得たら、使いたい SQL で
executeQuery( String)
メソッドを呼び出し、SELECT
クエリを実行することができます。
データベースのデータを更新するには、executeUpdate(String
SQL)
メソッドを使用します。このメソッドは、update
文に影響を受けた行の数を戻します。
SQL 文が SELECT
、または
UPDATE
/INSERT
になるかが事前に分からない場合は、execute(String
SQL)
メソッドを使用することができます。このメソッドは、SQL
クエリが SELECT
の場合は true
、UPDATE
、INSERT
、もしくは DELETE
文の場合は
false を返します。ステートメントが
SELECT
クエリの場合は、getResultSet()
メソッドを呼び出すことで結果を摘出できます。ステートメントが
UPDATE
、INSERT
、もしくは DELETE
文であれば、Statement
インスタンスで getUpdateCount()
を呼び出すことによって、影響を受けた行の数を呼び出すことができます。
例 24.2. java.sql.Statement を使用して SELECT
クエリを実行する
// assume that conn is an already created JDBC connection Statement stmt = null; ResultSet rs = null; try { stmt = conn.createStatement(); rs = stmt.executeQuery("SELECT foo FROM bar"); // or alternatively, if you don't know ahead of time that // the query will be a SELECT... if (stmt.execute("SELECT foo FROM bar")) { rs = stmt.getResultSet(); } // Now do something with the ResultSet .... } finally { // it is a good idea to release // resources in a finally{} block // in reverse-order of their creation // if they are no-longer needed if (rs != null) { try { rs.close(); } catch (SQLException sqlEx) { // ignore } rs = null; } if (stmt != null) { try { stmt.close(); } catch (SQLException sqlEx) { // ignore } stmt = null; } }
MySQL サーバ バージョン 5.0 からは、Connector/J
3.1.1
以降と使用する場合、java.sql.CallableStatement
インターフェイスは
getParameterMetaData()
メソッドを除いて完全に実装されています。
MySQL ストアド プロシージャの詳細は、 http://dev.mysql.com/doc/mysql/en/stored-procedures.html をご覧ください。
Connector/J は、JDBC の
CallableStatement
インターフェイスを通して、ストアド
プロシージャ機能を露出します。
注意 :?
MySQL サーバの現行バージョンは、JDBC
ドライバが呼び出し可能なステートメントに結果セット
メタデータを提供するための十分な情報を返しません。つまり、CallableStatement
を使用すると、ResultSetMetaData
は NULL
を返す場合があります。
次の例は、1 増やされた inOutParam
の値を戻すストアド
プロシージャと、ResultSet
として inputParam
を介して渡されたストリングを示しています :
例 24.3. ストアド プロシージャ
CREATE PROCEDURE demoSp(IN inputParam VARCHAR(255), \ INOUT inOutParam INT) BEGIN DECLARE z INT; SET z = inOutParam + 1; SET inOutParam = z; SELECT inputParam; SELECT CONCAT('zyxw', inputParam); END
demoSp
プロシージャを Connector/J
で使用するには、次の手順に従ってください :
Connection.prepareCall()
を使用して、呼び出し可能なステートメントを準備
JDBC エスケープ シンタックスを使用する必要があり、またパラメータ プレースホルダを囲む丸括弧 (()) はオプションではないので注意。
例 24.4. Connection.prepareCall()
の使用
import java.sql.CallableStatement; ... // // Prepare a call to the stored procedure 'demoSp' // with two parameters // // Notice the use of JDBC-escape syntax ({call ...}) // CallableStatement cStmt = conn.prepareCall("{call demoSp(?, ?)}"); cStmt.setString(1, "abcdefg");
注意.?
出力パラメータのサポートのためにドライバが行うメタデータの取り出しにより、Connection.prepareCall()
は拡張可能なメソッドです。性能上の理由から、コード内で
CallableStatement
インスタンスを使用して、Connection.prepareCall()
への不要な呼び出しを最小限に抑えてください。
出力パラメータ ( ある場合は ) を登録
出力パラメータ( ストアド
プロシージャの作成時に OUT
または INOUT
と特定されたパラメータ )
の値を取り出すには、JDBC
は、CallableStatement
インターフェイスの様々な
registerOutputParameter()
メソッドを使用して、ステートメントの実行の前にそれらを特定することを要求します
:
例 24.5. 出力パラメータの登録
import java.sql.Types; ... // // Connector/J supports both named and indexed // output parameters. You can register output // parameters using either method, as well // as retrieve output parameters using either // method, regardless of what method was // used to register them. // // The following examples show how to use // the various methods of registering // output parameters (you should of course // use only one registration per parameter). // // // Registers the second parameter as output, and // uses the type 'INTEGER' for values returned from // getObject() // cStmt.registerOutParameter(2, Types.INTEGER); // // Registers the named parameter 'inOutParam', and // uses the type 'INTEGER' for values returned from // getObject() // cStmt.registerOutParameter("inOutParam", Types.INTEGER); ...
入力パラメータ ( ある場合は ) を設定
入力および in/out
パラメータは、PreparedStatement
オブジェクトを対象として設定されます。しかし、CallableStatement
はまた、名前によってパラメータの設定をサポートします
:
例 24.6. CallableStatement
入力パラメータの設定
... // // Set a parameter by index // cStmt.setString(1, "abcdefg"); // // Alternatively, set a parameter using // the parameter name // cStmt.setString("inputParameter", "abcdefg"); // // Set the 'in/out' parameter using an index // cStmt.setInt(2, 1); // // Alternatively, set the 'in/out' parameter // by name // cStmt.setInt("inOutParam", 1); ...
CallableStatement
を実行し、すべての結果セット、もしくは出力パラメータを呼び出す
CallableStatement
はいかなる
Statement
execute メソッド (
executeUpdate()
、executeQuery()
、または
execute()
)
の呼び出しもサポートしますが、最も呼び出しやすいメソッドは
execute()
で、ストアド
プロシージャが結果セットを返すかが事前に分からなくても問題ありません
:
例 24.7. 結果と出力パラメータの値を呼び出す
... boolean hadResults = cStmt.execute(); // // Process all returned result sets // while (hadResults) { ResultSet rs = cStmt.getResultSet(); // process result set ... hadResults = rs.getMoreResults(); } // // Retrieve output parameters // // Connector/J supports both index-based and // name-based retrieval // int outputValue = cStmt.getInt(2); // index-based outputValue = cStmt.getInt("inOutParam"); // name-based ...
JDBC API のバージョン 3.0
より前では、自動インクリメント、または識別カラムをサポートするデータベースからキー値を呼び出す標準の方法がありませんでした。MySQL
に古い JDBC
ドライバを使用すると、Statement
インターフェイスでいつでも MySQL
特有のメソッドを使用でき、また、AUTO_INCREMENT
キーを持つテーブルに INSERT
を発行した後で、クエリ SELECT
LAST_INSERT_ID()
を発行することができました。MySQL
特有メソッド呼び出しの使用はポータブルではなく、AUTO_INCREMENT
キーの値を得るために SELECT
を発行するには、データベースまでもう一度往復する必要があり、最も効率的とはいえません。次のコード部品は、AUTO_INCREMENT
値を呼び出す 3
つの方法を実証します。まず、AUTO_INCREMENT
キーを呼び出し、JDBC-3.0
にアクセスする必要がある場合に推奨されるメソッドである、新しい
JDBC-3.0 メソッド getGeneratedKeys()
使用を実証します。その次の例では、標準の
SELECT LAST_INSERT_ID()
クエリを使用して、同じ値を呼び出す方法を挙げます。最後の例では、insertRow()
メソッドを使用する場合に、更新可能な結果セットが
AUTO_INCREMENT
値を呼び出す方法を示します。
例 24.8. Statement.getGeneratedKeys()
を使った
AUTO_INCREMENT
カラム値の呼び出し
Statement stmt = null; ResultSet rs = null; try { // // Create a Statement instance that we can use for // 'normal' result sets assuming you have a // Connection 'conn' to a MySQL database already // available stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_UPDATABLE); // // Issue the DDL queries for the table for this example // stmt.executeUpdate("DROP TABLE IF EXISTS autoIncTutorial"); stmt.executeUpdate( "CREATE TABLE autoIncTutorial (" + "priKey INT NOT NULL AUTO_INCREMENT, " + "dataField VARCHAR(64), PRIMARY KEY (priKey))"); // // Insert one row that will generate an AUTO INCREMENT // key in the 'priKey' field // stmt.executeUpdate( "INSERT INTO autoIncTutorial (dataField) " + "values ('Can I Get the Auto Increment Field?')", Statement.RETURN_GENERATED_KEYS); // // Example of using Statement.getGeneratedKeys() // to retrieve the value of an auto-increment // value // int autoIncKeyFromApi = -1; rs = stmt.getGeneratedKeys(); if (rs.next()) { autoIncKeyFromApi = rs.getInt(1); } else { // throw an exception from here } rs.close(); rs = null; System.out.println("Key returned from getGeneratedKeys():" + autoIncKeyFromApi); } finally { if (rs != null) { try { rs.close(); } catch (SQLException ex) { // ignore } } if (stmt != null) { try { stmt.close(); } catch (SQLException ex) { // ignore } } }
例 24.9. SELECT LAST_INSERT_ID()
を使った
AUTO_INCREMENT
カラム値の呼び出し
Statement stmt = null; ResultSet rs = null; try { // // Create a Statement instance that we can use for // 'normal' result sets. stmt = conn.createStatement(); // // Issue the DDL queries for the table for this example // stmt.executeUpdate("DROP TABLE IF EXISTS autoIncTutorial"); stmt.executeUpdate( "CREATE TABLE autoIncTutorial (" + "priKey INT NOT NULL AUTO_INCREMENT, " + "dataField VARCHAR(64), PRIMARY KEY (priKey))"); // // Insert one row that will generate an AUTO INCREMENT // key in the 'priKey' field // stmt.executeUpdate( "INSERT INTO autoIncTutorial (dataField) " + "values ('Can I Get the Auto Increment Field?')"); // // Use the MySQL LAST_INSERT_ID() // function to do the same thing as getGeneratedKeys() // int autoIncKeyFromFunc = -1; rs = stmt.executeQuery("SELECT LAST_INSERT_ID()"); if (rs.next()) { autoIncKeyFromFunc = rs.getInt(1); } else { // throw an exception from here } rs.close(); System.out.println("Key returned from " + "'SELECT LAST_INSERT_ID()': " + autoIncKeyFromFunc); } finally { if (rs != null) { try { rs.close(); } catch (SQLException ex) { // ignore } } if (stmt != null) { try { stmt.close(); } catch (SQLException ex) { // ignore } } }
例 24.10. Updatable ResultSets
内の
AUTO_INCREMENT
カラム値の呼び出し
Statement stmt = null; ResultSet rs = null; try { // // Create a Statement instance that we can use for // 'normal' result sets as well as an 'updatable' // one, assuming you have a Connection 'conn' to // a MySQL database already available // stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_UPDATABLE); // // Issue the DDL queries for the table for this example // stmt.executeUpdate("DROP TABLE IF EXISTS autoIncTutorial"); stmt.executeUpdate( "CREATE TABLE autoIncTutorial (" + "priKey INT NOT NULL AUTO_INCREMENT, " + "dataField VARCHAR(64), PRIMARY KEY (priKey))"); // // Example of retrieving an AUTO INCREMENT key // from an updatable result set // rs = stmt.executeQuery("SELECT priKey, dataField " + "FROM autoIncTutorial"); rs.moveToInsertRow(); rs.updateString("dataField", "AUTO INCREMENT here?"); rs.insertRow(); // // the driver adds rows at the end // rs.last(); // // We should now be on the row we just inserted // int autoIncKeyFromRS = rs.getInt("priKey"); rs.close(); rs = null; System.out.println("Key returned for inserted row: " + autoIncKeyFromRS); } finally { if (rs != null) { try { rs.close(); } catch (SQLException ex) { // ignore } } if (stmt != null) { try { stmt.close(); } catch (SQLException ex) { // ignore } } }
上記の例のコードを使用する時は、次の出力を取得してください
: getGeneratedKeys()
から戻されたキー : 1 SELECT
LAST_INSERT_ID()
から戻されたキー : 1
挿入された行に戻されたキー : 2
関数の値は接続へスコープされているため、SELECT
LAST_INSERT_ID()
クエリの使用がしにくい場合がありますので注意してください。したがって、他のクエリが同じ接続上で発生する場合、値は上書きされます。一方、getGeneratedKeys()
メソッドは Statement
インスタンスにスコープされているので、他のクエリが同じ接続上で発生しても使用が可能ですが、同じ
Statement
インスタンス上では使用できません。
このセクションでは、複数の状況での Connector/J の使用方法を説明します。
このセクションでは、Connector/J の使用に関連する J2EE コンセプトの一般的な背景を説明します。
接続プーリングは、すべてのスレッドが必要な接続をすぐに使用できるよう、接続のプールを作成し管理する方法です。
接続をプールするこの方法は、ほとんどのアプリケーションは、普通数ミリ秒で完遂できるトランザクションを積極的に処理している時に、スレッドが JDBC 接続にアクセスすることだけを必要とするという事実に基づいています。トランザクションを処理していない時、接続はそうでなければ待機します。代わりに、接続プールは他のスレッドに、待機接続を有効に利用することを許可します。
実際には、スレッドが MySQL や、JDBC を使用する他のデータベースに対して作業を行う時、プールからの接続を要求します。スレッドは接続を使い終えたらそれをプールに戻し、他のスレッドが使用できるようにします。
接続がプールから貸し出されると、要求したスレッドが独占的にそれを使用します。プログラミングの観点からは、スレッドが
JDBC 接続が必要になるたびに
DriverManager.getConnection()
を呼び出すのと同じことですが、しかし接続プーリングを使えば、スレッドは新しい、または既存の接続を使用する可能性があります。
接続プーリングは、 全体的なリソースの使用を削減しつつ、Java アプリケーションの能率を著しく向上させます。接続プーリングの主な利点 :
接続作成時間の短縮
他のデータベースに比べ、 MySQL が提供する高速接続 setup に対してはこれはあまり関係ありませんが、新しい JDBC 接続の作成ではネットワーキングと JDBC ドライバのオーバヘッドが増えます。これは接続を再利用することで避けることができます。
簡略化されたプログラム モデル
接続プーリングを使用する場合、各スレッドは専用の JDBC 接続を作成したかのような動作が可能になり、直接的な JDBC プログラミング テクニックを使用することができるようになります。
制御されたリソースの使用
接続プーリングを使用せず、代わりにスレッドが接続を必要とするたびに新しいものを作成する場合、 アプリケーションのリソースの使用はきわめて無駄なものになり、荷重を受けて予想外の動作に出る可能性があります。
MySQL への各接続は、クライアント側とサーバ側両方にオーバヘッド ( メモリ 、CPU 、コンテキスト スイッチ、など ) を持つことを覚えておいてください。すべての接続は、アプリケーションと MySQL で利用できるリソースの数を制限します。これらのリソースの多くは、接続が有効な作業をしていなくてもかまわず使用されます !
リソースの利用を、ただ遅いだけでなく、アプリケーションが失効しかけるまで押さえながら、接続プールを有効にして最大限に機能させることができます。
幸運にも、Sun は JDBC の接続プーリングのコンセプトを、JDBC-2.0 Optional インターフェイスを通して標準化し、すべての主要なアプリケーション サーバは MySQL Connector/J と正常に機能するこれらの API を実装しています。
通常、接続プールはアプリケーション サーバの構成ファイルで構成し、Java Naming または Directory Interface (JNDI) を介してアクセスします。次のコードは、J2EE アプリケーション サーバで展開されたアプリケーションから、接続プールを使用する例を示しています :
例 24.11. J2EE アプリケーション サーバで接続プールを使用
import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import javax.naming.InitialContext; import javax.sql.DataSource; public class MyServletJspOrEjb { public void doSomething() throws Exception { /* * Create a JNDI Initial context to be able to * lookup the DataSource * * In production-level code, this should be cached as * an instance or static variable, as it can * be quite expensive to create a JNDI context. * * Note: This code only works when you are using servlets * or EJBs in a J2EE application server. If you are * using connection pooling in standalone Java code, you * will have to create/configure datasources using whatever * mechanisms your particular connection pooling library * provides. */ InitialContext ctx = new InitialContext(); /* * Lookup the DataSource, which will be backed by a pool * that the application server provides. DataSource instances * are also a good candidate for caching as an instance * variable, as JNDI lookups can be expensive as well. */ DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/MySQLDB"); /* * The following code is what would actually be in your * Servlet, JSP or EJB 'service' method...where you need * to work with a JDBC connection. */ Connection conn = null; Statement stmt = null; try { conn = ds.getConnection(); /* * Now, use normal JDBC programming to work with * MySQL, making sure to close each resource when you're * finished with it, which allows the connection pool * resources to be recovered as quickly as possible */ stmt = conn.createStatement(); stmt.execute("SOME SQL QUERY"); stmt.close(); stmt = null; conn.close(); conn = null; } finally { /* * close any jdbc instances here that weren't * explicitly closed during normal code path, so * that we don't 'leak' resources... */ if (stmt != null) { try { stmt.close(); } catch (sqlexception sqlex) { // ignore -- as we can't do anything about it here } stmt = null; } if (conn != null) { try { conn.close(); } catch (sqlexception sqlex) { // ignore -- as we can't do anything about it here } conn = null; } } } }
上記の例で示されているように、JNDI InitialContext を取得し、DataSource をルックアップした後では、残りのコードは、JDBC プログラミングの経験がある人には見覚えのあるものになります。
接続プーリングを使用する際の最も重要な注意点は、コードになにが起こっても ( 例えばフロー制御など ) 、接続とそれによって作成されたすべてのもの ( ステートメント もしくは 結果セット等 ) を必ず閉じることです。そうすると、それらを再使用することができますが、これを怠ればそれらは座礁してしまい、それらが表す MySQL サーバ リソース ( バッファ、ロック、もしくはソケットなど ) が、良い場合でもしばらくの間、ひどい時は永久に停滞する可能性があります。
接続プールの適切なサイズは?
構成におけるすべての経験則と同じく、答えは : 場合によって異なる。適したサイズは予測されたロードとデータベース トランザクション時間の平均によりますが、最適な接続プールのサイズは予想するより小さなものになります。Sun の Java Petstore ブループリント アプリケーションを例に挙げると、許容可能な応答時間での MySQL または Tomcat を使用して、15-20 接続の接続プールは比較的緩やかなロード ( 600 平行ユーザ ) をサーブすることができます。
アプリケーションへの接続プールのサイズを正しく計るには、Apache JMeter または The Grinder のようなロード テスト スクリプトを作成し、アプリケーションをロード テストしてください。
開始ポイントを判断する簡単な方法は、接続プールの接続の最大数を非有界なるよう構成し、ロード テストを実行、同時に使用された接続の最大数を計ります。そこから逆に作業して、プールされた接続の最小、または最大のどんな値が、特定のアプリケーションに最高の性能を与えるか判断することができます。
次の指示は Tomcat-5.x のインストラクションに基づいており、この資料が書かれた時の現行版だったものは http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jndi-datasource-examples-howto.html で見ることができます。
まず、$CATALINA_HOME/common/lib
内の
Connector/J についてくる .jar
ファイルをインストールし、コンテナにインストールされたすべてのアプリケーションが利用できるようにします。
次に、ウェブ
アプリケーションを定義するコンテキストで、宣言リソースを
$CATALINA_HOME/conf/server.xml
に追加することにより、JNDI DataSource
を構築します :
<Context ....> ... <Resource name="jdbc/MySQLDB" auth="Container" type="javax.sql.DataSource"/> <!-- The name you used above, must match _exactly_ here! The connection pool will be bound into JNDI with the name "java:/comp/env/jdbc/MySQLDB" --> <ResourceParams name="jdbc/MySQLDB"> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <!-- Don't set this any higher than max_connections on your MySQL server, usually this should be a 10 or a few 10's of connections, not hundreds or thousands --> <parameter> <name>maxActive</name> <value>10</value> </parameter> <!-- You don't want to many idle connections hanging around if you can avoid it, only enough to soak up a spike in the load --> <parameter> <name>maxIdle</name> <value>5</value> </parameter> <!-- Don't use autoReconnect=true, it's going away eventually and it's a crutch for older connection pools that couldn't test connections. You need to decide whether your application is supposed to deal with SQLExceptions (hint, it should), and how much of a performance penalty you're willing to pay to ensure 'freshness' of the connection --> <parameter> <name>validationQuery</name> <value>SELECT 1</value> </parameter> <!-- The most conservative approach is to test connections before they're given to your application. For most applications this is okay, the query used above is very small and takes no real server resources to process, other than the time used to traverse the network. If you have a high-load application you'll need to rely on something else. --> <parameter> <name>testOnBorrow</name> <value>true</value> </parameter> <!-- Otherwise, or in addition to testOnBorrow, you can test while connections are sitting idle --> <parameter> <name>testWhileIdle</name> <value>true</value> </parameter> <!-- You have to set this value, otherwise even though you've asked connections to be tested while idle, the idle evicter thread will never run --> <parameter> <name>timeBetweenEvictionRunsMillis</name> <value>10000</value> </parameter> <!-- Don't allow connections to hang out idle too long, never longer than what wait_timeout is set to on the server...A few minutes or even fraction of a minute is sometimes okay here, it depends on your application and how much spikey load it will see --> <parameter> <name>minEvictableIdleTimeMillis</name> <value>60000</value> </parameter> <!-- Username and password used when connecting to MySQL --> <parameter> <name>username</name> <value>someuser</value> </parameter> <parameter> <name>password</name> <value>somepass</value> </parameter> <!-- Class name for the Connector/J driver --> <parameter> <name>driverClassName</name> <value>com.mysql.jdbc.Driver</value> </parameter> <!-- The JDBC connection url for connecting to MySQL, notice that if you want to pass any other MySQL-specific parameters you should pass them here in the URL, setting them using the parameter tags above will have no effect, you will also need to use & to separate parameter values as the ampersand is a reserved character in XML --> <parameter> <name>url</name> <value>jdbc:mysql://localhost:3306/test</value> </parameter> </ResourceParams> </Context>
通常は、Tomcat のデータソースを構成する方法は随時変化し、XML ファイルで間違ったシンタックスを使用している場合は残念ながら、以下に似た例外が投入される可能性が高いので、Tomcat のバージョンについてくるインストール インストラクションにしたがってください。
Error: java.sql.SQLException: Cannot load JDBC driver class 'null ' SQL state: null
このインストラクションは JBoss-4.x
をカバーしています。アプリケーション
サーバで JDBC ドライバ
クラスを利用可能にするには、Connector/J
についてくる .jar
ファイルを、サーバ構築のために、lib
ディレクトリにコピーします ( これは通常
default
と呼ばれる
)。そして、同じ構築ディレクトリで、deploy
と名付けられたサブディレクトリで、"-ds.xml"
で終わるデータソース
構築ファイルを作成します。"-ds.xml"
はこのファイルを JDBC Datasource
としてデプロイするよう JBoss
に指示します。ファイルには次の内容が含まれています
:
<datasources> <local-tx-datasource> <!-- This connection pool will be bound into JNDI with the name "java:/MySQLDB" --> <jndi-name>MySQLDB</jndi-name> <connection-url>jdbc:mysql://localhost:3306/dbname</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>user</user-name> <password>pass</password> <min-pool-size>5</min-pool-size> <!-- Don't set this any higher than max_connections on your MySQL server, usually this should be a 10 or a few 10's of connections, not hundreds or thousands --> <max-pool-size>20</max-pool-size> <!-- Don't allow connections to hang out idle too long, never longer than what wait_timeout is set to on the server...A few minutes is usually okay here, it depends on your application and how much spikey load it will see --> <idle-timeout-minutes>5</idle-timeout-minutes> <!-- If you're using Connector/J 3.1.8 or newer, you can use our implementation of these to increase the robustness of the connection pool. --> <exception-sorter-class-name>com.mysql.jdbc.integration.jboss.ExtendedMysqlExceptionSorter</exception-sorter-class-name> <valid-connection-checker-class-name>com.mysql.jdbc.integration.jboss.MysqlValidConnectionChecker</valid-connection-checker-class-name> </local-tx-datasource> </datasources>
MySQL Connector/J のユーザがよく直面する問題がいくつかあります。このセクションでは、それらの兆候と解決法を説明します。
Questions
25.4.5.3.1: MySQL Connector/J でデータベースに接続しようとすると、次の例外が出ます :
SQLException: Server configuration denies access to data source SQLState: 08001 VendorError: 0
これはなんでしょうか ?MySQL コマンドライン クライアントとは問題なく接続できます。
25.4.5.3.2: アプリケーションが SQLException 'No Suitable Driver' を投入するのですが、なぜでしょうか?
25.4.5.3.3: アプレットまたはアプリケーションで MySQL Connector/J を使用したいのですが、次に似た例外が出ます :
SQLException: Cannot connect to MySQL server on host:3306. Is there a MySQL server running on the machine/port you are trying to connect to? (java.security.AccessControlException) SQLState: 08S01 VendorError: 0
25.4.5.3.4: 1 日は問題なく動くのですが、夜の間に停止してしまうサーブレット/アプリケーションがあります。
25.4.5.3.5: JDBC-2.0 の更新可能な結果セットを使おうとすると、その結果セットは更新不可能という例外が出ます。
25.4.5.3.6: Connector/J を使って MySQL サーバに接続できません。接続パラメータが間違っているようです。
Questions and Answers
25.4.5.3.1: MySQL Connector/J でデータベースに接続しようとすると、次の例外が出ます :
SQLException: Server configuration denies access to data source SQLState: 08001 VendorError: 0
これはなんでしょうか ?MySQL コマンドライン クライアントとは問題なく接続できます。
java は Unix Domain Sockets をサポートしないため、MySQL Connector/J は MySQL への接続に TCP/IP ソケットを使用する必要があります。そのため、MySQL Connector/J が MySQL に接続する場合、MySQL サーバのセキュリティ マネージャはその grant テーブルを使用して、接続が許可されるべきかを決定します。
MySQL サーバに GRANT
文を使用して、これが起きるように、必要なセキュリティ証明書を
MySQL
サーバに追加する必要があります。詳細は
項12.5.1.3. 「GRANT
構文」 を参照。
注意.?
mysql コマンドライン
クライアントでの接続のテストは、--host
フラグを加え、localhost
以外をホストに使用しなければ作動しません。mysql
コマンドライン
クライアントは、特別なホスト名
localhost
を使っている場合、Unix ドメイン
ソケットを使用しません。localhost
への接続をテストしている場合、ホスト名に
127.0.0.1
を代わりに使用してください。
注意.? MySQL で権限や許可を不適切に変更すると、サーバが適したセキュリティ プロパティを持たないでインストールされる恐れがありまs。
25.4.5.3.2: アプリケーションが SQLException 'No Suitable Driver' を投入するのですが、なぜでしょうか?
このエラーには 3 つの原因が考えられます :
Connector/J driver が CLASSPATH
にない。項24.4.2. 「Connector/J のインストール」
参照。
接続 URL のフォーマットが間違っている、または誤った JDBC ドライバを参照している。
DriverManager
を使用している場合、jdbc.drivers
システム プロパティに Connector/J
ドライバのロケーションが取り込まれていない。
25.4.5.3.3: アプレットまたはアプリケーションで MySQL Connector/J を使用したいのですが、次に似た例外が出ます :
SQLException: Cannot connect to MySQL server on host:3306. Is there a MySQL server running on the machine/port you are trying to connect to? (java.security.AccessControlException) SQLState: 08S01 VendorError: 0
アプレットを起動しているか、MySQL サーバが "--skip-networking" オプション セットとインストールされている、または MySQL サーバの前にファイアウォールがあるということが考えられます。
アプレットは、そのアプレットに .class ファイルをサーブしたウェブ サーバを実行するマシンにだけネットワーク接続を確立し戻すことができます。つまり、これを実行するには、MySQL を同じマシン上で起動する必要があります ( もしくは何らかのポート リダイレクトが必要 ) 。これはまた、ローカル ファイル システムからはアプレットをテストすることができないということで、それらをいつもウェブ サーバにデプロイする必要があります。
Java は Unix ドメイン ソケットをサポートしないので、MySQL Connector/J は TCP/IP を使用して、MySQL とだけ交信することができます。MySQL を "--skip-networking" フラグで起動した場合、またはファイアウォールされている場合は、TCP/IP の MySQL との交信は影響を受けている可能性があります。
MySQL が "--skip-networking" オプション
セットと起動された場合 ( 例えば MySQL
サーバの Debian Linux
パッケージはこれを行いません ) 、file
/etc/mysql/my.cnf or /etc/my.cnf
でそれをコメントアウトする必要があります。当然、my.cnf
file もMySQL サーバの data
ディレクトリか他の場所にある場合があります
( MySQL
がシステムのためにどのようにコンパイルされたかによる
) 。MySQL AB
で作成されたバイナリは常に、/etc/my.cnf and
[datadir]/my を調査します。MySQL
サーバがファイアウォールされている場合、
MySQL が監視しているポートの MySQL サーバへ
Java コードを実行しているホストからの
TCP/IP
を許可するよう、ファイアウォールを構成する必要があります。(
デフォルトでは 3306 ) 。
25.4.5.3.4: 1 日は問題なく動くのですが、夜の間に停止してしまうサーブレット/アプリケーションがあります。
MySQL は、8 時間動きがなければ接続を閉じてしまいます。停滞した接続を扱う接続プールを使用するか、"autoReconnect" パラメータを使用する必要があります ( 項24.4.4.1. 「Connector/J の Driver/Datasource クラス名、URL シンタックス、および構成プロパティ」 参照 ) 。
また、アプリケーションが終了するまでSQLExceptions
をプロンプトするより、アプリケーションでキャッチして対処するべきでしょう。プログラミングのよい練習です。MySQL
Connector/J
は、クエリの処理中にネットワーク接続の問題に直面した場合、SQLState
( APIDOCS 内の
java.sql.SQLException.getSQLState()
参照 ) を "08S01"
に設定します。アプリケーション
コードは、この時点で MySQl
への再接続を試行します。
次の ( 単純な ) 例は、これらの例外を扱えるコードはどんな様子かを表しています。
例 24.12. リトライ ロジックとのトランザクション例
public void doBusinessOp() throws SQLException { Connection conn = null; Statement stmt = null; ResultSet rs = null; // // How many times do you want to retry the transaction // (or at least _getting_ a connection)? // int retryCount = 5; boolean transactionCompleted = false; do { try { conn = getConnection(); // assume getting this from a // javax.sql.DataSource, or the // java.sql.DriverManager conn.setAutoCommit(false); // // Okay, at this point, the 'retry-ability' of the // transaction really depends on your application logic, // whether or not you're using autocommit (in this case // not), and whether you're using transacational storage // engines // // For this example, we'll assume that it's _not_ safe // to retry the entire transaction, so we set retry // count to 0 at this point // // If you were using exclusively transaction-safe tables, // or your application could recover from a connection going // bad in the middle of an operation, then you would not // touch 'retryCount' here, and just let the loop repeat // until retryCount == 0. // retryCount = 0; stmt = conn.createStatement(); String query = "SELECT foo FROM bar ORDER BY baz"; rs = stmt.executeQuery(query); while (rs.next()) { } rs.close(); rs = null; stmt.close(); stmt = null; conn.commit(); conn.close(); conn = null; transactionCompleted = true; } catch (SQLException sqlEx) { // // The two SQL states that are 'retry-able' are 08S01 // for a communications error, and 40001 for deadlock. // // Only retry if the error was due to a stale connection, // communications problem or deadlock // String sqlState = sqlEx.getSQLState(); if ("08S01".equals(sqlState) || "40001".equals(sqlState)) { retryCount--; } else { retryCount = 0; } } finally { if (rs != null) { try { rs.close(); } catch (SQLException sqlEx) { // You'd probably want to log this . . . } } if (stmt != null) { try { stmt.close(); } catch (SQLException sqlEx) { // You'd probably want to log this as well . . . } } if (conn != null) { try { // // If we got here, and conn is not null, the // transaction should be rolled back, as not // all work has been done try { conn.rollback(); } finally { conn.close(); } } catch (SQLException sqlEx) { // // If we got an exception here, something // pretty serious is going on, so we better // pass it up the stack, rather than just // logging it. . . throw sqlEx; } } } } while (!transactionCompleted && (retryCount > 0)); }
注意.?
接続状態やデータベース状態の情報が破損する危険なしに
MySQL
サーバに再接続できる安全なメソッドはないので、autoReconnect
オプションの使用はお勧めしません。その代わり、プールからの利用可能な接続を使用して、MySQL
サーバに接続するアプリケーションを有効にする接続プールを使いましょう。autoReconnect
機能は廃止になり、今後のリリースでは除外される可能性があります。
25.4.5.3.5: JDBC-2.0 の更新可能な結果セットを使おうとすると、その結果セットは更新不可能という例外が出ます。
MySQL は行識別子を持たないため、MySQL Connector/J は、少なくともプライマリ キーをひとつ持つテーブルのクエリからの結果セットしか更新できず、クエリはすべてのプライマリ キーと、テーブルをひとつだけスパンすることができるクエリを選択する必要があります ( 結合はなし ) 。これは JDBC 仕様に概要があります。
この問題は更新可能な結果セットを使用する時にだけ起こり、Connector.J
は、各行の一意な参照なしで更新される結果セット内の正しい行を特定することができるとは保証できません。WHERE
句を使って、整合される基準値をそれぞれ特定することのできるテーブルで
UPDATE
または
DELETE
文を使用している場合、テーブルに一意的なフィールドを持つのための必須条件はありません。
25.4.5.3.6: Connector/J を使って MySQL サーバに接続できません。接続パラメータが間違っているようです。
サーバで skip-networking
オプションが有効になっていないことを確かめてください。Connector/J
は TCP/IP
でサーバと通信しなければなりません。名前付きソケットはサポートされていません。また、接続を
Firewall や他のネットワーク セキュリティ
システムに通さないように注意してください。詳細は
項B.1.2.2. 「Can't connect to [local] MySQL server
」
をご覧ください。
MySQL AB はメーリング リストを用いて、ユーザ コミュニティーを後援します。Connector/J 関連の問題については、MySQL と Java メーリングリストから、経験豊富なユーザに援助を求めることができます。アーカイブと加入情報はオンラインで、http://lists.mysql.com/java にて閲覧できます。
MySQL メーリングリストへの参加、リスト アーカイブの参照については、http://lists.mysql.com/ 、項1.6.1. 「MySQL メーリング リスト」 参照。
経験豊富なユーザからのコミュニティー支援は、JDBC Forum でも得ることができます。また、http://forums.mysql.com にあるもうひとつの MySQL Forum でも、他のユーザーとの情報交換が行えます。項1.6.2. 「MySQL フォーラムにおける MySQL コミュニティサポート」 参照。
通常のバグのレポートは、弊社のバグ データベース http://bugs.mysql.com/ で行ってください。このデータベースは一般公開されており、どなたでも参照、検索することができます。このシステムにログインすると、新しいレポートを投稿することもできます。
MySQL のセキュリティに深刻なバグを発見した場合は、security_at_mysql.com まで E メールでお知らせください。
正確なバグ レポートを書くのは時間がかかるものですが、レポートを一度で済ませることで、報告者と弊社、双方の時間を節約することができます。そのバグの完全なテスト ケースを含むバグ レポートを提供していただければ、次回のリリースではその問題を修正できる可能性が高くなります。
このセクションでは、ユーザの時間短縮と効果的な情報提供のため、レポートの正しい書き方を紹介します。
再現可能なバグ レポートがある場合は、http://bugs.mysql.com/ のバグ データベースへ報告してください。弊社で再現が可能なバグであれば、次回の MySQL リリースで修正される可能性が高くなります。
他の問題の報告には、MySQL メーリングリストのいずれかをご利用ください。
多大な情報をお寄せいただくのは特に問題はありませんが、情報があまりにも少ないと対処が難しくなりますのでご了承ください。問題に直接関係しないと判断し、詳細を省略して報告されることがしばしばありますのでご注意ください。
ご留意いただきたい点は以下です :報告に含むべきか迷う情報があれば、それも加えてください。最初の報告で情報が足りない場合は後日お尋ねすることになりますので、はじめのレポートにできるだけ詳細を書いていただくと、作業がより速く簡潔になります。
バグのレポートによくある間違いは、(a) 使用した Connector/J または MySQL のバージョン番号の書き忘れ、(b) Connector/J がインストールされたプラットフォームの説明が不完全なこと ( MySQL そのものがインストールされた JVM のバージョン、プラットフォームのタイプ、バージョン番号、等 ) 、です。
これは非常に重要な情報で、99% の場合、この情報なしでは報告を活用することができません。「なぜうまく作動しないのか ? 」 という質問が頻繁に寄せられます。そのほとんどは、希望の機能がその MySQL バージョンに実装されていないことが原因で、もしくは、報告にあるバグは新しい MySQL のバージョンではすでに修正されています。
エラーの原因はプラットフォームにあることもあります。その場合、オペレーション システムとプラットフォームのバージョン番号の情報なしで解決することはほぼ不可能です。
もしできれば、再現可能で、サードパーティ クラスが関与しない独立したテストケースを作成してください。
このプロセスを能率化するため、弊社では、'com.mysql.jdbc.util.BaseBugReport
'
と名付けられたテストケース用のベースクラスを
Connector/J
と共に発送しています。このクラスを使用して、Connector/J
のテストケースを作成するには、com.mysql.jdbc.util.BaseBugReport
から継承する独自のクラスを作成し、メソッド
setUp()
、tearDown()
、および runTest()
をオーバライドしてください。
setUp()
メソッドで、テーブルを作るコードを作成し、バグの証明に必要なデータを取り込みます。
runTest()
メソッドで、setUp
メソッドで作ったテーブルとデータを使用して、バグを証明するコードを作成します。
tearDown()
メソッドで、setUp()
メソッドで作ったテーブルのいずれかを削除します。
上記の 3
つのメソッドのどれかで、getConnection()
メソッドの変異型のひとつを使用して、MySQL
への JDBC 接続を作成してください :
getConnection()
-
getUrl()
で特定された JDBC URL
への接続を提供。接続がすでにある場合、その接続は戻され、それでなければ新たな接続が作成される。
getNewConnection()
- バグ
レポートのために新しい接続が必要な場合はこれを使用
( つまり、ひとつ以上の接続が関与する ) 。
getConnection(String url)
-
与えられた URL を使用して接続を戻す。
getConnection(String url, Properties
props)
- 与えられた URL
とプロパティを使用して接続を戻す。
'jdbc:mysql:///test' とは異なる JDBC URL
を使う必要がある場合、メソッド
getUrl()
もオーバライドします。
assertTrue(boolean expression)
および
assertTrue(String failureMessage, boolean
expression)
メソッドを使用して、証明したい動作のテストケースにあう条件を作成します
(
観察している動作と比べ、それによってほぼバグ
レポートを送ることになります ) 。
最後に、テストケースの新しいインスタンスを作る
main()
メソッドを作成し、run
メソッドを呼び出します :
public static void main(String[] args) throws Exception { new MyBugReport().run(); }
テストケースを終え、報告したいバグが証明されていることを確認したら、バグ レポートを添えて http://bugs.mysql.com/ にアップロードします。
Connector/J Change History ( Changelog ) は、MySQL のメイン Changelog に収められています。項C.5. 「MySQL Connector/J Change History」 参照。
PHP とその資料は、PHP
ウェブサイトから入手することができます。MySQL
では Windows のオペレーティング
システムでの使用を対象に、MySQL バージョン 4.1.16
以降と MySQL 5.0.18 、そして MySQL 5.1 に対応する
mysql
エクステンションと
mysqli
エクステンションを
http://dev.mysql.com/downloads/connector/php/
で提供しています。MySQL
が提供するエクステンションの使用の推奨に関しては、同ウェブページをご覧ください。Windows
以外のプラットフォームでは、PHP ソー
スに同梱されている mysql
エクステンションまたは mysqli
エクステンションを使用してください。詳しくは項23.3. 「MySQL PHP API」を参照してください。