無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

第24章 MySQL コネクタ

この章では、クライアントプログラムから 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とライブラリー を参照してください。

24.1. MySQL Connector/ODBC

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 マネージャーも忘れずにインストールしてください。

重要事項 :

24.1.1. Connector/ODBC の概要

ODBC (Open Database Connectivity) はクライアント プログラムに、多様なデータベースやデータソースへのアクセスを提供します。ODBC は SQL データベースへの接続を可能にする、標準化された API です。SQL Access Group の規格に準じて開発され、関数呼び出しやエラー コード、データベース非依存アプリケーションの開発に使用されるデータタイプのセットを定義します。ODBC は通常、複数のデータソースへのデータベース非依存性、または同時アクセスが必要な場合に使用されます。

ODBC に関しての詳細は、http://www.microsoft.com/data/ を参照してください。

24.1.1.1. Connector/ODBC バージョン

現在利用できる 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 と表示される場合があります。これは単にナンバーが異なって表示されるだけであり、バージョンそのものに違いはありません。

24.1.1.2. ODBC と Connector/ODBC の一般情報

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/ を参照してください。

24.1.1.2.1. Connector/ODBC の構造

Connector/ODBC の構造は、次の図のように 5 つのコンポーネントから成っています :

Connector/ODBC の構造
  • アプリケーション :

    アプリケーションは 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 データベースです。データベースは、データの情報源 ( 問い合わせの間 ) 、そしてデータの宛先 ( 挿入または更新の間 ) として利用されます。

24.1.1.2.2. ODBC ドライバ マネージャー

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 を参照。

24.1.2. Connector/ODBC のインストール

Connector/ODBC ドライバのインストールには、バイナリ インストールとソース インストールという2種類の方法があります。バイナリ インストールは最も容易で簡潔なインストール法です。ソース インストール法は、プラットフォームにバイナリ インストールのパッケージがない場合か、インストールのプロセスや、Connector/ODBC ドライバをインストール前に変更・修正したい場合にのみ使用します。

24.1.2.1. 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/ でご確認ください。

24.1.2.2. サポート対象のプラットフォーム

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 に提供し、他のユーザにも公開していただける場合は、 までメールをお送りください。

24.1.2.3. バイナリ配布物から Connector/ODBC をインストールする

バイナリ配布物を利用すると、簡潔に Connector/ODBC をインストールすることができます。ドライバやインストール ロケーションをもっと細かに調節したい、またもしくは、ドライバの要素をカスタマイズしたいという場合は、ソースから構築してインストールする必要があります。詳細は 項24.1.2.4. 「ソース配布物から Connector/ODBC をインストールする」 をご覧ください。

24.1.2.3.1. Connector/ODBC をバイナリ配布物から Windows に インストールする

Windows に Connector/ODBC ドライバをインストールする前に、Microsoft Data Access Components (MDAC) がアップデートされているか確認してください。最新バージョンは Microsoft Data Access and Storage ウェブサイトから入手することができます。

Windows にインストールする場合、3つのタイプの配布物が利用できます。それぞれのコンテンツはまったく同じもので、インストールの方法だけが異なります。

24.1.2.3.1.1. インストーラを使用して Windows Connector/ODBC ドライバをインストールする

インストール パッケージを使用すると、非常に簡単に Connector/ODBC ドライバをインストールすることができます。Zip 形式のインストーラをダウンロードした場合は、まずインストール アプリケーションを摘出してください。基本的なインストールの手順は、どちらのインストーラも同じです。

インストールを実行するには、次の手順に従ってください。

  1. 摘出したスタンドアロン インストーラか、ダウンロードした MSI ファイルをダブルクリック。

  2. MySQL Connector/ODBC 3.51 - Setup Wizard が起動。Next ボタンをクリックして、インストールを開始。

    Connector/ODBC Windows Installer -
                  Welcome
  3. インストールのタイプを選択。Typical インストールは標準ファイルを供給し、これを選択すると、ODBC を使用して MySQL データベースに接続することになります。Complete オプションは、デバッグとユーティリティーのコンポーネントを含む、すべての使用可能なファイルをインストールします。インストールを実行するには、このふたつのオプションから選択することをお勧めします。これらの方法を使用する場合は、Next をクリックして、ステップ 5 へ進んでください。

    Custom インストールを選択すると、インストールしたいコンポーネントをそれぞれ自分で選択することができます。この方法を選んだ場合は、Next をクリックしてステップ 4 へ進んでください。

    Connector/ODBC Windows Installer -
                  Choosing a Setup type welcome
  4. Custom インストールを選択した場合、ポップアップ画面からインストールしたいコンポーネントを選び、Next をクリックして、必要なファイルをインストールします。

    Connector/ODBC Windows Installer -
                  Custom Installation welcome
  5. ファイルがマシンにコピーされたら、インストールは完了です。Finish をクリックして、インストーラを終了します。

    Connector/ODBC Windows Installer -
                  Completion welcome

以上でインストールは完了です。項24.1.3. 「Connector/ODBC の構成」 を参照して、引き続き ODBC 接続を作成することができます。

24.1.2.3.1.2. Zip 形式 DLL パッケージを使用して Windows Connector/ODBC ドライバをインストールする

Zip 形式の DLL パッケージをダウンロードしたら、Connector/ODBC オペレーションに必要な各種ファイルを手動でインストールします。インストール ファイルを解凍したあと、手動でこの操作を行うか、各ステートメントをひとつずつ実行するか、もしくは組み込まれている Batch ファイルを使用して、デフォルトのロケーションにインストールすることもできます。

Batch ファイルを使用したインストールの手順 :

  1. Connector/ODBC Zipped DLL パッケージを解凍。

  2. Command Prompt を開く。

  3. Connector/ODBC Zipped DLL パッケージを解凍した時に作成されるディレクトリに移動。

  4. Install.bat: を実行 :

    C:\> Install.bat

    以上で必要なファイルがデフォルトのロケーションにコピーされ、Windows ODBC マネージャーに Connector/ODBC ドライバが登録されます。

他のロケーションにファイルをコピーしたい場合、例えば同じマシン上でバージョンの異なる Connector/ODBC ドライバを実行、またはテストしたい場合などには、手動でファイルをコピーしなければなりません。しかし、これらのファイルの非標準ロケーションへのインストールはお勧めできません。ファイルを手動でデフォルト ロケーションへコピーするには、以下の手順に従ってください。

  1. Connector/ODBC Zipped DLL パッケージを解凍。

  2. Command Prompt を開く。

  3. Connector/ODBC Zipped DLL パッケージを解凍した時に作成されたディレクトリに移動。

  4. ライブラリ ファイルを適切なディレクトリへコピー。初期設定では、ファイルのコピー先はデフォルトの 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
  5. 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
  6. オプションとして、ヘルプ ファイルをコピー。ヘルプ システムからファイルへのアクセスを有効にするには、ファイルを Windows システム ディレクトリにインストールする :

    C:\> copy doc\*.hlp \Windows\System32
  7. 最後に、ODBC マネージャーに Connector/ODBC ドライバを登録 :

    C:\> myodbc3i -a -d -t"MySQL ODBC 3.51 Driver;\
      DRIVER=myodbc3.dll;SETUP=myodbc3S.dll"

    ファイルをデフォルト ロケーション外にインストールした場合は、必ずリフェレンスを DLL ファイルに変更し、上記のステートメントでロケーションを指定する。

24.1.2.3.1.3. インストール エラーの処理

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 ドライバをインストールしてから、もう一度通常モードでコンピューターを再起動してください。

24.1.2.3.2. Connector/ODBC をバイナリ配布物から Unix に インストールする

バイナリ配布物から Unix に Connector/ODBC をインストールするには、2種類の方法があります。ほとんどの Unix 環境では、tar アーカイブ配布物を使うことになります。Linux システムでは、RPM 配布物も利用可能です。

24.1.2.3.2.1. バイナリ tar アーカイブ配布物から Connector/ODBC をインストールする

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 ファイルを参照してください。

24.1.2.3.2.2. RPM 配布物から Connector/ODBC をインストールする

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
24.1.2.3.3. Mac OS X に 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 構成ファイルを更新する設定を所有しています。

24.1.2.3.3.1. Connector/ODBC ドライバのインストール

バイナリ配布物を利用して、Connector/ODBC を Mac OS X もしくは Mac OS X サーバ コンピュータにインストールすることができます。パッケージは圧縮ディスクイメージ ( .dmg ) として配布されています。この方法でコンピュータに Connector/ODBC をインストールするには、次の手順に従ってください :

  1. ファイルをコンピュータにダウンロードし、そのイメージファイルをダブルクリック。

  2. ディスクイメージの中から、インストール パッケージ ( 拡張子は .pkg ) を選択。そのファイルをダブルクリックして、Mac OS X インストーラを起動。

  3. インストーラの welcome メッセージが表示されます。Continue ボタンをクリックして、インストールを開始。

    Connector/ODBC Mac OS X Installer -
                  Installer welcome
  4. インストール実行手順のガイドが記載された Important Information を注意して読んでください。告示を読み、必要な情報を得たら、Continue をクリック。

    Connector/ODBC Mac OS X Installer -
                  Important Information
  5. Connector/ODBC ドライバは、GNU General Public License に準じて提供されています。ライセンス情報をご存知でない場合は、インストールを進める前にご一読ください。Continue をクリックしてライセンス承認に同意 ( 同意の確認がされます ) し、インストールを続けます。

    Connector/ODBC Mac OS X Installer -
                  License
  6. Connector/ODBC ドライバと ODBC Administrator アプリケーションのインストール先を選択。ファイルはオペレーション システムと共にドライブにインストールしなければならず、選択の余地が限られる場合があります。使用したいドライブを選び、Continue をクリック。

    Connector/ODBC Mac OS X Installer -
                  Choosing a destination
  7. インストーラが、コンピュータに必要なファイルを自動的に選んでインストールします。Install をクリックして、インストールを続けます。インストーラが必要なファイルをマシンにコピーします。インストールの経過を知らせる進行状況バーが表示されます。

    Connector/ODBC Mac OS X Installer -
                  Installation type
  8. インストールが完了すると、次のようなウィンドウが表示されます。Close をクリックし、インストーラを終了します。

    Connector/ODBC Mac OS X Installer -
                  Installation complete

24.1.2.4. ソース配布物から Connector/ODBC をインストールする

ソース配布物から Connector/ODBC をインストールすることで、Connector/ODBC コンポーネントの内容やインストール ロケーションをより自由に設定することができます。また、コンパイル済みバイナリが利用できないプラットフォームでも、Connector/ODBC の構築およびインストールが可能になります。

Connector/ODBC ソースは、パッケージのダウンロード、または Connector/ODBC 開発者が使う修正管理システムからも入手することができます。

24.1.2.4.1. Connector/ODBC をソース配布物から Windows にインストールする

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/ から入手できます。

24.1.2.4.1.1. Connector/ODBC 3.51 の構築

Connector/ODBC ソース配布物には、nmake または他の make ユーティリティを必要とする Makefiles が含まれています。配布物のうち、Makefile はリリース バージョンの構築、Makefile_debug はドライバ ライブラリと DLL のデバッグ バージョンの構築に使われます。

ドライバを構築は、次の手順で行って下さい :

  1. ソースをダウンロードし、フォルダへ摘出してから、ディレクトリをそのフォルダに変更。次のコマンドでは、フォルダ名を myodbc3-src としています :

    C:\> cd myodbc3-src
    
  2. Makefile を変更して、MySQL クライアント ライブラリとヘッダ ファイルの正確なパスを指定。その後、次のコマンドを使用して、リリース バージョンを構築・インストールします :

    C:\> nmake -f Makefile
    C:\> nmake -f Makefile install
    

    nmake -f Makefile が、ドライバのリリース バージョンを構築し、 Release と呼ばれるサブディレクトリにバイナリを配置します。

    nmake -f Makefile install が、ドライバ DLL とライブラリ ( myodbc3.dll myodbc3.lib ) をシステム ディレクトリにインストール ( コピー ) します。

  3. デバッグ バージョンを構築するには、Makefile よりも、次の Makefile_Debug を使用してください :

    C:\> nmake -f Makefile_debug
    C:\> nmake -f Makefile_debug install
    
  4. 次を使用して、ドライバの削除およびインストールを行うことができます :

    C:\> nmake -f Makefile clean
    C:\> nmake -f Makefile install
    

注意 :

  • Makefiles では正しい MySQL クライアント ライブラリとヘッダ ファイルのパスを指定してください ( MYSQL_LIB_PATHMYSQL_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* と名づけられています。

24.1.2.4.1.2. テスト

ドライバ ライブラリがシステム ディレクトリにコピー、もしくはインストールされたら、samples サブディレクトリにあるサンプルを使用して、ライブラリが適切に構築されているかテストすることができます :

C:\> cd samples
C:\> nmake -f Makefile all
24.1.2.4.1.3. MyODBC 2.50 の構築

MyODBC 2.50 ソース配布物には、VC workspace ファイルが含まれています。そのファイル ( .dsp および .dsw ) を Microsoft Visual Studio 6.0 以降からロードし、それらを使ってドライバを構築することができます。

24.1.2.4.2. Connector/ODBC をソース配布物から Unix にインストールする

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 を使ってライブラリを構築します。

24.1.2.4.2.1. 典型的な configure オプション

configure スクリプトは、Connector/ODBC 構成をどのようにコンフィグするかにおいて、多大な制御力を提供します。通常は、configure コマンド ラインのオプションを使用してこれを行います。また、特定の環境変数を使って、configure に影響を与えることもできます。configure がサポートするオプションと環境変数のリストを見るには、次のコマンドを実行してください :

shell> ./configure --help

よく使われる configure オプションのいくつかを以下で説明します :

  1. Connector/ODBC をコンパイルするには、--with-mysql-path=DIR を使用して、ライブラリ ファイルを含む MySQL クライアントを供給する必要があります。DIR は、MySQL がインストールされるディレクトリです。

    MySQL コンパイル オプションは、DIR/bin/mysql_config を実行することで判別が可能です。

  2. 標準ヘッダとライブラリ ファイル パスを、ODBC ドライバ マネージャー ( iODBC または unixODBC ) に供給します。

    • iODBC を使用しており、同時に iODBC がデフォルト ロケーション ( /usr/local ) にインストールされていない場合は、--with-iodbc=DIR オプションを使用しなければならないことがあります。DIRiODBC がインストールされるディレクトリです。

      もし iODBC ヘッダが DIR/include に入っていない場合、--with-iodbc-includes=INCDIR オプションで、その所在を特定することができます。

      ライブラリへのアプライ。DIR/lib に入っていなければ、--with-iodbc-libs=LIBDIR オプションを使うことができます。

    • unixODBC を使用している場合、--with-unixODBC=DIR オプション ( 大文字と小文字を区別 ) を使ってconfigure を作成します。iODBC ではなく、unixODBC を探してください。デフォルトでは、DIRunixODBC のインストールされるディレクトリです。

      unixODBC ヘッダとライブラリが DIR/includeDIR/lib にない場合は、-with-unixODBC-includes=INCDIR--with-unixODBC-libs=LIBDIR オプションを使用してください。

  3. インストールの接頭子に、/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
24.1.2.4.2.2. 追加の configure オプション

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
    
24.1.2.4.2.3. 構築とコンパイル

ドライバ ライブラリを構築するには、make を実行してください。

shell> make

なんらかのエラーが発生すれば、修正して構築を続けてください。構築が行えない場合は、詳細を明記のうえ、までメールでお問い合わせ下さい。

24.1.2.4.2.4. 共用ライブラリの構築

ほとんどのプラットフォームでは、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
24.1.2.4.2.5. ドライバ ライブラリのインストール

ドライバ ライブラリをインストールするには、次のコマンドを実行してください :

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 は、すべてのプラットフォームで問題なく使用できるでしょう。

24.1.2.4.2.6. Unix で Connector/ODBC をテストする

配布物に含まれている簡単なサンプルを、自作のライブラリで実行するには、次のコマンドを使用してください :

shell> make test

テストを実行する前に、odbc.ini 内に DSN 'myodbc3' を作成し、環境変数 ODBCINI を、適切な odbc.ini ファイルに設定してください。また、MySQL サーバは作動しています。サンプル odbc.ini は、ドライバ配布物に添付されています。

samples/run-samples スクリプトを改変し、各サンプルへのコマンドライン引数として、所望の DSN、UID、PASSWORD 値に受け渡すことも可能です。

24.1.2.4.2.7. Mac OS X でソースから Connector/ODBC を構築する

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 では、ccgcc の双方が gcc3 へのシンボリック リンクになっています。

このライブラリを $prefix/lib ディレクトリにコピーし、libmyodbc3.so へ symlink してください。

このコマンドを使用して、アウトプット共用ライブラリのプロパティをクロスチェックすることができます :

shell> otool -LD .libs/libmyodbc3-3.51.01.so
24.1.2.4.2.8. HP-UX でソースから Connector/ODBC を構築する

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 を実行してください。

24.1.2.4.2.9. AIX でソースから Connector/ODBC を構築する

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」で詳細をご覧ください。

24.1.2.4.3. 開発ソースツリーから Connector/ODBC をインストールする

注意 :このセクションは、当社の新しいコードのテストに協力していただける場合にのみお読みください。単に 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 ステージで配布物がコンパイルしない場合は、 までお知らせください。

Windows でのドライバの構築に、Windows Makefiles WIN-Makefile および WIN-Makefile_debug をご利用ください。詳細は 項24.1.2.4.1. 「Connector/ODBC をソース配布物から Windows にインストールする」 をご覧ください。

ソースツリーを得るための初回のチェックアウト操作のあと、ソースを定期的に最新バージョンにアップデートする svn update を実行してください。

24.1.3. Connector/ODBC の構成

Connector/ODBC ドライバを使用して MySQL データベースに接続する前に、ODBC Data Source Name を構成する必要があります。DSN は、データベースとの接続に必要な種々の構成パラメータを、特定の名称に関連づけます。アプリケーション自体の中で各パラメータを指定するより、アプリケーション内で DSN を使用し、データベースとの接続を行うことになります。DSN 情報は、ユーザー固有、システム特定、または特殊ファイルで提供されることもあります。ODBC データソース名は、プラットフォームと ODBC ドライバによって、異なる方法で構成されます。

24.1.3.1. データソース名

Data Source Name は、特定のデータベースとの接続のための構成パラメータと関連しています。通常、DSN は次のパラメータで構成されています :

  • Name
  • Hostname
  • Database Name
  • Login
  • Password

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 情報は、プラットフォームや環境によって、別のロケーションに保管されます。

24.1.3.2. Windows での Connector/ODBC DSN の構成

Windows 内の ODBC Data Source Administrator は、DSN の作成、ドライバのインストールのチェック、そしてトレース ( デバッグに使用 ) や接続のプールなどのODBC システムの構成を可能にします。

使用している Windows のエディションやバージョンによって、ODBC Data Source Administrator が保存されているロケーションは異なります。

Windows Server 2003 で ODBC Data Source Administrator を開くには :

  1. Start メニューで Administrative Tools を選択、そして Data Sources (ODBC) をクリックする。

Windows 2000 Server または Windows 2000 Professional で ODBC Data Source Administrator を開くには :

  1. Start メニューで Settings を選択、そして Control Panel をクリックする。

  2. Control PanelAdministrative Tools をクリック。

  3. Administrative Tools で、Data Sources (ODBC) をクリック。

Windows XP で ODBC Data Source Administrator を開くには :

  1. Start メニューで Control Panel をクリック。

  2. Control PanelCategory ViewPerformance and Maintenance をクリックし、そして Administrative Tools を押す。Classic ViewControl Panel を見ている場合は、Administrative Tools をクリックする。

  3. Administrative Tools で、Data Sources (ODBC) をクリック。

Windows のバージョンに関係なく、ODBC Data Source Administrator 画面が開きます :

ODBC Data Source
          Administrator ダイアログ

Windows XP 内において、Start メニューに Administrative Tools フォルダを加え、ODBC Data Source Administrator の所在の特定をより容易にすることができます。実行の手順は次になります :

  1. Start メニューを右クリックする。

  2. Properties を選択。

  3. Customize... をクリック。

  4. Advanced タブを選択。

  5. System Administrative Tools セクション内の Start menu items で、Display on the All Programs menu を選択。

Windows Server 2003 と Windows XP 、両方において、Start メニューに永久的に ODBC Data Source Administrator を加えることをお勧めします。それには、示された方法を使って Data Sources (ODBC) アイコンの所在を特定し、そのアイコンを右クリック、そして Pin to Start Menu を選択します。

24.1.3.2.1. Windows での Connector/ODBC DSN の追加

新たな Connector/ODBC データソースを Windows に追加および構成するには、ODBC Data Source Administrator を使用します :

  1. ODBC Data Source Administrator を開く。

  2. TSystem DSN ( すべてのユーザが使用可能 ) を作成するため、System DSN タブを選択。使用中のユーザ特定の User DSN を作成するため、Add... ボタンを押す。

  3. その DSN のために、ODBC ドライバを選択。

    MySQL ODBC Driver
                Selection ダイアログ

    MySQL ODBC 3.51 Driver を選択し、Finish を押す。

  4. ここで、作成している DSN の特定のフィールドを、Add Data Source Name ダイアログを介して構成する。

    Add Data Source
                Name ダイアログ

    Data Source Name ボックスに、アクセスしたいデータソースの名称を入力。有効な名前であれば、どんなものでもよい。

  5. Description ボックスに何らかのテキストを入力し、コネクションを特定できるようにする。

  6. Server フィールドに、アクセスしたい MySQL サーバ ホストの名称を入力。デフォルト設定では、localhost

  7. User フィールドに、この接続に使用するユーザー名を入力。

  8. Password フィールドに、この接続へのパスワードを入力。

  9. Database ポップアップが自動的に、アクセスが許可されたデータベースのリストを移植。

  10. OK をクリックして、DSN を保存。

DSN 構成が完了すると、このような状態になります :

MySQL ODBC DSN
            Configuration ダイアログ
            サンプル
24.1.3.2.2. Windows で Connector/ODBC DSN 構成を検査

Test ボタンをクリックして入力したパラメータを使用して、接続を確かめることができます。接続が成功した場合は、Success; connection was made! ダイアログが表示されます。

接続に失敗した場合は、Diagnostics... ボタンをクリックすると、テスト結果と失敗の原因が追加エラーメッセージで提示されます。

24.1.3.2.3. Connector/ODBC DSN 構成オプション

DSN 構成ダイアログの Connect Options もしくは Advanced タブで、特定の DSN に様々なオプションを構成することができます。

Connection Options ダイアログは次のようなものです。

Connector/ODBC Connect Options
            ダイアログ

構成が可能な3種類のオプション :

  • Port は、MySQL との接続に使用する TCP/IP ポートナンバーを設定します。デフォルト設定では、MySQL との接続にはポート 3306 が使用されます。使用するサーバが、別の TCP/IP ポートを使うように構成されている場合は、ここでポートナンバーを特定する必要があります。

  • Socket は、MySQL との接続に使用する特定のソケットか Windows パイプの名称、またはそのロケーションを設定します。

  • Initial Statement は、MySQL への接続が開通した時に実行される SQL 文を定義します。これによって、デフォルトのキャラクタ セットや、接続中に使用するデータベースの設定など、接続の MySQL オプションをセットすることができます。

Advanced タブでは、Connector/ODBC 接続パラメータの構成をすることができます。これらのオプションの効果については、項24.1.3.5. 「Connector/ODBC Connection Parameters」 を参照してください。

Connector/ODBC Connection Advanced
            ダイアログ
24.1.3.2.4. エラーとデバッグ

このセクションでは、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 がかわりに使用されています。

24.1.3.3. Mac OS X での Connector/ODBC DSN の構成

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 を加える場合は、システムの認証が必要になる場合があります。鍵アイコンをクリックし、管理者権限でユーザー名とパスワードを入力してください。

  1. Applications フォルダ内の Utilities フォルダから、ODBC Administrator を開く。

    ODBC Administrator Main
              Panel ダイアログ
  2. User DSN もしくは System DSN パネルで、Add をクリック。

  3. Connector/ODBC ドライバを選択し、OK をクリック。

  4. Data Source Name ダイアログが表示される。DSN に Data Source Name と、オプショナルの Description を入力。

    ODBC Administrator Add
                DSN ダイアログ

  5. Add をクリックして、新しいキーワードと値のペアをパネルに加える。少なくとも、serverusernamepassword 、そして database の接続パラメータを指定する4つのペアを構成する。詳細は 項24.1.3.5. 「Connector/ODBC Connection Parameters」 を参照。

  6. OK をクリックして、DSN に構成されたデータのソースネームを加える。

DSN 構成が完了すると、このような状態になります :

ODBC Administrator Sample
          DSN ダイアログ

さらにキーワードと値のペアを加え、適切な値を設定することで、DSN に追加の ODBC オプションを構成することができます。詳細は 項24.1.3.5. 「Connector/ODBC Connection Parameters」 を参照。

24.1.3.4. Unix での Connector/ODBC DSN の構成

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 を設定することができます :

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

24.1.3.5. Connector/ODBC Connection Parameters

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 引数内で、これらのパラメータを設定することもできます。

パラメータデフォルト値コメント
userODBC (Windows)MySQL の接続に使用されるユーザ名
serverlocalhostMySQL サーバのホスト名
database デフォルトのデータベース
option0Connector/ODBC の動作を指定するオプション。下記参照。
port3306serverlocalhost 出ない場合に、TCP/IP ポートが使用
stmt MySQL への接続時に実行されるステートメント
password server 上の user アカウントのパスワード
socket serverlocalhost の場合に接続される Unix ソケット ファイルもしくは Windows の名前付きパイプ

option 引数は、クライアントの ODBC への適合が 100% でない場合に、Connector/ODBC にその旨を告知します。Windows では通常、接続スクリーンのチェックボックスをトグルしてオプションを選択しますが、option 引数でオプションを選択することもできます。次のオプションは、Connector/ODBC 接続スクリーンに表示される順序でリストされています :

Windows チェックボックス概要
1Don't Optimized Column WidthConnector/ODBC が実際のカラムの幅をリターンするのを、クライアントは許容できない。
2Return Matching RowsMySQL が、影響下にある行の真の値をリターンするのを、クライアントは許容できない。このフラッグがセットされる場合、MySQL は代わりに 「found rows」 をリターンする。これには MySQL 3.21.14 以降が必要になる。
4Trace Driver Calls To myodbc.logデバッグ ログを、Windows では C:\myodbc.log 、Unix 形式では /tmp/myodbc.log に作成する。
8Allow Big Results結果とパラメータにパケット制限を設定しない。
16Don't Prompt Upon Connectドライバが希望しても、質問をプロンプトしない。
32Enable Dynamic Cursor動的カーソルのサポートを有効または無効にする( Connector/ODBC 2.50. では利用不可 ) 。
64Ignore # in Table Namedb_name.tbl_name.col_name でのデータベース名の使用を無視。
128User Manager CursorsODBC マネージャー カーソルの使用を強制実行する ( 実験用 ) 。
256Don't Use Set Locale拡張されたフェッチの使用を無効にする ( 実験用 ) 。
512Pad Char To Full LengthCHAR カラムを最長のカラム幅にパッドする。
1024Return Table Names for SQLDescribeColSQLDescribeCol() が完全に修飾されたカラム名をリターンする。
2048Use Compressed Protocol圧縮されたクライアント / サーバ プロトコルを使用。
4096Ignore Space After Function Namesファンクション名の後と、‘(’ の前にあるスペースを無視するようサーバに通達 ( PowerBuilder に必要 ) 。これですべてのファンクション名がキーワードになる。
8192Force Use of Named Pipes名前つきパイプで、NT で起動している mysqld に接続する。
16384Change BIGINT Columns to IntBIGINT カラムを INT カラムに変更 ( ある種のアプリケーションは BIGINT を処理できない ) 。
32768No Catalog (exp)SQLTables から、'user' を Table_qualifier および Table_owner とてしてリターンする ( 実験用 )。
65536Read Options From my.cnfmy.cnf[client] および [odbc] グループからパラメータを読み取る。
131072Safe追加のセイフティー チェックを加える ( 本来なら必要ない ) 。
262144Disable transactionトランザクションを無効にする。
524288Save queries to myodbc.sqlc:\myodbc.sql(/tmp/myodbc.sql) ファイルへのクエリのロギングを有効にする( デバッグ モードでのみ有効 ) 。
1048576Don't Cache Result ( forward only cursors )結果をドライバ内でローカルにキャッシュせず、サーバ (mysql_use_result()) から読み取る。これは forward-only カーソルのみで使用できる。このオプションは、大きなテーブルを扱っていて、ドライバが全結果セットをキャッシュするのを防ぎたい時に重要になる。
2097152Force Use Of Forward Only CursorsForward-onlyカーソルの使用を強制行使する。アプリケーションがデフォルトのスタティック / 動的カーソルの種類をセットし、それが非キャッシュの結果セットを使おうとする場合は、このオプションが forward-only カーソルの挙動を保証する。
4194304Enable auto-reconnect.自動再接続の機能を有効にする。不完全なトランザクションの間の自動再接続は破損の原因となるため、トランザクションとこのオプションを併用しないこと。自動再接続での接続は、元来の設定や環境を受け継いでいないので注意。このオプションは、Connector/ODBC 3.5.13. で有効。
8388608Flag Auto Is Nullこのオプションはセットの際に、接続が SQL_AUTO_IS_NULL オプションを 1 にセットする起因なる。標準の挙動が無効になるが、古いアプリケーションを有効にして、AUTO_INCREMENT 値を正確に指定することもある。詳細は、 を参照。このオプションは Connector/ODBC 3.5.13. で有効。

複数のオプションを選択するには、それらの値を加算します。例えば、option を 12 (4+8) にセットすると、パケット制限なしでデバッグすることができます。

次のテーブルは、様々な構成で推奨する option 値の例のリストです :

構成オプション値
Microsoft Access、Visual Basic3
ドライバ トレース生成 ( デバッグ モード )4
Microsoft Access ( DELETE クエリが改善されたもの )35
行数過多の大規模なテーブル2049
Sybase PowerBuilder135168
クエリ ログ生成 ( デバッグ モード )524288
クエリ ログと同時にドライバ トレースを生成 ( デバッグ モード )524292
非キャッシュ結果を伴う大規模なテーブル3145731

24.1.3.6. 定義済み DSN なしでの接続

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」 を参照してください。

24.1.3.7. ODBC 接続プーリング

接続プーリングは、データベースがアクセスを受けるたびに新しい接続を開くかわりに、ODBC ドライバが接続プールから、与えられたデータベースへの既存の接続を再利用することを可能にします。接続プーリングを有効することによって、データベースへの接続を開く手間が縮小され、アプリケーションの全体的な能力を高めることができます。

接続プーリングに関する情報は : http://support.microsoft.com/default.aspx?scid=kb;EN-US;q169470.

24.1.3.8. ODBC トレース ファイルの獲得

Connector/ODBC で不具合や問題があった場合は、ODBC Manager と Connector/ODBC からログ ファイルを作り始めましょう。これは tracing と呼ばれ、ODBC Manager を通して利用できます。そのプロシージャは、Windows 、Mac OS X 、および Unix 間で異なります。

24.1.3.8.1. Windows で ODBC トレーシングを有効にする

Windows でトレース オプションを有効にするには :

  1. Data Source Administrator ダイアログ ボックスの Tracing タブで、ODBC 関数呼び出しのトレースの方法を構成することができます。

    ODBC Data Source Administrator Tracing
                ダイアログ
  2. Tracing タブからトレーシングを発動すると、Driver Manager が後に起動するすべてのアプリケーションの、すべての ODBC 関数呼び出しを記録。

  3. トレーシングが有効になる前に起動していたアプリケーションからの ODBC 関数呼び出しは記録されません。ODBC 関数呼び出しは、指定したログ ファイルに記録されます。

  4. Stop Tracing Now をクリックするまで、トレーシングは続きます。トレーシングをしている間は、ログ ファイルのサイズは増量し続け、そのトレーシングはすべての ODBC アプリケーションのパフォーマンスに影響を及ぼします。

24.1.3.8.2. Mac OS X で ODBC トレーシングを有効にする

Mac OS X 10.3 以降でトレース オプションを有効にするには、 ODBC Administrator 内の Tracing タブを使用してください。

  1. ODBC Administrator を開く。

  2. Tracing タブを選択。

    ODBC Administrator Tracing
                ダイアログ
  3. Enable Tracing チェックボックスを選択。

  4. Tracing ログを保存したいロケーションを入力。既存のログ ファイルに情報を追加したい場合は、Choose... ボタンをクリックする。

24.1.3.8.3. Unix で ODBC トレーシングを有効にする

Mac OS X 10.2 ( またはそれ以降 ) か Unix でトレース オプションを有効にしたい場合は、ODBC 構成に trace オプションを加える必要があります :

  1. Unix では、ODBC.INI ファイルの Trace オプションを明示的に設定する必要があります。

    下のように、odbc.iniTraceFile および Trace を使用して、トレーシングの ON または OFF を設定してください :

    TraceFile  = /tmp/odbc.trace
    Trace      = 1
    

    TraceFile がトレース ファイルの名前や完全パスを指定し、TraceON または OFF に設定されます。ON にするには、1 または YESOFF には 0 または NO を使用することもできます。unixODBCODBCConfig を使用する場合は、HOWTO-ODBCConfig にある unixODBC 呼び出しのトレース方法の手順に従ってください。

24.1.3.8.4. Connector/ODBC ログの有効化

Connector/ODBC ログを生成するには、次の手順に従ってください :

  1. 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 に設定する必要がある。

  2. アプリケーションを開始し、起動を失敗させてみる。それから Connector/ODBC トレースをチェックし、問題を確認する。

問題の特定にヘルプが必要な場合は、項24.1.7.1. 「Connector/ODBC のコミュニティー支援」 をご覧ください。

24.1.4. Connector/ODBC 例

DSN を構成し、データベースへのアクセスを供給し終えれば、実際の接続のアクセス方法や使用法は、アプリケーションまたはプログラム言語次第になります。ODBC は標準化されたインターフェイスなので、ODBC に対応するすべてのアプリケーションもしくは言語は DSN を使用することができ、構成されたデータベースに接続することが可能です。

24.1.4.1. Connector/ODBC アプリケーションの基本ステップ

通常、Connector/ODBC を使用したアプリケーションからの MySQL サーバとの干渉には、次のオペレーションが伴います :

  • Connector/ODBC DSN の構成

  • MySQL サーバへの接続

  • 初期化動作

  • SQL 文の実行

  • 結果の検索

  • トランザクションの実行

  • サーバの接続解除

ほとんどのアプリケーションは、これらのステップのバリエーションを使用します。基本的なアプリケーションのステップは、次の図のようになります :

Connector/ODBC
          プログラミングのフローチャート

24.1.4.2. Connector/ODBC を介する MySQL データベースとの接続のステップガイド

Connector/ODBC を導入する動機としては、Windows のマシンから、Linux または Unix ホストのデータベースにアクセスしたいというのが一般的です。

2 台のマシン間のアクセス設定が必要なプロセスの例として、下記のステップで基本手順を説明します。この説明は、myusermypassword のユーザ名とパスワードで、システム BETA からシステム ALPHA へ接続するという前提でなされています。

システム ALPHA ( MySQL サーバ ) では、次のステップに従ってください :

  1. MySQL サーバを起動。

  2. GRANT を使用し、システム BETA から myuser のパスワードでデータベース test に接続できる、myuser ユーザ名でのアカウントを設定する :

    GRANT ALL ON test.* to 'myuser'@'BETA' IDENTIFIED BY 'mypassword';

    MySQL 特権に関しての詳細は、項4.8. 「MySQL ユーザ アカウント管理」 を参照してください。

システム BETA ( Connector/ODBC クライアント ) では、次のステップに従ってください :

  1. システム ALPHA で構成したサーバ、データベースおよび認証情報にマッチするパラメータを使用して、Connector/ODBC DSN を構成する。

    パラメータコメント
    DSNremote_test接続を特定する名前
    SERVERALPHAリモート サーバのアドレス
    DATABASEtestデフォルト データベースの名前
    USERmyuserこのデータベースへのアクセスのために作成されたユーザ名
    PASSWORDmypasswordmyuser へのパスワード
  2. Microsoft Office など、ODBC 対応アプリケーションを使用すると、作成したばかりの DSN を使って MySQL に接続することができる。接続に失敗した場合は、接続プロセスを検査するためにトレーシングを使う。詳細は 項24.1.3.8. 「ODBC トレース ファイルの獲得」 を参照。

24.1.4.3. Connector/ODBC と サード パーティー ODBC ツール

独自の Connector/ODBC DSN を構成し終えたら、プログラム言語やサード パーティー アプリケーションを含む、ODBC インターフェースに対応するすべてのアプリケーションを通して、MySQL データベースにアクセスすることができます。このセクションは、様々な ODBC 対応のツールとおよび Microsoft Word 、Microsoft Excel 、Adobe/Macromedia ColdFusion を含むアプリケーションの使用に関するガイドとヘルプを含みます。

Connector/ODBC は次のアプリケーションでテストされています :

発行元アプリケーション注記
AdobeColdFusion以前は Macromedia ColdFusion
BorlandC++ Builder 
 Builder 4 
 Delphi 
Business ObjectsCrystal Reports 
ClarisFilemaker Pro 
CorelParadox 
Computer AssociatesVisual Objects別称 CAVO
 AllFusion ERwin Data Modeler 
GuptaTeam Developer以前の名称は Centura Team Developer; Gupta SQL/Windows
GensymG2-ODBC Bridge 
InlineiHTML 
LotusNotesバージョン 4.5 および 4.6
MicrosoftAccess 
 Excel 
 Visio Enterprise 
 Visual C++ 
 Visual Basic 
 ODBC.NETC# 、Visual Basic 、C++ を使用
 FoxPro 
 Visual Interdev 
OpenOffice.orgOpenOffice.org 
PerlDBD::ODBC 
Pervasive SoftwareDataJunction 
Sambar TechnologiesSambar Server 
SPSSSPSS 
SoftVelocityClarion 
SQLExpressSQLExpress for Xbase++ 
SunStarOffice 
SunSystemsVision 
SybasePowerBuilder 
 PowerDesigner 
theKompany.comData Architect 

他にも Connector/ODBC に対応するアプリケーションがあれば、 までメールでお知らせください。

24.1.4.4. Microsoft Access で Connector/ODBC を使用する

Connector/ODBC を使用して、Microsoft Access で MySQL データベースを利用することができます。MySQL データベースは Access アプリケーション内で、インポート元、エクスポート元、または直接使用のためにリンクされたテーブルとして利用できるので、Access を MySQL データベースへのフロントエンド インターフェイスとして使うことができます。

24.1.4.4.1. Access データを MySQL へエクスポートする

データのテーブルを Access データベースから MySQL にエクスポートするには、次の手順に従ってください :

  1. Access データベース、もしくは Access プロジェクトを開くと、Database ウィンドウが出現。新しいデータベース オブジェクトの作成、そして既存のオブジェクトのオープンのショートカットが表示される。

    Access Database
  2. エクスポートしたい table もしくは query の名前をクリックし、FileExport を選択。

  3. Export Object Type Object name To ダイアログ ボックスの Save As Type ボックスで、下記のように ODBC Databases () を選択 :

    ODBC
                データベースを選択
  4. Export ダイアログ ボックスにファイル名 ( もしくは提示される名前を使用 ) を入力し、OK を選択。

  5. 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 サーバに接続し、新しいテーブル、そしてまたはデータをエクスポートします。

24.1.4.4.2. Access に MySQL データをインポートする

テーブルを MySQL から Access にインポートするには、次の手順に従ってください :

  1. データベースを開くか、Database ウィンドウに切り替えてデータベースを開く。

  2. テーブルをインポートするには、File メニューで Get External Data を選び、Import をクリック。

  3. Import ダイアログ ボックスの Files Of Type ボックスで、ODBC Databases () を選択。定義されたデータソースをリストアップした、The Select Data Source ダイアログ ボックスが表示される。

  4. 選択した ODBC データソースにはログインが必要な場合は、ログイン ID とパスワード (場合によってはその他の情報も ) 入力し、OK をクリック。

  5. Microsoft Access が ODBC data source を介して MySQL サーバに接続し、import が可能なテーブルのリストを表示する。

  6. import したい各テーブルをクリックし、OK を押す。

24.1.4.4.3. Microsoft Access を MySQL のフロントエンドとして使用する

Microsoft Access データベース内のテーブルと、 MySQL データベース内のテーブルをリンクすることで、Microsoft Access を MySQL データベースのフロントエンドとして使うことができます。Access のテーブルでクエリが要求された場合、ODBC を使って MySQL でクエリが実行されます。

テーブルのリンクを作成 :

  1. MySQL にリンクしたい Access Database を開く。

  2. File から、Get External Data->Link Tables を選択。

    Microsoft Access のテーブルを
                MySQL テーブルにリンクする。
  3. ブラウザで、Files of type ポップアップから ODBC Databases () を選択。

  4. Select Data Source ウィンドウで既存の DSN を、File Data SourceMachine Data Source から選ぶ。または、New... ボタンで新たな DSN を作成することもできる。DSN の作成については、項24.1.3.2. 「Windows での Connector/ODBC DSN の構成」 を参照。

    Microsoft Access テーブルと MySQL
                テーブルをリンク、DNS を選択
  5. Link Tables ダイアログで、MySQL データベースからひとつ以上のテーブルを選択。リストから選択した各テーブルに対してリンクが作成される。

    Microsoft Access テーブルと MySQL
                テーブルをリンク、テーブル選択
  6. Microsoft Access が自動的にテーブルからユニーク レコード識別子を決定しない場合、ソース テーブルの各横列をユニークに特定するため、各カラム、もしくはカラムのコンビネーションの確認が要求されることがある。使用したいカラムを選び、OK を選択する。

    Microsoft Access テーブルと MySQL
                テーブルをリンク、ユニーク
                レコード識別子を選択

プロセスが完了すれば、Access データベースでするように、リンクされたテーブルにインターフェイスやクエリを作成することができます。

リンクしたテーブルのストラクチャやロケーションが変わった場合は、次のプロシージャを使用して閲覧するか、リンクをリフレッシュします。Linked Table Manager が、現在リンクされているすべてのテーブルへのパスをリストアップします。

リンクの閲覧もしくはリフレッシュ :

  1. MySQL テーブルへのリンクを含むデータベースを開く。

  2. Tools メニューで、Add-ins ( Access 2000 以降では Database Utilities ) を指定し、Linked Table Manager をクリック。

  3. リフレッシュしたいリンクがあるテーブルのチェックボックスをクリック。

  4. OK をクリックし、リンクをリフレッシュ。

Microsoft Access がリフレッシュの成功を確認し、テーブルが見つからなかった場合は、Select New Location of < テーブル名 > ダイアログ ボックスが表示されて、そのテーブルの新たなロケーションを特定することができます。複数の選択されたテーブルが、特定した新たなロケーションに移された場合、Linked Table Manager が、選択されたテーブルのすべてのロケーションを検索し、すべてのリンクを一度にアップデートします。

リンクされたテーブル グループのパス変更 :

  1. テーブルへのリンクを含むデータベースを開く。

  2. Tools メニューで、Add-ins ( Access 2000 以降では Database Utilities ) を指定し、Linked Table Manager をクリック。

  3. Always Prompt For A New Location チェックボックスを選択。

  4. リフレッシュしたいリンクがあるテーブルのチェックボックスをクリックし、OK を押す。

  5. Select New Location of < テーブル名 > ダイアログ ボックスで、新しいロケーションを指定して Open をクリック、そして OK を押す。

24.1.4.5. Microsoft Word または Excel で Connector/ODBC を使用する

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 のスプレッドシートにインサートするには :

  1. 新規の Worksheet を作成。

  2. Data メニューから、Import External Data を選択し、さらに New Database Query を選択。

  3. Microsoft Query が起動。まず、既存の Data Source Name を選択してデータソースを選ぶ。

    Microsoft Query, Choose Data
              Source
  4. Query Wizard 内で、インポートしたいカラムを選択する。DSN を介して構成され、ユーザが利用できるテーブルのリストが左側に、クエリに追加されるカラムが右側に表示される。選んだカラムは、SELECT クエリの最初のセクションにあるものに相当する。Next をクリックして続行。

    Microsoft
              Query、カラムを選択
  5. Filter Data ダイアログを使用して、クエリ ( WHERE 条項に相当 ) から行をフィルターにかけることができる。Next をクリックして続行。

    Microsoft Query, Filter Data
  6. データのソート順序を選択 ( 任意 ) 。これは SQL クエリでの ORDER BY 条項の使用に相当する。最大 3 つのフィールドを選び、クエリから戻された情報をソートすることができる。Next をクリックして続行。

    Microsoft Query, Sort Order
  7. クエリの移動先を選択。データの返送先に Microsoft Excel を選び、データをインサートしたい部分のワークシートやセルを選択することができ、Microsoft Query 内でクエリと結果の閲覧を続け、SQL クエリとさらなるフィルタを編集、戻された情報をソートすることができる。または、クエリから OLAP Cube を作成し、それを Microsoft Excel 内で直接使用することも可能。Finish をクリックする。

    Microsoft
              Query、移動先を選択

同じプロセスで、Word ドキュメントにデータをインポートすることができ、その場合データはテーブル形式でインサートされます。これは、メール合成に ( その場合は Word テーブルからフィールド データが読み取られる ) に使用したり、もしくはレポートや他のドキュメントにデータおよび報告を含めたい場合に使用することができます。

24.1.4.6. Crystal Reports で Connector/ODBC を使用する

Crystal Reports は ODBC DSN を使って、レポート用にデータや情報が摘出できるデータベースに接続することができます。

注意

Crystal Reports の特定のバージョンでは、アプリケーションが開けない、ODBC コネクションを通してテーブルやフィールドをブラウズできない、という問題が報告されています。Crystal Reports で MySQL を使用する前に、不具合に対するサービス パックやホットフィックスを含む、最新バージョンへのアップデートをするようにしてください。この問題に関する情報は、Business) Objects Knowledgebase でご覧ください。

例として、Crystal Reports XI 内で簡単なクロス集計レポートを作成するには、次のステップに従ってください :

  1. Data Sources (ODBC) ツールを使用して DSN を作成。ユーザ名とパスワードのある完全なデータベースを指定するか、基本的な DSN を作成し、Crystal Reports を使ってユーザ名とパスワードを設定する。

    この例の目的のために、MySQL Sakila サンプル データベースの実例に接続を提供する DSN が作成されている。

  2. Crystal Reports を開き、新しいプロジェクトを作成するか、MySQL データソースからのデータをインサートしたい既存のレポート プロジェクトを開く。

  3. Start Page のオプションをクリックするなどして、Cross-Tab Report Wizard を起動。Create New Connection フォルダを展開し、それから ODBC (RDO) フォルダを広げて ODBC データソースのリストを獲得する。

    データソースの選択が要請される。

    Crystal Reports
              のデータソースを選択
  4. ODBC (RDO) フォルダを最初に展開する際、Data Source Selection スクリーンが表示される。ここからは、事前に構成された DSN を選択する、ファイルベース DSN を開く、もしくは手動接続ストリングを入力する、からどれかを選ぶことができる。この例では、Sakila DSN を使用。

    DSN がユーザ名とパスワードのコンビネーションを持つ場合、または別の承認信任状を使用する場合は、Next をクリックして、使用するユーザ名とパスワードを入力する。それ以外では、Finish をクリックして、データソース選択ウィザードを続ける。

    Crystal Reports で ODBC
              データソースを選択する
  5. Cross-Tab Report Creation Wizard に戻る。レポートに含めたいデータベースとテーブルを選択。ここでは例として、選ばれた Sakila データベースを展開する。city テーブルをクリックし、> ボタンでテーブルをレポートに加える。そして、country テーブルで同じ動作を繰り返す。あるいは、複数のテーブルを選択し、それらをレポートに加えることもできる。

    最後に、Sakila の親リソースを選択し、そのテーブルをレポートに加えることができる。

    取り入れたいテーブルを選択したら、Next を押して次に進む。

    Crystal Reports
              でテーブルを選択
  6. これで、Crystal Reports はテーブルの定義を読み取り、テーブル間のリンクを自動的に特定するようになる。テーブル間のリンクの特定により、Crystal Reports はクエリ従って、データベース内の全テーブルに基づく情報を参照そして要約することができる。Crystal Reports がリンクそのものを実行できない場合、選択したテーブルのフィールド間に手動でリンクを作成することができる。

    Next をクリックしてプロセスを続行。

    Crystal Reports のテーブル
              リンク / 構造
  7. 次に、クロス集計レポートに取り込みたいカラムと行を選択。ドラッグ アンド ドロップか、> ボタンを使って、レポートの各部にフィールドを加える。この例の画面では、city をレポートし、country で整理、各 county の city の数を取り込むことにする。データをブラウスしたい場合は、フィールドを選択して Browse Data... ボタンをクリックする。

    Next をクリックして結果のグラフを作成。このデータからはグラフを作成していないので、Finish をクリックしてレポートを発行する。

    Crystal Reports
              のクロス集計定義
  8. 完成したレポートが表示される。以下はSakila サンプル データベースからの出力サンプル。

    Crystal Reports
              のクロス集計最終レポート

Clystal Reports 内で ODBC 接続が開いたら、使用可能なテーブルのどのフィールドでも、レポートに加えることができます。

24.1.4.7. Connector/ODBC プログラミング

適切な ODBC Manager と Connector/ODBC ドライバがインストールされていれば、ODBC に対応するすべてのプログラム言語または環境で、Connector/ODBC を介して MySQL データベースに接続することができます。

該当するプログラム言語や環境には、Microsoft 対応言語 ( Visual Basic や C# 、そして ODBC.NET のようなインターフェイスも含む ) 、Perl ( DBI モジュール、DBD::ODBC ドライバ を仲介 ) をはじめ、様々な種類があります。

24.1.4.7.1. Visual Basic での、ADO 、DAO および RDO を使った Connector/ODBC の使用

このセクションには、ADO、DAO および RDO を使った MySQL ODBC 3.51 ドライバの簡単な使用例が記載されています。

24.1.4.7.1.1. ADO :rs.addNewrs.delete 、および rs.update

次の ADO (ActiveX Data Objects) 例は、テーブル my_ado を作成し、rs.addNewrs.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
24.1.4.7.1.2. DAO :rs.addNewrs.update 、およびスクローリング

次の DAO (Data Access Objects) 例では、テーブル my_ado を作成し、rs.addNewrs.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
24.1.4.7.1.3. RDO :rs.addNewrs.delete

次の 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
24.1.4.7.2. .NET を使った Connector/ODBC の使用

このセクションでは、ODBC.NET を使った Connector/ODBC ドライバの簡単な使用実例が記載されています。

24.1.4.7.2.1. ODBC.NET と C# (C sharp) を使った Connector/ODBC の使用

次のサンプルは、テーブル my_odbc_net を作成し、C# でのその使用を実証します。

/**
 * @sample    : mycon.cs
 * @purpose   : Demo sample for ODBC.NET using Connector/ODBC
 * @author    : Venu, 
 *
 * (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");
            }
        }
    }
  }
}
24.1.4.7.2.2. ODBC.NET と Visual Basic を使った Connector/ODBC の使用

次のサンプルは、テーブル my_vb_net を作成し、VB でのその使用を実証します。

' @sample    : myvb.vb
' @purpose   : Demo sample for ODBC.NET using Connector/ODBC
' @author    : Venu, 
'
' (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

24.1.5. Connector/ODBC 参考資料

このセクションでは、Connector/ODBC API の対応関数、方法、Connector/ODBC でサポートされている MySQL カラム タイプと適合ネイティブ タイプ、失敗があった時にConnector/ODBC が報告するエラーコード等を記載した参考資料を提供します。

24.1.5.1. Connector/ODBC API 参考資料

このセクションでは、関数によって分類された 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.503.51標準目的
SQLAllocHandleNoYesISO 92環境、接続、ステートメント、または記述子ハンドルの獲得
SQLConnectYesYesISO 92データソース名、ユーザ ID とパスワードで特定のドライバに接続
SQLDriverConnectYesYesODBC接続ストリングもしくは、Driver Manager とドライバがユーザのために接続ダイアログ ボックスを表示する要求によって特定のドライバに接続
SQLAllocEnvYesYesDeprecatedドライバから割り振られた環境ハンドルの獲得
SQLAllocConnectYesYesDeprecated接続ハンドルの獲得

ドライバとデータソースの情報獲得 :

 Connector/ODBC  
関数名2.503.51標準目的
SQLDataSourcesNoNoISO 92利用可能なデータソースのリストを戻す、Driver Manager で扱う
SQLDriversNoNoODBCインストールされたドライバとその属性情報のリストを戻す、Driver Manager で扱う
SQLGetInfoYesYesISO 92特定のドライバとデータソースの情報を戻す
SQLGetFunctionsYesYesISO 92サポートされているドライバ関数を戻す
SQLGetTypeInfoYesYesISO 92サポートされているドライバ関数を戻す

ドライバ属性の設定と検索

 Connector/ODBC  
関数名2.503.51標準目的
SQLSetConnectAttrNoYesISO 92接続属性の設定
SQLGetConnectAttrNoYesISO 92接続属性の値を戻す
SQLSetConnectOptionYesYesDeprecated接続オプションの設定
SQLGetConnectOptionYesYesDeprecated接続オプションの値を戻す
SQLSetEnvAttrNoYesISO 92環境属性を設定
SQLGetEnvAttrNoYesISO 92環境属性の値を戻す
SQLSetStmtAttrNoYesISO 92ステートメント属性を設定
SQLGetStmtAttrNoYesISO 92ステートメント属性の値を戻す
SQLSetStmtOptionYesYesDeprecatedステートメント オプションの設定
SQLGetStmtOptionYesYesDeprecatedステートメント オプションの値を戻す

SQL リクエストの準備 :

 Connector/ODBC  
関数名2.503.51標準目的
SQLAllocStmtYesYesDeprecatedステートメント ハンドルの割り振り
SQLPrepareYesYesISO 92後の実行のために SQL 文を準備
SQLBindParameterYesYesODBCSQL 文中のパラメータのストレージを割り当て
SQLGetCursorNameYesYesISO 92ステートメント ハンドルに関連するカーソル名を戻す
SQLSetCursorNameYesYesISO 92カーソル名の指定
SQLSetScrollOptionsYesYesODBCカーソルの挙動をコントロールするオプションの設定

リクエストのサブミット :

 Connector/ODBC  
関数名2.503.51標準目的
SQLExecuteYesYesISO 92準備されたステートメントの実行
SQLExecDirectYesYesISO 92ステートメントの実行
SQLNativeSqlYesYesODBCドライバに変換された SQL 文のテキストを戻す
SQLDescribeParamYesYesODBCステートメント中の特定のパラメータの概要を戻す
SQLNumParamsYesYesISO 92ステートメント中のパラメータの数を戻す
SQLParamDataYesYesISO 92実行時にパラメータ データを供給するために SQLPutData と併せて使用 ( 長いデータ値に最適 )
SQLPutDataYesYesISO 92パラメータのデータ値の一部または全てを送信 ( 長いデータ値に最適 )

結果と結果の情報の検索 :

 Connector/ODBC  
関数名2.503.51標準目的
SQLRowCountYesYesISO 92インサートに影響を受ける行の数、アップデート、または削除要求を戻す
SQLNumResultColsYesYesISO 92結果セット内のカラムの数を戻す
SQLDescribeColYesYesISO 92結果セット内のカラムを説明
SQLColAttributeNoYesISO 92結果セット内のカラムの属性を説明
SQLColAttributesYesYesDeprecated結果セット内のカラムの属性を説明
SQLFetchYesYesISO 92複数の結果行を戻す
SQLFetchScrollNoYesISO 92スクロール可能な結果行を戻す
SQLExtendedFetchYesYesDeprecatedスクロール可能な結果行を戻す
SQLSetPosYesYesODBCカーソルをデータの摘出されたブロックに配置し、行セットでアプリケーションがデータをリフレッシュできるようにする、または結果セットのデータをアップデートもしくは削除する
SQLBulkOperationsNoYesODBCアップデート、削除、ブックマークによる摘出を含むバルク インサートおよびバルク ブックマーク操作を実施

エラーまたは診断情報の検索 :

 Connector/ODBC  
関数名2.503.51標準目的
SQLErrorYesYesDeprecated追加のエラーまたはステータス情報を戻す
SQLGetDiagFieldYesYesISO 92追加の診断情報 ( 診断データ構造のひとつのフィールド ) を戻す
SQLGetDiagRecYesYesISO 92追加の診断情報 ( 診断データ構造の複数の ) を戻す

データソースのシステム テーブル ( カタログ機能 ) アイテム情報の獲得 :

 Connector/ODBC  
関数名2.503.51標準目的
SQLColumnPrivilegesYesYesODBCひとつまたは複数のテーブルにカラムと関連権限のリストを戻す
SQLColumnsYesYesX/Open特定のテーブルにカラム名のリストを戻す
SQLForeignKeysYesYesODBC外部キーになるカラム名が特定のテーブルに既存していれば、リストを戻す
SQLPrimaryKeysYesYesODBCテーブルの基本キーになるカラム名のリストを戻す
SQLSpecialColumnsYesYesX/Open指定のテーブルで行をユニークに特定するカラムの最適なセット、またはトランザクションで行の値のどれかがアップデートされた際、自動的にアップデートされるカラムを戻す
SQLStatisticsYesYesISO 92単一のテーブルのスタティック、およびテーブルに関連するインデックスのリストを戻す
SQLTablePrivilegesYesYesODBCテーブルのリストと、各テーブルに関連する権限を戻す
SQLTablesYesYesX/Open特定のデータソースに格納されたテーブル名のリストを戻す

トランザクションの実行 :

 Connector/ODBC  
関数名2.503.51標準目的
SQLTransactYesYesDeprecatedトランザクションのコミットまたはロールバック
SQLEndTranNoYesISO 92トランザクションのコミットまたはロールバック

ステートメントの終了 :

 Connector/ODBC  
関数名2.503.51標準目的
SQLFreeStmtYesYesISO 92ステートメントの処理の終了、保留中の結果の破棄、またオプションとしてステートメント ハンドルに関連するすべてのソースの解放
SQLCloseCursorYesYesISO 92ステートメント ハンドルで開かれていたカーソルを閉じる
SQLCancelYesYesISO 92SQL 文のキャンセル

接続の終了 :

 Connector/ODBC  
関数名2.503.51標準目的
SQLDisconnectYesYesISO 92接続の終了
SQLFreeHandleNoYesISO 92環境、接続、ステートメント、または記述子ハンドルの解放
SQLFreeConnectYesYesDeprecated接続ハンドルの解放
SQLFreeEnvYesYesDeprecated環境ハンドルの解放

24.1.5.2. Connector/ODBC データタイプ

次のテーブルは、ドライバがサーバのデータタイプをデフォルト SQL と C データタイプに位置づける方法を図式化したものです。

ネイティブ値SQL タイプC タイプ
bitSQL_BITSQL_C_BIT
tinyintSQL_TINYINTSQL_C_STINYINT
tinyint unsignedSQL_TINYINTSQL_C_UTINYINT
bigintSQL_BIGINTSQL_C_SBIGINT
bigint unsignedSQL_BIGINTSQL_C_UBIGINT
long varbinarySQL_LONGVARBINARYSQL_C_BINARY
blobSQL_LONGVARBINARYSQL_C_BINARY
longblobSQL_LONGVARBINARYSQL_C_BINARY
tinyblobSQL_LONGVARBINARYSQL_C_BINARY
mediumblobSQL_LONGVARBINARYSQL_C_BINARY
long varcharSQL_LONGVARCHARSQL_C_CHAR
textSQL_LONGVARCHARSQL_C_CHAR
mediumtextSQL_LONGVARCHARSQL_C_CHAR
charSQL_CHARSQL_C_CHAR
numericSQL_NUMERICSQL_C_CHAR
decimalSQL_DECIMALSQL_C_CHAR
integerSQL_INTEGERSQL_C_SLONG
integer unsignedSQL_INTEGERSQL_C_ULONG
intSQL_INTEGERSQL_C_SLONG
int unsignedSQL_INTEGERSQL_C_ULONG
mediumintSQL_INTEGERSQL_C_SLONG
mediumint unsignedSQL_INTEGERSQL_C_ULONG
smallintSQL_SMALLINTSQL_C_SSHORT
smallint unsignedSQL_SMALLINTSQL_C_USHORT
realSQL_FLOATSQL_C_DOUBLE
doubleSQL_FLOATSQL_C_DOUBLE
floatSQL_REALSQL_C_FLOAT
double precisionSQL_DOUBLESQL_C_DOUBLE
dateSQL_DATESQL_C_DATE
timeSQL_TIMESQL_C_TIME
yearSQL_SMALLINTSQL_C_SHORT
datetimeSQL_TIMESTAMPSQL_C_TIMESTAMP
timestampSQL_TIMESTAMPSQL_C_TIMESTAMP
textSQL_VARCHARSQL_C_CHAR
varcharSQL_VARCHARSQL_C_CHAR
enumSQL_VARCHARSQL_C_CHAR
setSQL_VARCHARSQL_C_CHAR
bitSQL_CHARSQL_C_CHAR
boolSQL_CHARSQL_C_CHAR

24.1.5.3. Connector/ODBC エラーコード :

次のテーブルは、サーバ エラーとは別にドライバから戻されるエラーコードのリストです。

ネイティブ コードSQLSTATE 2SQLSTATE 3エラーメッセージ
5000100001000一般警告
5010100401004ストリング データ、右打ち切り
50201S0201S02オプション値が変更
50301S0301S03行のアップデート / 削除なし
50401S0401S04ひとつ以上の行がアップデート / 削除
50501S0601S06結果セットが最初の行セットを戻す前にフェッチを試行
5060700107002SQLBindParameter がすべてのパラメータでは使用されていない
5070700507005カーソル規定ではないプリペアド ステートメント
5080700907009無効な記述子インデックス
5090800208002接続名が使用中
5100800308003接続が存在していない
5112400024000無効なカーソル状態
5122500025000無効なトランザクション状態
51325S0125S01トランザクション状態が不明
5143400034000無効なカーソル名
515S1000HY000一般ドライバ定義エラー
516S1001HY001メモリ割り振りエラー
517S1002HY002無効なカラム番号
518S1003HY003無効なアプリケーション バッファ タイプ
519S1004HY004無効な SQL データタイプ
520S1009HY009ヌル ポインタの無効な使用
521S1010HY010関数シーケンス エラー
522S1011HY011現在は属性を設定できない
523S1012HY012無効なトランザクション操作コード
524S1013HY013メモリ管理エラー
525S1015HY015カーソル名の利用不可
526S1024HY024無効な属性値
527S1090HY090無効なストリングまたはバッファ長
528S1091HY091無効な記述子フィールド識別子
529S1092HY092無効な属性 / オプション識別子
530S1093HY093無効なパラメータ番号
531S1095HY095範囲外の関数タイプ
532S1106HY106範囲外のフェッチ タイプ
533S1117HY117範囲外の行値
534S1109HY109無効なカーソル位置
535S1C00HYC00オプション機能が実装されていない
021S0121S01カラム カウントと値カウントの不一致
02300023000整合性制約違反
04200042000シンタックス エラーまたはアクセス違反
042S0242S02基本テーブルまたはビューの不検出
042S1242S12インデックスの不検出
042S2142S21カラムが既存
042S2242S22カラムの不検出
008S0108S01通信リンク故障

24.1.6. Connector/ODBC に関する注釈とヒント

ここでは、Connector/ODBC を異なる環境、アプリケーション、ツールで使用する際の一般的な注釈とアドバイスを記載しています。これらの注記は、Connector/ODBC 開発者とユーザの経験に基づいたものです。

24.1.6.1. Connector/ODBC 一般機能

このセクションでは、MySQL の一般的なクエリや機能の範囲、そして Connector/ODBC とのそれらの使い方について記載します。

24.1.6.1.1. オートインクリメント値の獲得

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;

項23.2.14.3. 「最後に挿入された列に対するユニークIDを取得する方法」 参照。

24.1.6.1.2. 動的カーソルのサポート

dynamic cursor のサポートは Connector/ODBC 3.51 で提供されていますが、デフォルト設定では動的カーソルが有効になっていません。Windows では、ODBC Data Source Administrator で Enable Dynamic Cursor チェックボックスを選択して、この機能を有効にしてください。

他のプラットフォームでは、DSN を作成する際、OPTION 値に 32 を加えることで動的カーソルを有効にすることができます。

24.1.6.1.3. Connector/ODBC の性能

Connector/ODBC ドライバは高いパフォーマンス性を想定しています。Connector/ODBC の性能に問題を感じた場合、または簡単な要求に多量のディスク アクティビティが費やされる場合は、いくつかのことを確認してください :

  • ODBC Tracing を無効にしてください。トレースが有効になっていると、ODBC Manager が多くの情報をトレース ファイルに記録します。Windows では、 ODBC Data Source Administrator の Tracing パネルでトレースの状況を確認し、無効にすることができます。Mac OS X では、ODBC Administrator の Tracing パネルで確認してください。項24.1.3.8. 「ODBC トレース ファイルの獲得」 参照。

  • ドライバはデバッグ バージョンでなく、標準バージョンを使用していることを確認してください。デバッグ バージョンには、追加の査閲や報告指標が含まれています。

  • Connector/ODBC ドライバのトレースとクエリ ログを無効にしてください。これらのオプションは各 DSN に対して有効になっていますので、アプリケーションに使用している DSN だけを検査するようにしてください。Windows では、DSN 構成を改修することで Connector/ODBC とクエリ ログを無効にすることができます。Mac OS X と Unix では、ドライバ トレース ( オプション値 4 ) とクエリ ログ ( オプション値 524288 ) が有効になっていないか確かめてください。

24.1.6.1.4. Windows で ODBC クエリ タイムアウトを設定

Microsoft Windows で、ODBC 接続を通してクエリを実行する際にクエリ タイムアウトを設定する方法に関する情報は、http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B153756 にある Microsoft ナレッジベース資料をお読みください。

24.1.6.2. Connector/ODBC アプリケーション別情報

ほとんどのプログラムは Connector/ODBC に対応しますが、以下にリストされているものにはそれぞれに、 Connector/ODBC とそのアプリケーションとの作業を向上拡大するための注釈とアドバイスがあります。

すべてのアプリケーションで、Connector/ODBC ドライバ、ODBC Manager 、およびアプリケーションで使われているライブラリとインターフェイス全部が最新バージョンになっているか確認してください。例えば Windows では、最新バージョンの Microsoft Data Access Components (MDAC) を使うことによって、ODBC との全体的な互換性、そして Connector/ODBC ドライバとの互換性が向上します。

24.1.6.2.1. Connector/ODBC の Microsoft アプリケーションとの使用

Microsoft Office 、Microsoft Access 、そして ASP と Microsoft Visual Studio でサポートされている様々なプログラム言語を含む Microsoft アプリケーションの大多数は、Connector/ODBC との使用がテストで確認済みです。

Connector/ODBC に不具合が発生し、またそのプログラムが OLEDB にも対応する場合は、OLEDB ドライバの使用をお勧めします。

24.1.6.2.1.1. Microsoft Access

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 TABLEBLOB カラムを 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 の使用に役立つ外部からの記事や情報 :

24.1.6.2.1.2. Microsoft Excel と カラム タイプ

Microsoft Excel へのデータのインポート、特に数値やデータ、タイム値のインポートで問題がある場合は、ワークシート内のセルにデータがインサートされる時、ソース データのカラム タイプでデータ タイプが定義される Excel のバグが原因だと思われます。その結果、Excel がコンテントを誤って識別し、それが計算に使用される時、表示フォーマットとそのデータの双方に影響を及ぼします。

この問題を解消するには、CONCAT() 関数をクエリに使用してください。CONCAT() を使うことで、Excel が値をストリングとして扱うよう仕向け、それによって Excel が埋め込まれた情報を解析し、ほぼ正確に識別するようになります。

しかし、このオプションをもってしてもデータによっては、ソースデータに変化はないにもかかわらず、不正確にフォーマットされることがあります。Excel の Format Cells オプションを使用して、表示された情報のフォーマットを変えてください。

24.1.6.2.1.3. Microsoft Visual Basic

テーブルをアップデートするには、テーブルに基本キーを定義する必要があります。

ADO を使用した Visual Basic は、大きな整数を扱うことができません。つまり、SHOW PROCESSLIST のようなクエリは正常に作動しません。これを解決するには、ODBC 接続ストリングで OPTION=16384 を使用するか、Connector/ODBC 接続スクリーンで Change BIGINT columns to INT オプションを選択します。また、Return matching rows オプションを選択するのもよいでしょう。

24.1.6.2.1.4. Microsoft Visual InterDev

結果に BIGINT がある場合、[Microsoft][ODBC Driver Manager] Driver does not support this parameter エラーが発生する恐れがあります。Connector/ODBC 接続スクリーンで、Change BIGINT columns to INT オプションを選択してみましょう。

24.1.6.2.1.5. Visual Objects

Don't optimize column widths オプションを選択してください。

24.1.6.2.1.6. Microsoft ADO

ADO API と Connector/ODBC でコード作成をしている場合、MySQL サーバでサポートされていないデフォルトのプロパティに注意してください。例えば、CursorLocation PropertyadUseServer として使用すると、–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 を参照。

24.1.6.2.1.7. Active Server Pages (ASP) との Connector/ODBC の使用

DSN で Return matching rows オプションを選択してください。

Connector/ODBC を使用し、ASP を介して MySQL にアクセスする方法は、次の資料を参考にしてください :

ASP に関するよくある質問のリストは、http://support.microsoft.com/default.aspx?scid=/Support/ActiveServer/faq/data/adofaq.asp で閲覧できます。

24.1.6.2.1.8. Visual Basic (ADO, DAO and RDO) および ASP を使った Connector/ODBC の使用

Visual Basic および ASP に関する参考資料 :

24.1.6.2.2. Connector/ODBC の Borland アプリケーションとの使用

Borland Database Engine (BDE) が使用されるすべての Borland アプリケーションでは、互換性を高めるため次の手順に従ってください :

  • BDE 3.2 以降にアップデートする。

  • DSN で Don't optimize column widths オプションを有効にする。

  • DSN で Return matching rows オプションを有効にする。

24.1.6.2.2.1. Connector/ODBC の Borland Builder 4 との使用

クエリを開始する際、Active プロパティか、Open メソッドを使用することができます。Active は、SELECT * FROM ... クエリを自動的に発行することで開始するので注意してください。大規模なテーブルを扱っている場合、これは欠点になりえます。

24.1.6.2.2.2. Delphi を使った Connector/ODBC の使用

また以下は、Connector/ODBC の ODBC エントリと BDE エントリの両方をセットアップする、役に立ちうる Delphi コードの一例です。BDE エントリには、身近な Delphi Super Page から無料で入手できる BDE Alias Editor が必要です。( Bryan Brunton に提供を感謝します ) :

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);
24.1.6.2.2.3. C++ Builder を使った Connector/ODBC の使用

BDE 3.0. でテスト済み。判明している問題は、テーブルのスキーマに変更がある時、クエリ フィールドがアップデートされないことだけです。しかし、これまでのところ問題にはなっていませんが、BDE は基本キーを認識ぜず、PRIMARY と名付けられたインデックスのみを認めるようです。

24.1.6.2.3. ColdFusion を使った Connector/ODBC の使用

次の情報は 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-xxx.zip プログラムを含んでおり、これにより ColdFusion アプリケーション上の Connector/ODBC ドライバ用に、DSN レジストリ ファイルを構築または除去することができることになります。

ColdFusion と Connector/ODBC の使用に関する情報とガイドは、次の外部サイトでご覧ください :

24.1.6.2.4. OpenOffice を使った Connector/ODBC の使用

Open Office (http://www.openoffice.org) How-to: MySQL + OpenOffice. How-to: OpenOffice + MyODBC + unixODBC.

24.1.6.2.5. Sambar Server を使った Connector/ODBC の使用

Sambar Server (http://www.sambarserver.info) How-to: MyODBC + SambarServer + MySQL.

24.1.6.2.6. Pervasive Software DataJunction を使った Connector/ODBC の使用

Data junction が ENUM をアウトプットすると MySQL に不具合が起きるので、VARCHAR をアウトプットするよう変更してください。

24.1.6.2.7. SunSystems Vision を使った Connector/ODBC の使用

Return matching rows オプションを選択してください。

24.1.6.3. Connector/ODBC エラーコード と 解決法 :

以下のセクションでは、一般的なエラーとその解決法、または代替案を説明します。問題が引き続き起こる場合は、Connector/ODBC メーリングリストを利用してください。項24.1.7.1. 「Connector/ODBC のコミュニティー支援」 参照。

多くの問題は、Connector/ODBC ドライバを最新版に更新することで解決できます。Windows では、最新バージョンの Microsoft Data Access Components (MDAC) をインストールするようにしてください。

Questions

  • 24.1.6.3.1: 私の MyODBC 2.50 アプリケーションは Connector/ODBC 3.51 に対応しますか?

  • 24.1.6.3.2: Windows XP x64 版、または Windows Server 2003 R2 x64 に Connector/ODBC をインストールしました。インストールは成功したのですが、Connector/ODBC ドライバが ODBC Data Source Administrator に現われません。

  • 24.1.6.3.3: ODBC Data Source Administrator にある Test ボタンを接続、または使用すると、エラー 10061 ( サーバー接続不可 ) が発生します。

  • 24.1.6.3.4: トランザクションを使用すると、次のエラーが報告されます :Transactions are not enabled

  • 24.1.6.3.5: クエリをサブミットすると、次のエラーが報告されます :Cursor not found

  • 24.1.6.3.6: リンクしたテーブルに記録をインサートまたはアップデートするとき、Access が記録を #DELETED# として報告してきます。

  • 24.1.6.3.7: Write Conflicts および Row Location エラーにはどう対処すべきですか?

  • 24.1.6.3.8: データを Access 97 から MySQL にエクスポートすると Syntax Error が報告されます。

  • 24.1.6.3.9: データを Microsoft DTS から MySQL にエクスポートすると Syntax Error が報告されます。

  • 24.1.6.3.10: ODBC.NET を Connector/ODBC と使用すると、空のストリング ( 長さ 0 ) を摘出している間、SQL_NO_DATA 例外を出し始めます。

  • 24.1.6.3.11: Visual Basic と ASP で SELECT COUNT(*) FROMtbl_name を使用すると、エラーが戻ってきます。

  • 24.1.6.3.12: AppendChunk() または GetChunk() ADO メソッドを使用すると、Multiple-step operation generated errors.Check each status value エラーが戻ってきます。

  • 24.1.6.3.13: Linked Table で記録を編集していると、Access が Another user had modified the record that you have modified を戻してきます。

  • 24.1.6.3.14: Unix/Linux 下にある Connector/ODBC ライブラリにアプリケーションを直接リンクしようとすると、アプリケーションがクラッシュします。

  • 24.1.6.3.15: Microsoft Office スイートのアプリケーションでは、DATE または TIMESTAMP カラムのあるテーブルをアップデートできません。

  • 24.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

24.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 の不具合またはバグのレポート」 参照。

24.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 として報告されました。

24.1.6.3.3: ODBC Data Source Administrator にある Test ボタンを接続、または使用すると、エラー 10061 ( サーバー接続不可 ) が発生します。

このエラーの原因には、サーバーの不具合、ネットワークの問題、ファイアウォールとポートブロックの問題等、多くの事柄が考えられます。詳細は 項B.1.2.2. 「Can't connect to [local] MySQL server をご覧ください。

24.1.6.3.4: トランザクションを使用すると、次のエラーが報告されます :Transactions are not enabled

このエラーは、トランザクションをサポートしない MySQL テーブルでトランザクションを使用しているということを示します。トランザクションは InnoDB データベース エンジンを使っているときに、MySQL でサポートされます。また、MySQL Mysql 5.1 以前のバージョンでは、BDB エンジンも使用してください。

先に進む前に、次を確認してください :

  • あなたの MySQL サーバが トランザクション データベース エンジンをサポートしているか確認。SHOW ENGINES を使って、利用可能なエンジン タイプのリストを得る。

  • あなたがアップデートしているテーブルが、トランザクション データベース エンジンを使用するか確認。

  • DSN で、disable transactions オプションを有効にしていないことを確認。

24.1.6.3.5: クエリをサブミットすると、次のエラーが報告されます :Cursor not found

これはアプリケーションが 古い MyODBC 2.50 バージョンを使用していることが原因で、そのため SQLSetCursorName を介して明確にカーソル名を設定していません。これを解決するには、Connector/ODBC 3.51 バージョンへアップグレードしてください。

24.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# と表示されるが、新しく加えられた、またはアップデートされた記録は正常に表示される。

24.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.

24.1.6.3.8: データを Access 97 から MySQL にエクスポートすると Syntax Error が報告されます。

このエラーは Access 97 と、Connector/ODBC 3.51.02 より前のバージョンに特有のものです。最新バージョンの Connector/ODBC にアップグレードすれば、この問題は解決できます。

24.1.6.3.9: データを Microsoft DTS から MySQL にエクスポートすると Syntax Error が報告されます。

このエラーは、TEXT または VARCHAR データタイプを使っている MySQL テーブルでのみ起こります。Connector/ODBC ドライバを バージョン 3.51.02 以降にアップグレードすれば、この問題は解決されます。

24.1.6.3.10: ODBC.NET を Connector/ODBC と使用すると、空のストリング ( 長さ 0 ) を摘出している間、SQL_NO_DATA 例外を出し始めます。

この問題を解決するパッチが、http://support.microsoft.com/default.aspx?scid=kb;EN-US;q319243 から入手できます。

24.1.6.3.11: Visual Basic と ASP で SELECT COUNT(*) FROMtbl_name を使用すると、エラーが戻ってきます。

このエラーは、COUNT(*) 発現が BIGINT を戻しており、これほど大きな数字になると、ADO が理解しきれないのが原因です。Change BIGINT columns to INT オプション ( オプション値 16384 ) を選択してください。

24.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

24.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 トレース ファイルの獲得」 をご覧ください。

24.1.6.3.14: Unix/Linux 下にある Connector/ODBC ライブラリにアプリケーションを直接リンクしようとすると、アプリケーションがクラッシュします。

Unix/Linux 下の Connector/ODBC 3.51 は、アプリケーションへの直接リンクに対応していません。iODBC もしくは unixODBC などのドライバ マネージャーを使用して、ODBC ソースに接続しなければなりません。

24.1.6.3.15: Microsoft Office スイートのアプリケーションでは、DATE または TIMESTAMP カラムのあるテーブルをアップデートできません。

これは、Connector/ODBC のよく知られた問題です。フィールドが確実にデフォルト値 ( NULL ではなく、また、ゼロでないデフォルト値。つまり 0000-00-00 00:00:00 のデフォルト値は無効 ) を持っているか確認してください。

24.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 のサポートは最終的なリリースで予定されています。

24.1.7. Connector/ODBC サポート

Connector/ODBC の使用に関するサポートは、多くの場所で受けることができます。Connector/ODBC Mailing List か Connector/ODBC Forum への参加もお勧めします。バグや不具合を MySQL に報告する前に、まずは 項24.1.7.1. 「Connector/ODBC のコミュニティー支援」 でご確認ください。

24.1.7.1. Connector/ODBC のコミュニティー支援

MySQL AB はメーリング リストを用いて、ユーザ コミュニティーを後援します。Connector/ODBC 関連の問題については、 メーリングリストから、経験のあるユーザに援助を求めることができます。アーカイブはオンラインで、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 コミュニティサポート」 をご覧ください。

24.1.7.2. Connector/ODBC の不具合またはバグのレポート

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 ログ ファイルも加えていただければ、ふたつのシステムでの結果を当社で比較することができます。

詳しい詳細を提供していただくのが問題解決には一番ですので、その旨をご理解ください。

24.1.7.3. Connector/ODBC Patch の提供

既存のコードや不具合へのパッチ、または問題解決の提案を提供していただける場合は、 までメールでお寄せください。

24.1.7.4. Connector/ODBC 変更履歴

Connector/ODBC Change History ( Changelog ) は、MySQL のメイン Changelog に収められています。項C.2. 「MySQL Connector/ODBC (MyODBC) Change History」 を参照してください。

24.1.7.5. 開発者

以下はConnector/ODBC および Connector/ODBC 3.51 ドライバの開発に携わった MySQL AB の開発者です。

  • Michael (Monty) Widenius

  • Venu Anuganti

  • Peter Harvey

24.2. MySQL Connector/NET

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 プラグイン」 をご覧ください。

24.2.1. Connector/NET のバージョン

現在利用できる 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 と表示される場合があります。これは単にナンバーが異なって表示されるだけであり、バージョンそのものに違いはありません。

24.2.2. Connector/NET のインストール

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 からダウンロードすることができます。

24.2.2.1. Connector/NET の Windows へのインストール

Windows では、インストールはバイナリ インストールか、Connector/NET コンポーネントと共にZip ファイル形式でダウンロードすることによって行うことができます。

インストールの前に、最新バージョンの .NET Framework がインストールされているかなど、使用するシステムが更新されているか確認してください。

24.2.2.1.1. インストーラを使用した Connector/NET のインストール

Windows に Connector/NET をインストールする場合、インストーラを使用するのが最も容易な方法であり、インストールされたコンポーネントにはソースコード、テストコード、および完全な参考資料が含まれています。

Connector/NET は、すべての Windows オペレーション システムへのインストールに使用できる、Windows Installer ( .msi ) インストール パッケージを使ってインストールされます。MSI パッケージは mysql-connector-net-version.zip と名付けられた ZIP アーカイブに含まれています。この version は Connector/NET のバージョンを指します。

Connector/NET のインストール方法 :

  1. ダウンロードした Zip から摘出した MSI インストーラ ファイルをダブルクリック。Next を押してインストールを開始します。

    Connector/ODBC Windows Installer -
                Welcome
  2. 実行したいインストールのタイプを選択。

    Connector/NET Windows
                インストーラ - インストール タイプ

    ほとんどの場合には、Typical インストールが適しています。Typical ボタンをクリックし、ステップ 5 に進んでください。Complete インストールは、利用可能なファイルをすべてインストールします。Complete インストールを行うには、Complete ボタンをクリックし、ステップ 5 に進みます。インストールするコンポーネントや、インストールのオプションを選ぶなど、インストールをカスタマイズしたい場合は、Custom ボタンを押してステップ 3 に進みます。

    Connector/NET インストーラは、Global Assembly Cache (GAC) 内でコネクタを登録します。これにより、Connector/NET コンポーネントをはっきりと参照したものだけでなく、すべてのアプリケーションで Connector/NET コンポーネントを利用することができるようになります。このインストーラはまた、文章やリリース情報への必要なリンクを、Start メニューで作成します。

  3. Custom インストールを選んだ場合、コア インターフェイス コンポーネント、解説文章 ( CHM ファイル ) サンプル、例、そしてソースコードを含む、インストールしたい各コンポーネントを選ぶことができます。アイテムとその設置レベルを選択し、Next をクリックしてインストールを続行します。

    注意

    Connector/NET 1.0.8 以下と Connector 5.0.4 以下では、インストーラは .NET Framework の 1.x と 2.x 両方のためにバイナリをインストールしようとします。フレームワークのバージョンをひとつだけインストールしている場合、コネクタのインストールが失敗する可能性があります。もしこれで失敗した場合は、Custom インストールの手順からインストールされるフレームワークのバージョンを選ぶことができます。

    Connector/NET Windows
                インストーラ - Custom セットアップ
  4. インストールの最終確認が行われます。Install をクリックして、ファイルをマシンへコピーおよびインストールします。

    Connector/NET Windows
                インストーラ - インストール確認
  5. インストールが完了したら、Finish をクリックしてインストールを終了します。

特別に指定をしない限り、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 オプションを使用します。

24.2.2.1.2. Zip パッケージを使用した Connector/NET のインストール

インストーラの起動に問題がある場合は、インストーラなしで .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 コンポーネントの動作を確認するために使用されるテスト スイート。

24.2.2.2. Mono を使用した Unix に Connector/NET をインストールする

Unix インストール システムに Connector/NET コンポーネントを設置ためのインストーラは入手不可能です。しかし、インストールは非常に簡単に行うことができます。インストールの前に、Mono プロジェクトのインストールが実行可能か確認してください。

Mono プロジェクトを通じて MySQL サーバに接続するようにしたい Unix 環境では、Connector/NET コンポーネントのみをインストールするよう注意してください。Java や Perl など、別の環境で展開または開発する場合には、より適切な接続コンポーネントを使用してください。詳細は 章 24. MySQL コネクタ 、または 章 23. APIとライブラリー をご覧ください。

Unix/Mono に Connector/NET をインストールするには :

  1. mysql-connector-net-version-noinstall.zip をダウンロードして、コンテンツを摘出。

  2. MySql.Data.dll ファイルを、Mono プロジェクトのインストール フォルダにコピーする。

  3. Connector/NET コンポーネントを、gacutil コマンドで Global Assembly Cache に登録する :

    shell> gacutil /i MySql.Data.dll

インストールが完了すれば、Connector/NET コンポーネントとコンパイルされたアプリケーションは以後変更する必要はありません。しかし、アプリケーションをコンパイルする際、-r:MySqlData.dll コマンドライン オプションを使用して Connector/NET コンポーネントを確実に含むようにしてください。

24.2.2.3. ソースを使用した 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 の構築に使用できるソースに含まれています。

24.2.3. 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」 をご覧ください。

24.2.3.1. MySqlCommand の使用

SQL 文を構成し、MySQL データベースに対して実行します。このクラスを継承することはできません。

MySqlCommand は MySQL データベースでコマンドを実行する次の手段を備えています :

アイテム 概要
ExecuteReader行を返すコマンドを実行。
ExecuteNonQuerySQL INSERT 、DELETE 、および UPDATE ステートメントなどのコマンドを実行。
ExecuteScalarデータベースから単一値 ( 例えば集約値 ) を取り出す。

CommandText プロパティをリセットし、MySqlCommand オブジェクトを再使用することができます。しかし、新しい、または以前のコマンドを実行する前に、MySqlDataReader を閉じる必要があります。

MySqlExceptionMySqlCommand を実行するメソッドで生成される場合、MySqlConnection は開いたままになります。この接続を閉じるのはプログラマの采配になります。

注意

プロバイダの以前のバージョンでは、SQL のパラメータをマークするのに '@' シンボルが使用されました。これは MySQL ユーザ変数に適合しないため、現在のプロバイダでは '?' シンボルを使用して SQL のパラメータを指定しています。以前のコードをサポートするには、'old syntax=yes' を接続ストリングで設定することができます。そうする場合、SQL で使用する予定のパラメータの定義に失敗しても、例外は投入されませんのでご注意ください。

以下は、MySqlCommandMySqlConnection を作成する例です。MySqlConnection が開かれ、MySqlCommandConnection として設定されます。この例はその後 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();
}
    
24.2.3.1.1. クラス MySqlCommand コンストラクタ 形式 1

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-&gt;Open();
    MySqlTransaction* myTrans = myConnection-&gt;BeginTransaction();
    String* mySelectQuery = S"SELECT * FROM myTable";
    MySqlCommand* myCommand = new MySqlCommand(mySelectQuery, myConnection, myTrans);
    myCommand-&gt;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;
}
24.2.3.1.2. クラス MySqlCommand コンストラクタ 形式 2

クエリのテキストで 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;
}
24.2.3.1.3. クラス MySqlCommand コンストラクタ 形式 3

クエリのテキストと MySqlConnectionMySqlCommand クラスの新規インスタンスを初期化します。

パラメータ : クエリのテキスト。

パラメータ :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;
}
24.2.3.1.4. クラス MySqlCommand コンストラクタ 形式 4

クエリのテキスト、MySqlConnection 、および MySqlTransactionMySqlCommand クラスの新規インスタンスを初期化します。

パラメータ : クエリのテキスト。

パラメータ :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;
}
24.2.3.1.5. ExecuteNonQuery

接続に対して 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();
    }
  
24.2.3.1.6. ExecuteReader1

CommandTextMySqlConnection Connection に送り、CommandBehavior 値のひとつを使用して MySqlDataReader を構築します。

パラメータ :CommandBehavior 値のひとつ。

CommandType プロパティが StoredProcedure に設定される際、CommandText プロパティをストアド プロシージャ名に設定してください。ExecuteReader を呼び出す時に、コマンドがこのストアド プロシージャを実行します。

MySqlDataReader は、大きなバイナリ値の効率的な読み取りを可能にする特殊なモードをサポートしています。詳細は、CommandBehaviorSequentialAccess 設定を参照してください。

MySqlDataReader が使用されている間、関連のある MySqlConnectionMySqlDataReader へ忙しく供給します。その状態では、MySqlConnection で閉じる以外の他の操作を行うことはできません。MySqlDataReaderMySqlDataReader.Close メソッドが呼び出されるまでは、その状態が続きます。MySqlDataReaderCloseConnection に設定される CommandBehavior で作成される場合、MySqlDataReader を閉じると、接続が自動的に切断されます。

注意

ExecuteReaderSingleRow 挙動で呼び出す時、SQL で limit 句を使用すると、すべての行 ( 提示された限界まで ) がクライアントに引き出されることになります。MySqlDataReader.Read メソッドは、最初の行の後でもまだ false を戻しますが、データの全行をクライアントに入れると作業に影響が出ます。limit 句が必要でない場合は、避けたほうがよいでしょう。

戻り値 : MySqlDataReaderオブジェクト。

24.2.3.1.7. ExecuteReader の使用

CommandTextMySqlConnection Connection に送り、MySqlDataReader を構築します。

戻り値 : MySqlDataReaderオブジェクト。

CommandType プロパティが StoredProcedure に設定される際、CommandText プロパティをストアド プロシージャ名に設定してください。ExecuteReader を呼び出す時に、コマンドがこのストアド プロシージャを実行します。

MySqlDataReader が使用されている間、関連のある MySqlConnectionMySqlDataReader へ忙しく供給します。その状態では、MySqlConnection で閉じる以外の他の操作を行うことはできません。MySqlDataReaderMySqlDataReader.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();
    }
 }  
 
24.2.3.1.8. Prepare の使用

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

クエリを実行し、クエリが戻した結果セットの第一行の最初のカラムを返します。余分なカラムや行は無視されます。

戻り値 : 結果セットの第一行の最初のカラム、または結果セットが空な場合はヌルのリファレンス

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-&gt;Connection-&gt;Open();
        myCommand-&gt;ExecuteScalar();
        myConnection-&gt;Close();
    }  
24.2.3.1.10. CommandText

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;
 }  
24.2.3.1.11. CommandTimeout

コマンドの実行を停止し、エラーを生成するまでの待ち時間を取得または設定します。

値 :コマンド実行までの待ち時間 ( 秒単位 ) 。デフォルトは 0 秒。

MySQL は現在、保留または実行中の作業をキャンセルする方法をサポートしていません。MySQL サーバに対して発行するすべてのコマンドは、完了するか例外が発生するまで実行します。

24.2.3.1.12. CommandType

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;
}
24.2.3.1.13. Connection

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;
 }  
 
24.2.3.1.14. IsPrepared

ステートメントが準備されている場合に true を返します。

24.2.3.1.15. Parameters

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&lt;myParamArray.Length; j++)
   {
      myCommand.Parameters.Add(myParamArray[j]) ;
   }
   string myMessage = "";
   for (int i = 0; i &lt; myCommand.Parameters.Count; i++) 
   {
      myMessage += myCommand.Parameters[i].ToString() + "\n";
   }
   MessageBox.Show(myMessage);
}  
24.2.3.1.16. Transaction

MySqlCommand が実行する中で MySqlTransaction を取得または設定します。

値 :MySqlTransaction 。デフォルト値はヌル リファレンス ( Visual Basic の Nothing ) 。

すでに特定の値が設定されている場合、コマンドの実行が進行中の場合は、Transaction プロパティを設定することはできません。トランザクションのプロパティを MySqlCommand オブジェクトと同じ MySqlConnection に接続されていない MySqlTransaction に設定すると、次にステートメントの実行を試みる際に例外が投入されるでしょう。

24.2.3.1.17. UpdatedRowSource

System.Data.Common.DbDataAdapterSystem.Data.Common.DbDataAdapter.Update メソッドで使用される時に、コマンドの結果がどのように DataRow に適用されるかを取得または設定します。

値 :UpdateRowSource 値のひとつ。

デフォルトの System.Data.UpdateRowSource 値は、コマンドが ( MySqlCommandBuilder のケースのように) 自動的に生成されない限り Both になります。コマンドが自動的に生成される場合のデフォルト値は None になります。

24.2.3.2. MySqlCommandBuilder の使用

MySQL データベースに関連付けられた DataSet の変更を調整するための単一テーブル コマンドを自動的に生成します。このクラスを継承することはできません。

MySqlDataAdapter は、MySQL のインスタンスに関連付けられた System.Data.DataSetDataSet への変更を調整するのに必要な SQL 文を自動的に生成することはありません。しかし、MySqlDataAdapterMySqlDataAdapter.SelectCommandSelectCommand を設定すれば、単一テーブルのアップデートのための SQL 文を自動的に生成する MySqlCommandBuilder オブジェクトを作成することができます。そうすると、設定していない追加の SQL 文は、MySqlCommandBuilder によって生成されます。

MySqlCommandBuilder は、DataAdapter プロパティを設定すると、自らを MySqlDataAdapter.OnRowUpdating RowUpdating イベントのリスナとして登録します。一度にはひとつの MySqlDataAdapter または MySqlCommandBuilder オブジェクトだけをお互いに関連付けることが可能です。

INSERT 、UPDATE 、もしくは DELETE 文を生成するため、MySqlCommandBuilderSelectCommand プロパティを使用して必要なメタデータのセットを自動的に引き出します。メタデータが引き出された後に ( 例えば最初のアップデートの後 ) SelectCommand を変更する場合、RefreshSchema メソッドを呼び出してメタデータをアップデートしてください。

また、SelectCommand はプライマリ キーか一意列を少なくともひとつは戻さなければなりません。もしひとつもない場合は、InvalidOperation 例外が生成され、コマンドは生成されません。

MySqlCommandBuilder は、SelectCommand が参照する MySqlCommand.ConnectionConnection 、MySqlCommand.CommandTimeoutCommandTimeout 、そして MySqlCommand.TransactionTransaction プロパティも使用します。これらのプロパティのどれかが改変されている場合、または SelectCommand そのものが取り替えられている場合、ユーザは RefreshSchema を呼び出してください。それを行わない場合、MySqlDataAdapter.InsertCommandInsertCommand 、MySqlDataAdapter.UpdateCommandUpdateCommand 、そして MySqlDataAdapter.DeleteCommandDeleteCommand プロパティはそれぞれ前値を保持します。

Dispose を呼び出すと、MySqlCommandBuilderMySqlDataAdapter との関連を絶たれ、生成されたコマンドは使用されなくなります。

注意

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;
  }
    
24.2.3.2.1. クラス MySqlCommandBuilder コンストラクタ

MySqlCommandBuilder クラスの新規インスタンスを初期化します。

24.2.3.2.2. クラス MySqlCommandBuilder コンストラクタ 形式 1

MySqlCommandBuilder クラスの新規インスタンスを初期化し、last one wins プロパティを設定します。

パラメータ :変更保護コードの生成には False 。それ以外は True 。

lastOneWins パラメータは、基礎となるデータの変更を確認する生成された DELETE および UPDATE コマンドに、SQL コードが含まれるべきかを指示します。lastOneWins が true である場合はこのコードは含まれず、データ レコードはマルチユーザまたはマルチスレッドの環境で上書きされる場合があります。lastOneWins を false に設定するとこの確認が含まれ、知らない間に基礎になるデータ レコードが変更される場合に同時実行例外が投入される原因になります。

24.2.3.2.3. クラス MySqlCommandBuilder コンストラクタ 形式 2

関連する MySqlDataAdapter オブジェクトで MySqlCommandBuilder クラスの新規インスタンスを初期化します。

パラメータ :使用する MySqlDataAdapter

MySqlCommandBuilder は自らを、このプロパティで指定されたMySqlDataAdapter によって生成された MySqlDataAdapter.RowUpdating イベントのリスナとして登録します。

新規インスタンス MySqlCommandBuilder を作成する際、この MySqlDataAdapter に関連する既存の MySqlCommandBuilder がリリースされます。

24.2.3.2.4. クラス MySqlCommandBuilder コンストラクタ 形式 3

関連する MySqlDataAdapter オブジェクトで MySqlCommandBuilder クラスの新規インスタンスを初期化します。

パラメータ :使用する MySqlDataAdapter

パラメータ :変更保護コードの生成には False 。それ以外は True 。

MySqlCommandBuilder は自らを、このプロパティで指定されたMySqlDataAdapter によって生成された MySqlDataAdapter.RowUpdating イベントのリスナとして登録します。

新規インスタンス MySqlCommandBuilder を作成する際、この MySqlDataAdapter に関連する既存の MySqlCommandBuilder がリリースされます。

lastOneWins パラメータは、基礎となるデータの変更を確認する生成された DELETE および UPDATE コマンドに、SQL コードが含まれるべきかを指示します。lastOneWins が true である場合はこのコードは含まれず、データ レコードはマルチユーザまたはマルチスレッドの環境で上書きされる場合があります。lastOneWins を false に設定するとこの確認が含まれ、知らない間に基礎になるデータ レコードが変更される場合に同時実行例外が投入される原因になります。

24.2.3.2.5. DataAdapter

SQL 文が自動的に生成される MySqlDataAdapter オブジェクトを取得または設定します。

値 :MySqlDataAdapterオブジェクト。

MySqlCommandBuilder は自らを、このプロパティで指定されたMySqlDataAdapter によって生成された MySqlDataAdapter.RowUpdating イベントのリスナとして登録します。

新規インスタンス MySqlCommandBuilder を作成する際、この MySqlDataAdapter に関連する既存の MySqlCommandBuilder がリリースされます。

24.2.3.2.6. QuotePrefix

スペースや予約トークンなどの文字を名前に含む MySQL データベース オブジェクト ( 例えばテーブルやカラム ) の指定に使用する文字や、開始文字を取得または設定します。

値 :使用する開始文字または文字。デフォルト値は ` 。

MySQL のデータベース オブジェクトは、普通の SQL ストリングなら正確な解析が不可能になるスペースなどの特殊な文字を含むことができます。QuotePrefix および QuoteSuffix プロパティを使用すると、この状況に対処する SQL コマンドを MySqlCommandBuilder が構築できるようになります。

24.2.3.2.7. QuoteSuffix

スペースや予約トークンなどの文字を名前に含む MySQL データベース オブジェクト ( 例えばテーブルやカラム ) の指定に使用する文字や、開始文字を取得または設定します。

値 :使用する開始文字または文字。デフォルト値は ` 。

MySQL のデータベース オブジェクトは、普通の SQL ストリングなら正確な解析が不可能になるスペースなどの特殊な文字を含むことができます。QuotePrefix および QuoteSuffix プロパティを使用すると、この状況に対処する SQL コマンドを MySqlCommandBuilder が構築できるようになります。

24.2.3.2.8. DeriveParameters

24.2.3.2.9. GetDeleteCommand

データベースでの削除に必要な、自動的に生成された MySqlCommand オブジェクトを取得します。

戻り値 : 削除操作の処理のために生成された MySqlCommand オブジェクト。

GetDeleteCommand メソッドは実行される MySqlCommand を戻すので、アプリケーションはそれを情報提供やトラブルシュートの目的に使用することができます。

また、GetDeleteCommand を変更されたコマンドの基盤として使用することもできます。例えば、GetDeleteCommand を呼び出して MySqlCommand.CommandTimeout 値を変更したとすると、それを MySqlDataAdapter に明示的に設定します。

最初に SQL 文が生成された後、ステートメントになんらかの変更が生じる場合はアプリケーションが RefreshSchema を明示的に呼び出す必要があります。さもなければ GetDeleteCommand は前のステートメントからの情報を使い続けることになり、それでは間違っている可能性があります。SQL 文が最初に生成されるのは、アプリケーションが System.Data.Common.DataAdapter.Update または GetDeleteCommand を呼び出す時です。

24.2.3.2.10. GetInsertCommand

データベースでの挿入に必要な、自動的に生成された MySqlCommand オブジェクトを取得します。

戻り値 : The挿入操作の処理のために生成された MySqlCommand オブジェクト。

GetInsertCommand メソッドは実行される MySqlCommand を戻すので、アプリケーションはそれを情報提供やトラブルシュートの目的に使用することができます。

また、GetInsertCommand を変更されたコマンドの基礎として使用することもできます。例えば、GetInsertCommand を呼び出して MySqlCommand.CommandTimeout 値を変更したとすると、それを MySqlDataAdapter に明示的に設定します。

最初に SQL 文が生成された後、ステートメントになんらかの変更が生じる場合はアプリケーションが RefreshSchema を明示的に呼び出す必要があります。さもなければ GetInsertCommand は前のステートメントからの情報を使い続けることになり、それでは間違っている可能性があります。SQL 文が最初に生成されるのは、アプリケーションが System.Data.Common.DataAdapter.Update または GetInsertCommand を呼び出す時です。

24.2.3.2.11. GetUpdateCommand

データベースでの更新作業に必要な、自動的に生成された MySqlCommand オブジェクトを取得します。

戻り値 : 更新操作の処理のために生成された MySqlCommand オブジェクト。

GetUpdateCommand メソッドは実行される MySqlCommand を戻すので、アプリケーションはそれを情報提供やトラブルシュートの目的に使用することができます。

また、GetUpdateCommand を変更されたコマンドの基盤として使用することもできます。例えば、GetUpdateCommand を呼び出して MySqlCommand.CommandTimeout 値を変更したとすると、それを MySqlDataAdapter に明示的に設定します。

最初に SQL 文が生成された後、ステートメントになんらかの変更が生じる場合はアプリケーションが RefreshSchema を明示的に呼び出す必要があります。さもなければ GetUpdateCommand は前のステートメントからの情報を使い続けることになり、それでは間違っている可能性があります。SQL 文が最初に生成されるのは、アプリケーションが System.Data.Common.DataAdapter.Update または GetUpdateCommand を呼び出す時です。

24.2.3.2.12. RefreshSchema

INSERT 、UPDATE 、または DELETE 文の生成に使用されるデータベース スキーマ情報をリフレッシュします。

MySqlCommandBuilder に関連する SELECT 文が変わるたびに、アプリケーションは RefreshSchema を呼び出します。

アプリケーションは、MySqlDataAdapterMySqlDataAdapter.SelectCommand 値が変わるたびに、RefreshSchema を呼び出します。

24.2.3.3. MySqlConnection の使用

MySQL サーバ データベースへのオープン接続を表します。このクラスを継承することはできません。

MySqlConnection オブジェクトは、MySQL Server データソースへのセッションを示します。MySqlConnection のインスタンスを作成する際、すべてのプロパティはそれらの初期値に設定されます。それらの値のリストは、MySqlConnection コンストラクタをご覧ください。

MySqlConnection が範囲から出ると閉じません。そのため、MySqlConnection.Close または MySqlConnection.Dispose を呼び出すことによって、明示的に接続を閉じる必要があります。

以下は、MySqlCommandMySqlConnection を作成する例です。MySqlConnection が開かれ、MySqlCommandMySqlCommand.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();
  }
  
24.2.3.3.1. クラス MySqlCommandBuilder コンストラクタ ( デフォルト )

MySqlConnection クラスの新規インスタンスを初期化します。

MySqlConnection の新規インスタンスが作成される時、赤/白のプロパティは、ConnectionString の関連するキーワードを使って特別に設定されない限り、次の初期値に設定されます。

プロパティ 初期値
ConnectionString empty string ("")
ConnectionTimeout 15
Database empty string ("")
DataSource empty string ("")
ServerVersion empty string ("")

これらのプロパティの値は、ConnectionString プロパティを使うことによってのみ変更できます。

MySqlConnection のオーバーロード メソッド

MySqlConnection クラスの新規インスタンスを初期化します。

24.2.3.3.2. クラス MySqlConnection コンストラクタ 形式 1

接続ストリングを含むストリングが与えられた時に、MySqlConnection クラスの新規インスタンスを初期化します。

MySqlConnection の新規インスタンスが作成される時、赤/白のプロパティは、ConnectionString の関連するキーワードを使って特別に設定されない限り、次の初期値に設定されます。

プロパティ 初期値
ConnectionString empty string ("")
ConnectionTimeout 15
Database empty string ("")
DataSource empty string ("")
ServerVersion empty string ("")

これらのプロパティの値は、ConnectionString プロパティを使うことによってのみ変更できます。

パラメータ : MySQL データベースを開くのに使用される接続プロパティ。

24.2.3.3.3. Open

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

使用中のデータベース、または接続が開いた後に使用されるデータベースの名前を取得します。

戻り値 : 使用中のデータベース名、または接続が開いた後に使用されるデータベースの名前。デフォルト値は空のストリング。

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

接続の状態を取得します。

戻り値 : 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();
}
    
24.2.3.3.6. ServerVersion

クライアントが接続された 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();
}
    
24.2.3.3.7. 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();
}
    
24.2.3.3.8. CreateCommand

MySqlConnection に関連するMySqlCommand オブジェクトを作成し、戻します。

戻り値 : MySqlCommandオブジェクト。

24.2.3.3.9. BeginTransaction

データベースのトランザクションを開始します。

戻り値 : 新しいトランザクションを表すオブジェクト。

例外 : 並列トランザクションはサポートされていません。

このコマンドは、MySQL BEGIN TRANSACTION コマンドに相当します。

トランザクションは、MySqlTransaction.Commit または MySqlTransaction.Rollback メソッドを使用して、明示的にコミットするかロールバックする必要があります。

注意

隔離レベルを指定しない場合、デフォルトの隔離レベルが使用されます。BeginTransaction メソッドで隔離レベルを指定するには、iso パラメータを受け取るオーバーロードを使用します。

次は、MySqlConnectionMySqlTransaction を作成する例です。BeginTransactionMySqlTransaction.CommitMySqlTransaction.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();
    }
}
    
24.2.3.3.10. BeginTransaction1

隔離レベルを指定して、データベース トランザクションを開始します。

パラメータ : トランザクションを実行する分離レベル。

戻り値 : 新しいトランザクションを表すオブジェクト。

例外 : 並列トランザクションはサポートされていません。

このコマンドは、MySQL BEGIN TRANSACTION コマンドに相当します。

トランザクションは、MySqlTransaction.Commit または MySqlTransaction.Rollback メソッドを使用して、明示的にコミットするかロールバックする必要があります。

注意

隔離レベルを指定しない場合、デフォルトの隔離レベルが使用されます。BeginTransaction メソッドで隔離レベルを指定するには、iso パラメータを受け取るオーバーロードを使用します。

次は、MySqlConnectionMySqlTransaction を作成する例です。BeginTransactionMySqlTransaction.CommitMySqlTransaction.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();
    }
}
    
24.2.3.3.11. ChangeDatabase

開いている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();
}
    
24.2.3.3.12. StateChange

接続の状態が変更した時に発生します。

State が closed から opend に、または opend から closed に変わるたびに、StateChange イベントが発生します。StateChangeMySqlConnection トランザクションの直後に実行します。

StateChange イベント内でイベント ハンドラが例外を投入すると、その例外は、 Open メソッドまたは Close メソッドの呼び出し元に通知されます。

StateChange イベントは、Close または Dispose を明示的に呼び出さない限り発生しません。

イベント ハンドラは、このイベントに関連するデータを含む System.Data.StateChangeEventArgs タイプの引数を受け取ります。次の StateChangeEventArgs プロパティは、このイベントの固有の情報を提供します。

プロパティ解説
System.Data.StateChangeEventArgs.CurrentState接続の新しい状態を取得します。イベントが発生した時には、接続オブジェクトが既に新しい状態になっています。
System.Data.StateChangeEventArgs.OriginalState接続の元の状態を取得します。
24.2.3.3.13. InfoMessage

MySQL が、コマンドやクエリを実行した結果として警告メッセージを返す時に発生します。

24.2.3.3.14. ConnectionTimeout

接続の確立の試行を開始してから、その試行を終了してエラーを生成するまでの待機時間を取得または設定します。

例外 : 設定値が 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();
}
24.2.3.3.15. ConnectionString

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 Timeout15接続の試行を終了し、エラーを生成するまで、サーバへの接続を待機する時間 (秒単位)。
Host, Server, Data Source, DataSource, Address, Addr, Network Addresslocalhost接続する SQL Server のインスタンスの名前またはネットワーク アドレス。複数のホストを、& で区切って指定することができます。この方法は、複数の MySQL サーバが複製のために構成されており、接続するサーバの正確性を特に求めていない場合にも利用できます。データベースへの書き込みを同期するために、プロバイダは試行しないので、このオプションを使用する際は注意が必要になります。Mono を使用した Unix 環境においては、これは MySQL ソケット ファイル名への完全修飾パスになりえます。この構成では、Unix ソケットが TCP/IP ソケットの代わりに使用されます。現時点ではシングル ソケット名のみしか与えられないので、複製された環境で Unix ソケットを使用して MySQL にアクセスすることは現在サポートされていません。
Ignore Preparetruetrue の場合、MySqlCommand.Prepare() へのすべての呼び出しを無視するようプロバイダに指示します。このオプションは、サーバ側のプリペアド ステートメントと使用する時、ステートメントの破損をともなう発行を防ぐためのものです。サーバ側のプリペアド ステートメントを使用したい場合は、このオプションを false に設定してください。このオプションは、Connector/NET 5.0.3 および Connector/NET 1.0.9 に加えられています。
Port3306MySQL が接続の監視に使用するポート。この値を -1 に指定して名前付きパイプ接続 ( Windows のみ ) を使用します。Unix ソケットが使用されている場合、この値は無視されます。
Protocolsocketサーバへ繋げる接続のタイプを指定。値は : MySQL 共有メモリを使用する、Unix ソケット接続メモリの名前付きパイプ コネクション unix のソケット接続パイプのソケットまたは tcp 。
CharSet, Character Set サーバに送られたすべてのクエリのエンコードに使用されるべき文字セットを指定。結果セットはいつもと同じく、戻されたデータの文字セットに返されます。
Loggingfalsetrue の場合は、各種情報が構成されたどの TraceListeners にもアウトプットされます。
Allow Batchtruetrue の場合は、複数の SQL 文を一度のコマンド実行で送信できます。注 : MySQL 4.1.1 からは、バッチ文をサーバ定義分離文字で分ける必要があります。それ以前のバージョンの MySQL に送られたコマンドは、 ';' で分けてください。
EncryptfalseConnector/NET 5.0.3 以降では、true の場合は、サーバーに証明書がインストールされていれば、クライアントとサーバの間で送信されるすべてのデータに SSL 暗号化を使用します。認識される値は、truefalseyes 、および no です。5.0.3 より前のバージョンでは、このオプションは効果がありません。
Initial Catalog, Databasemysql最初に使用するデータベース名。
Password, pwd 使用されているMySQL アカウントのパスワード。
Persist Security Infofalsefalse または no ( 強く推奨 ) に設定する時、パスワードのようなセキュリティにかかわる情報は、コネクションが開いている場合、またはオープン状態にあった場合は、接続の一部としては戻されません。接続ストリングをリセットすると、パスワードを含むすべてのストリング値がリセットされます。認識される値は、truefalseyes 、および no です。
User Id, Username, Uid, User name 使用されている MySQL ログイン アカウント。
Shared Memory NameMYSQL接続プロトコルがメモリに設定される場合に、通信に使用する共有メモリ オブジェクトの名前。
Allow Zero DatetimefalseTrue では、MySqlDataReader.GetValue() が、不正値を持つデータや日付時刻カラムに対して MySqlDateTime を戻します。False は System.DateTime オブジェクトが不正値に返され、不正値に例外が投入されます。
Convert Zero DatetimefalseTrue では、MySqlDataReader.GetValue() および MySqlDataReader.GetDateTime() が、不正値を持つデータまたは日付時刻カラムに対して DateTime.MinValue を戻します。
Old Syntax, OldSyntaxfalse'@' シンボルをパラメータ マーカとして使用できます。詳細は MySqlCommand を参照。これは、互換性のためのみに使用されます。すべての将来コードは、新しい '?' パラメータ マーカを使用するように書かれる必要があります。
Pipe Name, Pipemysql名前付きパイプの名前に設定される場合、MySqlConnection はその名前付きパイプ上で MySQL への接続を試行します。この設定は Windows のプラットフォームのみに適用します。
Procedure Cache25ストアド プロシージャ キャッシュのサイズを設定します。デフォルトでは、Connector/NET が、最後に使用された約 25 のストアド プロシージャのメタデータ ( インプット/アウトプット データ型 ) を保存します。ストアド プロシージャ キャッシュを無効にするには、値をゼロ (0) に設定します。このオプションは、Connector/NET 5.0.2 および Connector/NET 1.0.9 に加えられています。
Use Procedure Bodiestrueこのオプションを false に設定すると、データベースに接続するユーザが、mysql.proc ( ストアド プロシージャ ) テーブルに対する SELECT 権限を持たないということになります。false に設定する時、Connector/NET はプロシージャが呼び出される際に、この情報に頼りません。Connector/NET はこの情報を定義することができないので、すべてのパラメータのタイプを呼び出しの前に明示的に設定し、パラメータをプロシージャ定義に現れる順にコマンドに加える必要があります。このオプションは、Connector/NET 5.0.4 および Connector/NET 1.0.10 に加えられています。

次の表は、ConnectionString 内のプーリング値として有効な名前の一覧です。接続プールの詳細は、MySQL Data Provider の接続プールをご覧ください。

名前デフォルト解説
Connection Lifetime0接続がプールに戻された時、その作成時が現時刻と比べられ、時間間隔 ( 秒単位 ) が Connection Lifetime で指定された値を越えている場合は、接続が破棄されます。これは、クラスター構成で、起動中のサーバとオンラインに上がったばかりのサーバの間で、ロードのバランスを取るのにも使用できます。値をゼロ (0) にすると、プールされた接続の接続タイムアウトが最長になります。
Max Pool Size100プールできる接続の最大数。
Min Pool Size0プールできる接続の最小数。
Poolingtruetrue の場合、MySqlConnection オブジェクトが適切なプールから引き出されます。または必要に応じて作成され、適切なプールに追加されます。認識される値は、truefalseyes 、および no です。
Reset Pooled Connections, ResetConnections, ResetPooledConnectionstrueping とリセットが、プールされた接続が戻る前にサーバに送信されるべきか特定します。リセットによって接続がより速く開くことはなく、また一時テーブルなどのセッション アイテムが消去されることもありません。
Cache Server Configuration, CacheServerConfiguration, CacheServerConfigfalseサーバ変数が、プールされた接続が戻る時に更新されるべきか特定します。これを構成すると、接続がより速く開きますが、同時に他の接続によるサーバの変更を捉えられなくなります。

ブール変数を必要とするキーワードまたは接続プーリング値を設定する時、'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();
  }
  

24.2.3.4. MySqlDataAdapter の使用

データセットを満たし、MySQL データベースの更新に使用されるデータ コマンドのセットとデータベース接続を表します。このクラスを継承することはできません。

MySQLDataAdapter は、データの引き出しと保存のため、System.Data.DataSet と MySQL 間のブリッジの役割をはたします。MySQLDataAdapter は、データソースに対して適切な SQL 文を使用し、DataSet 内のデータをデータソースのデータと一致するように変える DbDataAdapter.Fill と、データソースのデータを DataSet のデータと一致するように変える DbDataAdapter.Update をマッピングすることによってこのブリッジを供給します。

MySQLDataAdapterDataSet をファイルする時、戻されたデータに必要なテーブルとカラムがまだない場合は、それらを作成します。ただし、プライマリ キー情報は、System.Data.MissingSchemaAction プロパティが System.Data.MissingSchemaAction.AddWithKey に設定にされていない限り、明示的に作成されたスキーマには含まれません。また、MySQLDataAdapter が、プライマリ キー情報を含む DataSet のスキーマを、System.Data.Common.DbDataAdapter.FillSchema を使用してデータとファイルする前に作成することもあります。

MySQLDataAdapter は、MySqlConnectionMySqlCommand の関連付けに使用され、MySQL データベースに接続する際のパフォーマンスを向上します。

MySQLDataAdapter はまた、データのロードおよび更新を促進する MySqlDataAdapter.SelectCommandMySqlDataAdapter.InsertCommandMySqlDataAdapter.DeleteCommandMySqlDataAdapter.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;
}
  
24.2.3.4.1. クラス MySqlDataAdapter コンストラクタ

MySqlDataAdapter のオーバーロード メソッド

MySqlDataAdapter クラスの新規インスタンスを初期化します。

MySqlDataAdapter のインスタンスが作成される際、赤/白のプロパティが以下の初期値に設定されます。

プロパティ 初期値
MissingMappingActionMissingMappingAction.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;
}  
24.2.3.4.2. クラス MySqlDataAdapter コンストラクタ 形式 1

関連する MySqlCommand オブジェクトで、 MySqlDataAdapter クラスの新規インスタンスを SelectCommand プロパティとして初期化します。

パラメータ : SELECT 文、またはストアドプロシージャである MySqlCommand と、MySqlDataAdapterSelectCommand プロパティとして設定された MySqlCommand

MySqlDataAdapter のインスタンスが作成される際、赤/白のプロパティが以下の初期値に設定されます。

プロパティ 初期値
MissingMappingActionMissingMappingAction.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;
}  
24.2.3.4.3. クラス MySqlDataAdapter コンストラクタ 形式 2

SelectCommandMySqlConnection オブジェクトで、 MySqlDataAdapter クラスの新規インスタンスを初期化します。

パラメータ :MySqlDataAdapterSelectCommand プロパティによって使用される、SQL SELECT 文またはストアド プロシージャである String

パラメータ :接続を表す MySqlConnection

この MySqlDataAdapter の実装は、MySqlConnection を、まだ開いていなければ開閉します。これは、ふたつ以上の MySqlDataAdapter オブジェクトに対して DbDataAdapter.Fill を呼び出す必要のあるアプリケーションでも使用できます。MySqlConnection がすでに開いている場合、閉じるには MySqlConnection.Close または MySqlConnection.Dispose を明示的に呼び出す必要があります。

MySqlDataAdapter のインスタンスが作成される際、赤/白のプロパティが以下の初期値に設定されます。

プロパティ 初期値
MissingMappingActionMissingMappingAction.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;
}  
24.2.3.4.4. クラス MySqlDataAdapter コンストラクタ 形式 3

SelectCommand と 接続ストリングで、 MySqlDataAdapter クラスの新規インスタンスを初期化します。

パラメータ :MySqlDataAdapterSelectCommand プロパティよって使用される、SQL SELECT 文またはストアド プロシージャである string

パラメータ : 接続ストリング

MySqlDataAdapter のインスタンスが作成される際、赤/白のプロパティが以下の初期値に設定されます。

プロパティ 初期値
MissingMappingActionMissingMappingAction.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;
}  
24.2.3.4.5. DeleteCommand

データセットのレコードを削除するための 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 を作成し、SelectCommandDeleteCommand プロパティを設定します。ここでは、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;
}
24.2.3.4.6. InsertCommand

データ セットにレコードを挿入するための 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 を作成し、SelectCommandInsertCommand プロパティを設定します。ここでは、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;
}
24.2.3.4.7. UpdateCommand

データ ソース内のレコードの更新に使用される 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 を作成し、SelectCommandUpdateCommand プロパティを設定します。ここでは、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;
}
24.2.3.4.8. SelectCommand

データ ソース内のレコードの選択に使用される SQL 文またはストアド プロシージャを取得または設定します。

値 :System.Data.Common.DbDataAdapter.Fill 中に、DataSet に格納するレコードをデータベースから選択するための MySqlCommand

SelectCommand が作成済みの SelectCommand に割り当てられた場合、MySqlCommand のクローンは作成されません。SelectCommand は、作成済みの MySqlCommand オブジェクトへの参照を維持します。

SelectCommand が行を戻さない場合、DataSet にテーブルは追加されず、例外も発生しません。

以下の例は MySqlDataAdapter を作成し、SelectCommandInsertCommand プロパティを設定します。ここでは、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;
}

24.2.3.5. MySqlDataReader の使用

MySQLDataReader を作成するには、コンストラクタを直接使用するのではなく、MySqlCommand オブジェクトの MySqlCommand.ExecuteReader メソッドを呼び出す必要があります。

MySqlDataReader が使用されている間、関連する MySqlConnectionMySqlDataReader への供給に忙しく、MySqlConnection で、閉じる以外の作業を行うことはできません。MySqlDataReaderMySqlDataReader.Close メソッドが呼び出されるまでは、その状態が続きます。

MySqlDataReader を閉じた後に呼び出せるプロパティは、MySqlDataReader.IsClosed および MySqlDataReader.RecordsAffected のみです。RecordsAffected プロパティは、MySqlDataReader が存在する間はいつでもアクセスすることが可能ですが、RecordsAffected の値を戻す前はいつも Close を呼び出し、戻り値が正確であるようにしてください。

適切にパフォーマンスを行うために、MySqlDataReader は不要なオブジェクトの作成や、不必要なデータのコピーを作ることを避けます。結果として、MySqlDataReader.GetValue をはじめとするメソッドへの複数のセルが、同じオブジェクトへ参照を返します。GetValue などのメソッドによって戻されたオブジェクトの、基礎となる値を改変している場合は、十分に注意してください。

次は、MySqlConnectionMySqlCommand 、そして 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();
 }
  
24.2.3.5.1. GetBytes

GetBytes は、フィールドで使用可能なバイトの数を戻します。ほとんどの場合、これはフィールドの長さと同じになります。ただし、フィールドからバイトを得るために GetBytes がすでに使用されている場合は、戻された数がフィールドの実際の長さより少ない場合があります。例えば、MySqlDataReader が大規模なデータ構造をバッファに読み込んでいる場合も、そのケースに当てはまる可能性があります。詳細は、MySqlCommand.CommandBehaviorSequentialAccess 設定を参照してください。

ヌル リファレンス ( Visual Basic では Nothing ) であるバッファを渡す場合は、GetBytes がフィールドの長さをバイトで戻します。

変換は行われません。そのため、取り出されたデータはすでにバイト列である必要があります。

24.2.3.5.2. GetTimeSpan

指定したカラムの値を TimeSpan オブジェクトとして取得します。

パラメータ : カラムの 0 から始まる序数。

戻り値 : 指定したカラムの値。

24.2.3.5.3. GetDateTime

指定したカラムの値を System.DateTime オブジェクトとして取得します。

注意

MySQL は、日付カラムが値 '0000-00-00' を、日付時刻カラムが値 '0000-00-00 00:00:00' を受け入れるのを許可します。DateTime 構造はこれらの値を含んだり、また表したりすることはできません。ゼロ値を含む可能性のあるカラムから日付時刻値を読み取るには、GetMySqlDateTime を使用します。このメソッドを使ってゼロ日付時刻カラムを読み取る動作は、ZeroDateTimeBehavior 接続ストリング オプションによって定義されます。このオプションの詳細は、MySqlConnection.ConnectionString を参照してください。

パラメータ : カラムの 0 から始まる序数。

戻り値 : 指定したカラムの値。

24.2.3.5.4. GetMySqlDateTime

指定したカラムの値を MySql.Data.Types.MySqlDateTime オブジェクトとして取得します。

パラメータ : カラムの 0 から始まる序数。

戻り値 : 指定したカラムの値。

24.2.3.5.5. GetString

指定したカラムの値を String オブジェクトとして取得します。

パラメータ : カラムの 0 から始まる序数。

戻り値 : 指定したカラムの値。

24.2.3.5.6. GetDecimal

指定したカラムの値を Decimal オブジェクトとして取得します。

パラメータ : カラムの 0 から始まる序数。

戻り値 : 指定したカラムの値。

24.2.3.5.7. GetDouble

指定したカラムの値を倍精度浮動小数点として取得します。

パラメータ : カラムの 0 から始まる序数。

戻り値 : 指定したカラムの値。

24.2.3.5.8. GetFloat

指定したカラムの値を単精度浮動小数点として取得します。

パラメータ : カラムの 0 から始まる序数。

戻り値 : 指定したカラムの値。

24.2.3.5.9. GetGiud

指定したカラムの値をグローバル一意識別子 (GUID) として取得します。

パラメータ : カラムの 0 から始まる序数。

戻り値 : 指定したカラムの値。

24.2.3.5.10. GetInt16

指定したカラムの値を 16 ビット符号付き整数として取得します。

パラメータ : カラムの 0 から始まる序数。

戻り値 : 指定したカラムの値。

24.2.3.5.11. GetInt32

指定したカラムの値を 32 ビット符号付き整数として取得します。

パラメータ : カラムの 0 から始まる序数。

戻り値 : 指定したカラムの値。

24.2.3.5.12. GetInt64

指定したカラムの値を 64 ビット符号付き整数として取得します。

パラメータ : カラムの 0 から始まる序数。

戻り値 : 指定したカラムの値。

24.2.3.5.13. GetUInt16

指定したカラムの値を 16 ビット符号なし整数として取得します。

パラメータ : カラムの 0 から始まる序数。

戻り値 : 指定したカラムの値。

24.2.3.5.14. GetUInt32

指定したカラムの値を 32 ビット符号なし整数として取得します。

パラメータ : カラムの 0 から始まる序数。

戻り値 : 指定したカラムの値。

24.2.3.5.15. GetUInt64

指定したカラムの値を 64 ビット符号なし整数として取得します。

パラメータ : カラムの 0 から始まる序数。

戻り値 : 指定したカラムの値。

24.2.3.6. MySqlException の使用

このクラスは、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 );
   }
}
  

24.2.3.7. MySqlParameter の使用

パラメータ名の大文字と小文字は区別されません。

次の例は MySqlDataAdapter 内の MySqlParameterCollection コレクションを介して、MySqlParameter の複数のインスタンスを作成します。これらのパラメータはデータ ソースからデータを選択し、DataSet にそのデータを格納するために使用されます。この例は、DataSetMySqlDataAdapter が、適切なスキーマ、コマンド、および接続ですでに作成されているという前提に基づいています。

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

24.2.3.8. MySqlParameterCollection の使用

コレクション内のパラメータの数は、コマンド テキスト内のパラメータ プレースホルダの数、または生成される例外の数と同じでなければなりません。

次の例は MySqlDataAdapter 内の MySqlParameterCollection コレクションを介して、MySqlParameter の複数のインスタンスを作成します。これらのパラメータはデータ ソース内のデータを選択し、DataSet にそのデータを格納するために使用されます。このコード、DataSetMySqlDataAdapter が、適切なスキーマ、コマンド、および接続ですでに作成されているという前提に基づいています。

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

24.2.3.9. MySqlTransaction の使用

MySQL データベース内で作成される SQL トランザクションを表示。このクラスを継承することはできません。

アプリケーションは、MySqlConnection オブジェクト上で MySqlConnection.BeginTransaction を呼び出すことによって、MySqlTransaction オブジェクトを作成します。トランザクションに関連するすべての後続の操作 ( 例えば、トランザクションのコミットまたはアボート ) は、MySqlTransaction オブジェクト上で行われます。

次は、MySqlConnectionMySqlTransaction を作成する例です。MySqlConnection.BeginTransactionMySqlTransaction.CommitMySqlTransaction.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();
    }
}
  
24.2.3.9.1. Rollback

ロールバックは保留状態からのトランザクションです。

Rollback メソッドは、MySQL ステートメント ROLLBACK に相当します。トランザクションは、保留状態からのみロールバックできます ( BeginTransaction が呼び出された後、かつ Commit が呼び出される前 ) 。

次は、MySqlConnectionMySqlTransaction を作成する例です。MySqlConnection.BeginTransactionCommitRollback の各メソッドの使い方も示します。

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

データベースのトランザクションをコミットします。

Commit メソッドは、MySQL ステートメント COMMIT に相当します。

次は、MySqlConnectionMySqlTransaction を作成する例です。MySqlConnection.BeginTransactionCommitRollback の各メソッドの使い方も示します。

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

24.2.4. Connector/NET に関する注記とヒント

このセクションでは、BLOB 処理、日付処理、そして Crystal Reports などの基本的なツールを使った Connector/NET の使用などを含む、Connector/NET のより一般的な使い方の例について説明します。

24.2.4.1. Connector/NET を使用した MySQL への接続

24.2.4.1.1. はじめに

.NET アプリケーションと MySQL サーバの間のすべてのアプリケーションは、MySqlConnection オブジェクトを通して経路指定されます。アプリケーションがサーバと交信できるようになる前に、MySqlConnection オブジェクトはインスタンスが作成され、構成され、開かれていなければなりません。

MySqlHelper クラスを使用している時でも、MySqlConnection オブジェクトはヘルパー クラスによって作成されます。

このセクションでは、MySqlConnection オブジェクトを使用して MySQL に接続する方法を説明します。

24.2.4.1.2. 接続ストリングの作成

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 。エイリアスには hostData SourceDataSourceAddressAddrNetwork Address がある。

  • Uid:接続に使用する MySQL ユーザ アカウント。エイリアスには User IdUsernameUser name がある。

  • Pwd:使用されている MySQL アカウントのパスワード。エイリアス Password も使用できる。

  • Database:すべてのステートメントが適用されるデフォルトのデータベース。デフォルトは mysql 。エイリアス Initial Catalog も使用できる。

  • Port:MySQL が接続の監視に使用するポート。デフォルトは 3306 。この値を -1 に指定して名前付きパイプ接続を使用する。

24.2.4.1.3. 接続を開く

接続ストリングを作成すると、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.

24.2.4.1.4. 接続エラーの処理

外部サーバへの接続は予測不可能であるため、各 .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
);

24.2.4.2. プリペアド ステートメントで Connector/NET を使用する

24.2.4.2.1. はじめに

MySQL 4.1 から、Connector/NET でプリペアド ステートメントが使用できるようになりました。プリペアド ステートメントの使用により、一度以上実行されるクエリの性能が大きく改善されました。

準備された実行は、基本的にクエリの解析が一度だけなので、一度以上実行されるステートメントの実行を、直接実行するより素早く行います。直接実行の場合、クエリは実行のたびに解析されます。準備された実行はまた、実行のたびにパラメータにデータを送るだけで済むので、ネットワークの通信料を減らす効果があります。

プリペアド ステートメントの他の利点は、クライアントとサーバ間のデータ伝達をより効果的にするバイナリ プロトコルを使用していることです。

24.2.4.2.2. 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

24.2.4.3. Connector/NET のストアド プロシージャにアクセスする

24.2.4.3.1. はじめに

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 ディレクトリでご覧いただけます。

24.2.4.3.2. Connector/NET からストアド プロシージャを作成する

MySQL のストアド プロシージャは、様々なツールを使用して作成することができます。まず、ストアド プロシージャは mysql コマンドラインのクライアントを使って作成できます。次に、MySQL Query Browser GUI クライアントでも作成できます。最後に、MySqlCommand オブジェクトの .ExecuteNonQuery メソッドでも作成することができます :

Visual Basic 例 :

Overloads Public Sub New()

C# 例 :

public MySqlConnection();

Connector/NET でストアド プロシージャを作成する際、コマンドラインや GUI クライアントとは異なり、特別な区切り符号を指定する必要がないのも特筆するべき点です。

24.2.4.3.3. Connector/NET からストアド プロシージャを呼び出す

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 プロパティを使って、出力パラメータの値を取り出すことができます。

24.2.4.4. Connector/NET で BLOB データを処理する

24.2.4.4.1. はじめに

MySQL の一般的な使い方のひとつに、BLOB カラムのバイナリ データの保管があります。MySQL は 4 種類の BLOB データタイプをサポートしています :TINYBLOBBLOBMEDIUMBLOB 、および LONGBLOB

BLOB カラムに保管されたデータには、Connector/NET を使ってアクセスすることができ、クライアント側コードで操作することができます。BLOB データで Connector/NET を使用するための特別な条件はありません。

簡単なコードの例は、このセクションに記載されています。アプリケーションの完全なサンプルは、Connector/NET インストレーションの Samples ディレクトリでご覧いただけます。

24.2.4.4.2. MySQL サーバの作成

まず最初に、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 オプションを、適切な設定に調節します。値を調節したら、Apply Changes ボタンをクリックし、MySQL Administrator の Service Control 画面でサーバを再起動します。また、my.cnf ファイルで直接この値を変えることもできます ( max_allowed_packet=xxM を読み取るラインを加える ) 。MySQL 内の SET max_allowed_packet=xxM; シンタックスを使用しても値を調節できます。

BLOB データの転送には時間がかかることがあるので、max_allowed_packet の設定は慎重に行ってください。使用目的に適した値を設定し、必要に応じて値を上げるようにしてください。

24.2.4.4.3. データベースへのファイルの書き込み

データベースへファイルを書き込むには、ファイルをバイト列に変換し、そしてそのバイト列を 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 テーブルに挿入されます。

24.2.4.4.4. データベースの BLOB をディスクのファイルに読み出す

フィールドが 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 メソッドを使用すると、エラーを防ぐことができます。

24.2.4.5. Crystal Reports で Connector/NET を使用する

24.2.4.5.1. はじめに

Crystal Reports は Windows アプリケーション開発者が使用する一般的なツールで、レポートとドキュメントの生成を行います。このセクションでは、MySQL および Connector/NET との Crystal Reports XI の使用方法を説明します。

24.2.4.5.2. データソースの作成

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 からダウンロードすることができます。

24.2.4.5.3. レポートの作成

ほとんどの目的において、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 オプションのチェックを外してください。これによって、保存されたデータがアプリケーション内のデータのロードを妨げるのを防ぎます。

24.2.4.5.4. レポートの表示

レポートを表示するには、まずレポートに必要なデータをデータセットに移植し、そしてレポートをロード、データセットに結合させます。最後に、レポートを 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 がクライアント側でテーブル同士を結合させる必要があり、保存済みのデータセットを使用するより遅くなるため、性能上の問題があります。

24.2.4.6. Connector/NET で日付時間情報を処理する

24.2.4.6.1. はじめに

MySQL と .NET 言語の日付時間情報の処理は異なり、MySQL は '0000-00-00 00:00:00' のような、.NET データ タイプでは表せない日付も使用することができます。適切に処理を行わなければ、この違いによって問題が起きることがあります。

このセクションでは、Connector/NET を使用する場合の、日付時間情報の正しい処理の方法を説明します。

24.2.4.6.2. 無効な日付を使用する場合の問題

日付の処理の違いは、無効な日付を使用する開発者にとって問題の原因になりえます。無効な MySQL の日付を、NULL の日付を含む、ネイティブの .NET DateTime オブジェクトにロードすることはできません。

この問題により、無効な日付は System.ArgumentOutOfRangeException 例外の発生の原因になるので、.NET DataSet オブジェクトを MySqlDataAdapter クラスの Fill メソッドで作成することはできません。

24.2.4.6.3. 無効な日付の制限

日付の問題に対する最善の解決策は、ユーザの無効な日付の使用を制限することです。これはクライアント側、またはサーバ側で行えます。

クライアント側で無効な日付を制限するのは簡単で、データの処理に常に .NET DateTime クラスを使用するだけです。DateTime クラスは、データベース内の値も有効であることを確認し、有効な日付だけを許可します。この方法の欠点は、それぞれのアプリケーションが独自の日付の発行を行う必要があり、データベースの操作に .NET および .NET コードが使われている混合環境での使用が困難な点です。

MySQL 5.0.2 以降のユーザは、無効な日付値の使用を制限する、新しい traditional SQL モードを使用することができます。traditional SQL モードの使用に関する情報は、項4.2.6. 「SQL モード」 をご覧ください。

24.2.4.6.4. 無効な日付の処理

.NET アプリケーションでの無効な日付の使用は避けることが推奨されますが、MySqlDateTime データタイプを用いて無効な日付を使用することは可能です。

MySqlDateTime データタイプは、MySQL サーバでサポートされている日付値と同じものを適用しています。Connector/NET のデフォルト動作は、.NET DateTime オブジェクトを有効な日付値に戻し、エラーを無効な日付に返します。このデフォルトは、Connector/NET が無効な日付に MySqlDateTime オブジェクトを返すように改変できます。

無効な日付に MySqlDateTime を返すよう Connector/NET に指示するには、次のラインを接続ストリングに追加してください :

Allow Zero Datetime=True

MySqlDateTime クラスの使用には、依然として問題があることに注意してください。以下は既知の問題の一部です :

  1. 無効な日付のデータ構築は依然、エラーの原因になります ( 0000-00-00 などのゼロの日付ではこの問題は起こらない模様 ) 。

  2. ToString メソッドは、標準の MySQL の形式でフォーマットされた日付を戻します ( 例えば、2005-02-23 08:50:25 ) 。これは、.NET DateTime クラスの ToString 動作とは異なるものです。

  3. MySqlDateTime クラスは NULL の日付をサポートし、.NET DateTime クラスはこれをサポートしません。この差により、MySQLDateTime を DateTime に変換する時、最初に NULL を確認しておかなければエラーが発生します。

これは既知の問題であるため、有効な日付のみをアプリケーションで使用するのが最善の方法になります。

24.2.4.6.5. 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 値はデータセット内で作用し、特別な処理なしで結合してコントロールを形成することが可能です。

24.2.5. Connector/NET のサポート

Connector/NET の開発者は、ソフトウェア開発のプロセスにおいて、ユーザの声を大変貴重なものと考えています。Connector/NET が大切な機能を欠いているとお気づきになった場合、またはバグを発見し、バグ レポートを提出したい場合は、項1.7. 「質問またはバグの報告」 の指示をお読みください。

24.2.5.1. Connector/NET のコミュニティー支援

  • Connector/NET のコミュニティー支援は、http://forums.mysql.com のフォーラムで得ることができます。

  • また、Connector/NET のコミュニティー支援を、http://lists.mysql.com のメーリング リストを介して得ることも可能です。

  • MySQL AB では有料サポートも提供しています。その他の情報は http://dev.mysql.com/support/ でご覧いただけます。

24.2.5.2. Connector/NET の不具合またはバグのレポート

Connector/NET に不具合や問題があった場合は、Connector/NET コミュニティー 項24.2.5.1. 「Connector/NET のコミュニティー支援」 にご連絡ください。

まず最初に、mysql クライアント プログラムか、admndemo からの同じ SQL 文やコマンドを実行してみてください。エラーが Connector/NET か MySQL で発生しているものか調べることができます。

問題をレポートする際は、メールに次の情報をご記入いただくと参考になります。

  • オペレーション システムとバージョン

  • Connector/NET のバージョン

  • MySQL サーバのバージョン

  • エラー メッセージ、または他の想定外のアウトプットのコピー。

  • 簡単な再現可能サンプル

詳しい詳細を提供していただくのが問題解決には一番ですので、その旨をご理解ください。

バグの問題と思われる場合は、http://bugs.mysql.com/ からバグをレポートするようお願いします。

24.2.5.3. Connector/ODBC 変更履歴

Connector/NET Change History ( Changelog ) は、MySQL のメイン Changelog に収められています。項C.3. 「Connector/NET Change History」 参照。

24.3. MySQL Visual Studio プラグイン

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 にも制限付きで適応します。

24.3.1. MySQL Visual Studio プラグインのインストール

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 ファイルを右クリックし、 Install を選択します。インストールの手順は次の通りです。

  1. 標準の Welcome ダイアログが開きます。Next をクリックし、インストールを続けます。

  2. License agreement (GNU GPL) ウィンドウが開きます。契約に合意し、Next をクリックして次に進みます。

  3. 移動先フォルダを指定するダイアログが開きます。ここで、MySQL Visual Studio プラグインがインストールされるフォルダを指定できます。デフォルトの移動先フォルダは %ProgramFilesDir%\MySQL\MySQL DDEX Data Provider で、%ProgramFilesDir% がインストールするマシンの Program Files フォルダになります。移動先フォルダを選択したら、Next をクリックして次に進みます。

  4. インストーラが、インストールの確認を求めます。Install をクリックしてインストールを開始してください。

  5. インストールが開始します。この段階の最後に、Visual Studio コマンド テーブルが再構築されます ( このプロセスの完了には数分間かかります) 。

  6. インストールが完了したら、Finish ボタンをクリックしてインストールを終了します。

MySQL Visual Studio プラグインをアンインストールする場合は、Control Panel の Add/Remove Programs コンポーネントか、同じ MSI パッケージを使用す ることができます。Remove オプションを選択すると、プロバイダは自動的にアンインストールされます。

プロバイダを修復するには、MSI パッケージを右クリックし、 Repair オプションを選択。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 コマンド テーブルを再構築します。

24.3.2. MySQL サーバとの接続の作成

MySQL Visual Studio プラグインをインストールし終えたら、MySQL データベースとの接続を作成、変更、削除することができます。MySQL データベースとの接続を作成するには、次の手順を実行してください。

  1. Visual Studio 2005 を開始し、View メニューから Server Explorer オプションを選択して、Server Explorer ウィンドウを開きます。

  2. Data Connections ノードを右クリックして、Add Connection ボタンを選択します。

  3. Add Connection ダイアログが開きます。Change ボタンを押して、MySQL Database をデータソースに指定します。

  4. Change Data Source ダイアログが開きます。データソースの中から MySQL Database を選び ( MySQL Database がない場合はother オプションを選択 ) 、データ プロバイダの選択情報から .NET Framework Data Provider for MySQL を選択します。

    データソースの選択

    OK を押して、選択を確認します。

  5. 接続設定を入力します。サーバホスト名 ( 例えば、MySQL サーバがローカル マシンにインストールされる場合は localhost ) 、ユーザ名、パスワード、およびデフォルト データベース スキーマ。接続する際にはデフォルト スキーマ名の指定が必要になるので注意してください。

    接続プロパティの設定
  6. Advanced ボタンを押すと、MySQL サーバの接続に使用するポートを設定することもできます。MySQL サーバとの接続をテストするには、サーバホスト名、ユーザ名、パスワードを設定し、Test Connection ボタンを押します。テストが失敗した場合は、入力した接続値が正しいか、ユーザとその MySQL サーバでの権限が設定されているか確認してください。

  7. すべての設定をセットし、接続をテストして問題がなければ OK を押します。新しく作成された接続は、Server Explorer に表示されます。これで、標準 Server Explorer インターフェースを通して MySQL サーバを使用することができます。

接続が正常に稼動したら、すべての接続設定は保存されます。次回また Visual Studio を開くと、MySQL サーバへの接続が Server Explorer に表示されるので、また MySQL サーバへ接続することができます。

接続を変更または削除する場合は、Server Explorer コンテキスト メニューを使用してノードに対応します。現行の値を新しいものに上書きするだけで、設定を変更できます。接続の変更・削除は、そのオブジェクトのエディタが開いていない時に行うよう注意してください。データが失われる恐れがあります。

24.3.3. MySQL Visual Studio プラグインの使用

MySQL Visual Studio プラグインを利用して MySQL サーバを使用するには、Visual Studio 2005 を立ち上げ、Server Explorer を開き、必要な接続を選択します。MySQL Visual Studio プラグインの作業エリアは3つの構成になっています。

DDEX 環境
  • データベース オブジェクト ( テーブル、ビュー、内臓ルーチン、トリガ、ユーザ定義関数 ) が Server Explorer のツリーに表示されます。ここでは、オブジェクトを選択し、プロパティと定義を変更することができます。

  • 選択したデータベース オブジェクトのプロパティは、Properties パネルに表示されます。プロパティのいくつかは、このウィンドウから直接変更できます。

  • 編集パネルから、SQL 文や特定のオブジェクトの定義に直接アクセスすることができます。例えば、ストアド プロシージャ定義内の SQL 文もこのパネルで表示・変更できます。

24.3.3.1. テーブルの編集

Table Editor には、Server Explorer のテーブルタイプ ノードからマウス操作でアクセスすることができます。新しいテーブルを作成するには、Table ノード ( 接続ノード下 ) を右クリックし、コンテキスト メニューから Create Table コマンドを選択します。現存のテーブルを編集するには、変更したいテーブルのノードをダブル クリックするか、同じノードを右クリックしてコンテキスト メニューから Alter 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 データベース内の対象オブジェクトのアップデート承認を求める確認ダイアログが表示されます。

24.3.3.1.1. Column Editor

Column Editor を使用して、テーブル カラムの名称やデータ タイプ、デフォルト値、その他のプロパティを設定・変更することができます。各カラムのプロパティを設定するには、マウスでカラムを選択します。または、Tab キーと Shift+Tab を使ってグリッドからグリッドへ移動する方法もあります。

  • カラムの名称やデータ タイプ、デフォルト値、コメントを設定および変更するには、該当のセルを選択し、値を編集します。

  • フラグ型カラムのプロパティ ( 例 : プライマリ キー、NOT NULL 、自動インクリメントのもの、フラグ ) を設定または設定解除するには、該当するチェックボックスをチェック、または未チェックにします。使用可能なカラム フラグはカラムのデータ タイプによって違うので注意してください。

  • カラムやインデックス カラム、または外部キー カラムの順序変更を Column Editor で行うには、カラム グリッドの左側にあるセレクタ カラムをクリックして、順序変更をしたいカラム全体を選択します。次に、Ctrl+Up ( カラムを上に移動 ) や Ctrl+Down ( カラムを下に移動 ) キーを使ってカラムを移動させます。

  • カラムを削除するには、カラム グリッドの左側にあるカラム セレクタをクリックし、キーボードの Delete ボタンを押します。

24.3.3.1.2. Indexes タブ

インデックスの管理は Indexes タブを介して行われます。

  • インデックスを加えるには、+ ボタンを押し、右側の Index Settings グループ ボックスでプロパティを設定します。インデックスの名称、種類、タイプ、インデックス カラムのセットを設定することができます。

  • インデックスを取り除くには、リストから対象のインデックスを選び、- ボタンを押します。

  • インデックスの設定を変更するには、対象のインデックスをリストから選択、インデックスの詳細情報は Index Settings パネルに表示されます。

テーブル カラムをドラッグ アンド ドロップでインデックス カラムにすることはできません。その代わり、テーブルに新しいインデックス カラムを加え、Indexes タブ内に埋め込まれたエディタを使ってそれらのテーブル カラムをセットできます。

24.3.3.1.3. Foreign Keys タブ

Foreign Key の管理は、Foreign Keys タブを介して行われます。

  • 外部キーを加えるには、+ ボタンを押し、Foreign Keys Settings パネルでプロパティを設定します。外部キーの名称、参照されるテーブルの名称、外部キー コラムと、更新と削除動作の設定をすることができます。

  • 外部キーを取り除くには、該当の外部キーを選び、- ボタンを押します。

  • 外部キーの設定を変更するには、該当の外部キーを選択し、Foreign Keys Settings パネルを使ってプロパティを変更します。

  • 外部キーが変更されたら、MySQL Visual Studio プラグインがふたつの照会を形成します。第1の照会は変更されたキーの除去を、第2の照会は新しい値の再作成を確認をします。この動作は、Bug#8377Bug#8919 を回避するためのものです。

注意

変更された値がなんらかの理由で矛盾し、第2の照会の失敗の原因となった場合は、影響のあるすべての外部キーが除去されます。その場合、MySQL VIsual Studio プラグインは Table Editor 内にそれらのキーを新規としてマークするので、あとで再作成する必要があります。しかし、Table Editor を保存せずに閉じると、それらの外部キーは失われます。

24.3.3.1.4. Column Details タブ

Column Details タブはカラム オプションの設定に使用できます。Column Editor に表示されるメイン カラム プロパティに加え、Column Details タブでふたつの追加のプロパティ オプション、キャラクタセットと照合順序が設定できます。

24.3.3.1.5. Table Properties ウィンドウ

テーブル オプションと高度オプションはすべて同じタブにあります。すべてのテーブル オプションは、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

これらのプロパティのいくつかは任意のテキスト値を設定することができ、その他は事前定義セットからの値を受け入れます。

SchemaServer のプロパティは読み取り専用です。

24.3.3.2. テーブル データの編集

Table Data Editor では、テーブルのデータの参照、作成、編集ができます。Table Data Editor は自動作成カラム付きの簡単なデータ グリッドとして実行されます。

Table Data Editor へアクセスするには、テーブルを提示しているノードか、Server Explorer のビューを右クリックします。ノードのコンテキスト メニューから、BrowseEdit Data コマンドを選択します。テーブルと更新可能なビューでは、このコマンドが編集モードで Table Data Editor を開きます。更新不可能なビューでは、このコマンドは読み取り専用モードで Table Data Editor を開きます。

編集モードの場合、表示されたテーブルの内容を直接変えることで、テーブル データを変更することができます。横列を追加するには、グリッドの最後列で希望の値を設定します。値を変更するには、適切なセルに新しい値を入力します。横列を削除するには、グリッド左側のセレクタ カラムをクリックして対象列を選択し、Delete ボタンを押します。

Table Editor での変更を保存するには、Visual Studio のメイン ツールバーにある Save または Save All ボタンを使うか、Ctrl+S を押してください。確認ダイアログが、変更をデータベースに保存するか確認します。

24.3.3.3. ビューの編集

新しいビューを作成するには、Server Explorer の接続ノード下の View ノードを右クリックします。ノードのコンテキスト メニューから、Create View コマンドを選択します。このコマンドで SQL Editor が開きます。

現存のビューを編集するには、変更したいビューのノードをダブル クリックするか、同じノードを右クリックしてコンテキスト メニューから Alter Table コマンドを選択します。どちらのコマンドでも SQL Editor を開くことができます。

SQL Editor を使ってビュー定義を作成・変更するには、SQL Editor に適切な SQL 文を入力します。

注意

定義文のみを入力し、CREATE VIEW AS 序文は除外してください。

他のすべてのビュー プロパティは Properties ウィンドウで設定できます。それらのプロパティは以下です。

  • Algorithm

  • Check Option

  • Definer

  • Name

  • Security Type

これらのプロパティのいくつかは任意のテキスト値を設定することができ、その他は事前定義セットからの値を受け入れます。

Is UpdatableSchemaServer プロパティは読み出し専用です。

変更を保存するには、Visual Studio のメイン ツールバーにある Save または Save All ボタンを使うか、Ctrl+S を押してください。確認ダイアログが、変更をデータベースに保存するか確認します。

24.3.3.4. ストアド プロシージャとファンクションの編集

新しいストアド プロシージャを作成するには、Server Explorer の接続ノード下の Stored Procedures ノードを右クリックします。ノードのコンテキスト メニューから、Create Routine コマンドを選択します。このコマンドで SQL Editor が開きます。

新しいストアド プロシージャを作成するには、Server Explorer の接続ノード下の Functions ノードを右クリックします。ノードのコンテキスト メニューから、Create Routine コマンドを選択します。

現存の内臓ルーチンを編集するには ( プロシージャまたはファンクション ) 、変更したいルーチンのノードをダブル クリックするか、同じノードを右クリックしてコンテキスト メニューから Alter Routine コマンドを選択します。どちらのコマンドでも SQL Editor を開くことができます。

SQL Editor を使ってルーチン定義を作成・変更するには、標準 SQL を使用して SQL Editor にこの定義を入力します。

他のすべてのルーチン プロパティは Properties ウィンドウで設定できます。それらのプロパティは以下です。

  • Comment

  • Data Access

  • Definer

  • Is Deterministic

  • Security Type

これらのプロパティのいくつかは任意のテキスト値を設定することができ、その他は事前定義セットからの値を受け入れます。

また、標準 CREATE PROCEDURECREATE FUNCTION 文を使用して、すべてのオプションを SQL Editor から直接設定することができます。しかしそれよりも、Properties ウィンドウの使用をお勧めします。

注意

ルーチン定義には決して CREATE 序文を加えないでください。

Properties ウィンドウの NameSchemaServer プロパティは読み出し専用です。SQL エディタでプロシージャ名を設定または変更してください。

変更を保存するには、Visual Studio のメイン ツールバーにある Save または Save All ボタンを使うか、Ctrl+S を押してください。確認ダイアログが、変更をデータベースに保存するか確認します。

24.3.3.5. トリガの編集

新しいトリガを作成するには、トリガを新たに加えたいテーブルのノードを右クリックします。ノードのコンテキスト メニューから、Create Trigger コマンドを選択します。このコマンドで SQL Editor が開きます。

現存のトリガを編集するには、変更したいトリガのノードをダブル クリックするか、同じノードを右クリックしてコンテキスト メニューから Alter Trigger コマンドを選択します。どちらのコマンドでも SQL Editor を開くことができます。

SQL Editor を使ってトリガ定義を作成・変更するには、標準 SQL を使用して SQL Editor にトリガ文を入力します。

注意

FOR EACH ROW 句の後にある CREATE TRIGGER 問い合わせの一部の、トリガ文のみを入力してください。

他のすべてのトリガ プロパティは Properties ウィンドウで設定できます。それらのプロパティは以下です。

  • Definer

  • Event Manipulation

  • Name

  • Timing

これらのプロパティのいくつかは任意のテキスト値を設定することができ、その他は事前定義セットからの値を受け入れます。

Properties ウィンドウの Event TableSchemaServer プロパティは読み出し専用です。

変更を保存するには、Visual Studio のメイン ツールバーにある Save または Save All ボタンを使うか、Ctrl+S を押してください。確認ダイアログが、変更をデータベースに保存するか確認します。

24.3.3.6. ユーザ定義関数 ( UDF ) の編集

新しいユーザ定義関数 ( UDF ) を作成するには、Server Explorer の接続ノード下の UDFs ノードを右クリックします。ノードのコンテキスト メニューから、Create UDF コマンドを選択します。このコマンドで UDF Editor が開きます。

現存の UDF を編集するには、変更したい UDF のノードをダブル クリックするか、同じノードを右クリックしてコンテキスト メニューから Alter UDF コマンドを選択します。どちらのコマンドでも UDF Editor を開くことができます。

UDF エディタでは、プロパティ パネルを介して次のプロパティを設定することができます。

  • Name

  • So-name (DLL name)

  • Return type

  • Is Aggregate

Properties ウィンドウの Server プロパティは読み出し専用です。

変更を保存するには、Visual Studio のメイン ツールバーにある Save または Save All ボタンを使うか、Ctrl+S を押してください。確認ダイアログが、変更をデータベースに保存するか確認します。

24.3.3.7. データベース オブジェクトの削除

テーブル、ビュー、内臓ルーチン、トリガ、UDF は各コンテキスト メニューからの適切な Drop コマンド、Drop TableDrop ViewDrop RoutineDrop TriggerDrop UDF で削除することができます。

確認ダイアログが、対象の削除問い合わせを実行するか確認を求めます。

複数のオブジェクトの削除はサポートされていません。

24.3.3.8. データベース オブジェクトの複製

テーブル、ビュー、内臓ルーチン、ファンクションは各コンテキスト メニューからの、適切な Clone コマンド、Clone TableClone ViewClone Routine で複製することができます。複製コマンドは新しいオブジェクトのために対応エディタを開きます。Table Editor はテーブルの複製、SQL Editor はビューまたはルーチンの複製に対応します。

変更を保存するには、Visual Studio のメイン ツールバーにある Save または Save All ボタンを使うか、Ctrl+S を押してください。確認ダイアログが、変更をデータベースに保存するか確認します。

24.3.4. Visual Studio プラグインのサポート

感想や、バグを発見した場合は、MySQL バグ トラッキング システム ( http://bugs.mysql.com ) から問題の報告や提案をお寄せください。

24.3.4.1. Visual Studio プラグイン FAQ

Questions

  • 24.3.4.1.1: 接続を作成する時に接続詳細を入力すると、接続ウィンドウが閉じてしまいます。

Questions and Answers

24.3.4.1.1: 接続を作成する時に接続詳細を入力すると、接続ウィンドウが閉じてしまいます。

Connector/NET 5.0.2. 以前のバージョンには問題があり、Connector/NET 1.0.x は作動しないと報告されています。それらのバージョンがインストールされている場合、またはそれ以前のバージョンからアップグレードした場合は、 Connector/NET を完全にアンインストールし、Connector/NET 5.0.2. をインストールしてください。

24.4. MySQL Connector/J

MySQL は、Java プログラム言語で開発されたクライアント アプリケーションに、JDBC ドライバを介する接続を提供しており、 それを MySQL Connector/J と呼びます。

MySQL Connector/J は JDBC-3.0 Type 4 ドライバで、純粋 Java です。JDBC 仕様のバージョン 3.0 を導入しており、また、MySQL プロトコルを仕様して MySQL サーバと直接通信を行います。

JDBC はそれのみで便利なものですが、このマニュアルの最初の数セクションを読んでみても理解しがたい場合は、無償 JDBC の使用は分かりやすい問題のみにとどめ、JDBC でしばしば必要になる反復作業や、より重要な作業には、 HibernateSpring's JDBC templates 、または Ibatis SQL Maps などの一般的なパーシステンス フレームワークを使用することをお薦めします。

このセクションは、JDBC の完全なチュートリアルとして書かれたものではありません。JDBC の使用に関するさらなる情報をお求めの場合は、次のオンライン チュートリアルにより詳しい情報が掲載されています:

  • JDBC Basics — JDBC の初級トピックを収録した、Sun からのチュートリアル。

  • JDBC Short Course — Sun と JGuru からの、より詳細なチュートリアル。

24.4.1. Connector/J バージョン

現在利用できる 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 バージョンすべてをカバーし、特定のオプションへの設定に関する注意を記載しています。

24.4.1.1. サポートされている Java のバージョン

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 では利用できません。

24.4.2. Connector/J のインストール

Connector/J パッケージのインストールは、バイナリ配布物かソース配布物を使用して行うことができます。バイナリ配布物の使用はより簡単なインストールの方法です。一方、ソース配布物を使用する場合は、インストールのより複雑なカスタマイズが可能になります。どちらの方法でも、Connector/J ロケーションを手動で Java CLASSPATH に追加する必要があります。

24.4.2.1. バイナリ配布物から Connector/J をインストールする

インストールの 2 種類の方法のうち、Connector/J パッケージの バイナリ配布物を使用する方法は極めて簡単です。バイナリ配布物は Tar/Gzip または Zip ファイルの状態で入手することができます。それをまず適当なロケーションに摘出し、オプションとして、CLASSPATH を変更することで、パッケージの情報を利用可能にします ( 項24.4.2.2. 「ドライバのインストールと CLASSPATH の構成」 参照 ) 。

MySQL Connector/J は、ソース、クラス ファイル、mysql-connector-java-[version]-bin.jar と名付けられた JAR アーカイブ、そして Connector/J 3.1.8 からは、mysql-connector-java-[version]-bin-g.jar と名付けられたファイルにあるドライバのデバッグ ビルドを含んだ、.zip または .tar.gz アーカイブとして配布されています。

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 アーカイブ フォーマットを理解するアプリケーション ) を使用する必要があります。

24.4.2.2. ドライバのインストールと CLASSPATH の構成

配布物アーカイブを摘出し終えたら、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

24.4.2.3. 旧バージョンからのアップデート

MySQL AB はアップデートの手順を可能な限り簡潔に保つよう努力しておりますが、どのソフトウェアでもあるように、新しい機能のサポート、現存の機能の改良、または新たな基準の実施などのために、新しいバージョンでは変更があることもあります。

このセクションでは、ユーザが Connector/J のバージョンをアップグレードする( または JDBC 機能に関連して、MySQL サーバを新バージョンにアップグレードする ) 際の注意を記述します。

24.4.2.3.1. MySQL Connector/J 3.0 から 3.1 へのアップグレード

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 として取り出すことができます。また、これはどんなタイムゾーン変換の使用も除外し、そのためドライバは noDatetimeStringSyncuseTimezone を同時に有効にすることを拒否しますのでご注意ください。

  • 新しい 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.jar と名付けられたファイルのドライバのデバッグ ビルドは、mysql-connector-java-[version]-bin.jar という名の通常バイナリの jar ファイルに沿って出荷されます。

    Connector/J 3.1.9 からは、.class ファイルを細分化された状態では出荷しなくなり、それらはドライバと出荷する JAR アーカイブでのみ利用できます。

    ドライバのデバッグ ビルドは実稼動環境で実行するようには設計されておらず、使用するとパフォーマンスに悪影響が出るため、問題やバグを MySQL AB に報告する際に指示されない限り使用しないでください。また、デバッグ バイナリは、Connector/J 配布物に添付された src/lib/aspectjrt.jar ファイルにある、Aspect/J ランタイム ライブラリに依存します。

24.4.2.3.2. MySQL サーバ 4.1 以降へのアップグレードに際する JDBC の問題
  • 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

24.4.2.4. 開発ソースツリーからのインストール

注意 :  当社の新しいコードのテストにご興味がおありの場合は、このセクションをお読みください。単に 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 の特定のブランチを確認し、コンパイルするには、次の手順に従ってください :

  1. この資料の作成時点では、Connector/J のアクティブ ブランチは 3 つあります :branch_3_0branch_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 が作成されます。

  2. connector-j ディレクトリにロケーションを変更し、現行の作業ディレクトリにします :

    shell> cd connector-j
  3. 次のコマンドを発行して、ドライバをコンパイルし、インストールに適した .jar ファイルを作成 :

    shell> ant dist

    これで、現行ディレクトリに build ディレクトリが作成され、すべてのビルドの出力先になります。構築に使用しているソースのバージョン番号を含む build ディレクトリに、ディレクトリが作成されます。このディレクトリはソース、コンパイルされた .class ファイル、そして開発に適した .jar ファイルを含みます。完全にパッケージされた配布物を含む、他に可能性のあるターゲットには、次のコマンドを発行します :

    shell> ant --projecthelp
  4. 新たに作成された、JDBC ドライバを含む .jar ファイルは、ディレクトリ build/mysql-connector-java-[version] に配置されます。

    新たに作られた JDBC ドライバをインストールし、同時に、項24.4.2.2. 「ドライバのインストールと CLASSPATH の構成」 にある手順で MySQL からダウンロードしたバイナリ .jar ファイルをインストールします。

24.4.4. Connector/J (JDBC) の参考

このマニュアルの当セクションには、MySQL Connector/J の参考資料が記載されています。中には、Connector/J 構築プロセス中に自動的に生成されたものも含まれています。

24.4.4.1. Connector/J の Driver/Datasource クラス名、URL シンタックス、および構成プロパティ

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) 状態にある時にのみ起こります。ほとんどのアプリケーション サーバと接続プールは、毎回、トランザクション/接続の使用の最後に autoCommittrue に設定します。

フェイルオーバ機能は次の動作を行います :

  • 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 文字リテラル &amp; を使う必要があります。

次の表はプロパティの一覧です :

接続/認証. 

プロパティ名定義デフォルト値対応開始したバージョン
user接続のユーザ名義 すべて
password接続に使用するパスワード すべて
socketFactoryサーバにソケット接続を作成するのに、ドライバが使用するべきクラスの名称。このクラスは、インターフェイス 'com.mysql.jdbc.SocketFactory' を実行し、パブリック no-args コンストラクタを有する必要があります。com.mysql.jdbc.StandardSocketFactory3.0.3
connectTimeoutソケット接続のタイムアウト ( ミリ秒単位 ) 。0 はタイムアウト無し。JDK-1.4 以降でのみ有効。デフォルトで '0' になります。03.0.1
socketTimeoutネットワーク ソケット動作のタイムアウト ( デフォルトの 0 ではタイムアウト無し ) 。03.0.1
useConfigsURL の解析、またはユーザ指定プロパティの適用の前に、構成プロパティのコンマ区切りのリストをロード。これらの構成は、資料の ' 構成 ' で説明されています。 3.1.5
interactiveClientWAIT_TIMEOUT でなく INTERACTIVE_TIMEOUT を基に、MySQL にタイムアウトを指示する CLIENT_INTERACTIVE フラグを設定。false3.1.0
propertiesTransform接続を試みる前にドライバに渡される URL プロパティの改変に、ドライバが使用する com.mysql.jdbc.ConnectionPropertiesTransform の実行。 3.1.4
useCompressionサーバとの交信中に zlib 圧縮を使用 (true/false) ? デフォルトで 'false' になる。false3.0.17

高可用性とクラスタ. 

プロパティ名定義デフォルト値対応開始したバージョン
autoReconnectドライバは膠着した接続、および/または切断された接続の再確立を試みますか ? 有効になれば、ドライバは停滞または切断された接続で発行された、現行のトランザクションに属するクエリに例外を投入しますが、接続の試みは、新たなトランザクションでの接続で発行される次のクエリの前に行います。この機能の使用は、アプリケーションが SQLExceptions プロパティを扱わない場合、セッション状態とデータの一貫性に対する副次的な悪影響をひきおこします。また、切断され停滞した接続プロパティの結果として、SQLExceptions を扱うアプリケーションを構築できない時にのみ使用するよう設計されているため、利用はお勧めできません。他の方法として、MySQL サーバ変数 "wait_timeout" を、デフォルトの 8 時間でなく、高い値にすることが考えられます。false1.1
autoReconnectForPools接続プールに適した再接続の手段を使用 ( デフォルトで 'false' になる ) 。false3.1.3
failOverReadOnlyautoReconnect モードでフェイルオーバが起こる場合、接続は 'read-only' に設定しますか ?true3.0.12
reconnectAtTxEndautoReconnect が true に設定されている場合、ドライバは毎トランザクションの最後に再接続を試みますか ?false3.0.10
roundRobinLoadBalanceautoReconnect が有効で、failoverReadonly が false の場合、ラウンドロビン方式で接続するホストを選びますか ?false3.1.2
queriesBeforeRetryMasterフェイルオーバが起きた際、マスタへフォールバックする前に発行されるクエリの数 ( マルチ ホストのフェイルオーバを使用する場合 ) 。'queriesBeforeRetryMaster' または 'secondsBeforeRetryMaster' の、先に条件に合った方がマスタへの接続を促します。デフォルトで 50 になります。503.0.2
secondsBeforeRetryMasterフェイルオーバが起こる時、ドライバがマスタ サーバへの接続を試みるまでの待機時間は ? 'queriesBeforeRetryMaster' または 'secondsBeforeRetryMaster' の、先に条件に合った方がマスタへの接続を促します。時間は秒単位で、デフォルトで 30 になります。303.0.2
enableDeprecatedAutoreconnect自動再接続機能は、バージョン 3.2 からは使用停止になり、バージョン 3.3 では削除予定。このプロパティを 'true' に設定し、構成中の機能のチェックを無効にします。false3.2.1
resourceIdURL で使用されているホスト名からドライバが値を判断できない場合に、XAResource.isSameRM() に使用される、このデータソースまたはコネクションが接続されているソースを特定する大域的に一意な名称。 5.0.1

セキュリティ. 

プロパティ名定義デフォルト値対応開始したバージョン
allowMultiQueriesひとつのステートメントの間で、複数のクエリを区切るために ';' の使用を可能にします (true/false 、デフォルトの 'false' になる )false3.1.1
useSSLサーバとの通信中に SSL を使用 ( true/false ) 。デフォルトの false' になります。false3.0.2
requireSSLuseSSL=true の場合、SSL 接続は必須 ? ( デフォルトの 'false' になる ) 。false3.1.0
allowUrlInLocalInfileドライバは 'LOAD DATA LOCAL INFILE' ステートメントで URL を許可しますか ?false3.1.4
paranoidエラーメッセージに機密情報が表示されるのを防ぐ対策を取り、可能な場合は機密データを持つデータ構造を消去しますか ? ( デフォルトの 'false' になる )false3.0.1

性能拡張. 

プロパティ名定義デフォルト値対応開始したバージョン
metadataCacheSizecacheResultSetMetaData が 'true' に設定されている場合の、cacheResultSetMetadata へのクエリの数 ( デフォルトは 50 ) 。503.1.1
prepStmtCacheSizeプリペアド ステートメントのキャッシングが有効な場合に、キャッシュされるプリペアド ステートメントの数は ?253.0.10
prepStmtCacheSqlLimitステートメントのキャッシングが有効な場合、ドライバが解析をキャッシュする最大の SQL は ?2563.0.10
useCursorFetchステートメント上の MySQL > 5.0.2 、および setFetchSize() > 0 に接続している場合、そのステートメントは行の取り出しにカーソル ベースのフェッチを使用しますか ?false5.0.0
blobSendChunkSizeServerPreparedStatements を介して BLOB/CLOB を送る時に使用するチャンク。10485763.1.9
cacheCallableStmtsドライバは CallableStatements の解析過程をキャッシュしますか ?false3.1.2
cachePrepStmtsドライバは、クライアント側プリペアド ステートメントの PreparedStatements 、サーバ側プリペアドの適合性の "check" 、そしてサーバ側プリペアド ステートメントそのものの解析過程をキャッシュしますか ?false3.0.10
cacheResultSetMetadataドライバは Statements および PreparedStatements の ResultSetMetaData をキャッシュしますか ? ( Req. JDK-1.4+ 、true/false 、デフォルトは 'false' )false3.1.1
cacheServerConfigurationドライバは、毎 URL ベースで 'SHOW VARIABLES' および 'SHOW COLLATION' の結果をキャッシュしますか ?false3.1.5
defaultFetchSizeドライバはこの値を使用して、新しく作成されたステートメントのすべてで setFetchSize(n) を呼び出します。03.1.9
dontTrackOpenResourcesJDBC の仕様は、ドライバが自動的にリソースを追跡し閉じることを必須としていますが、もしアプリケーションがステートメントまたは結果セットで上手く close() を明示的に呼び出せていない場合は、これがメモリ リークの原因になることがあります。このプロパティを true に設定することで、その制約を緩和することができ、アプリケーションによってはメモリ効率を上げることにもなります。false3.1.7
dynamicCalendarsデフォルトのカレンダーが必要な場合、ドライバはそれを取り出す、または 毎接続/セッションでキャッシュしますか ?false3.1.5
elideSetAutoCommitsMySQL-4.1 以降を使用している場合、サーバの状態が Connection.setAutoCommit(boolean) の要求した状態と合わない時に、ドライバは 'set autocommit=n' クエリのみを発行しますか ?false3.1.3
holdResultsOpenOverStatementCloseJDBC 仕様で要求されているように、ドライバは Statement.close() で結果セットを閉じますか ?false3.1.7
locatorFetchBufferSize'emulateLocators' が 'true' に構成されている場合、getBinaryInputStream の BLOB データをフェッチする時に使用するバッファのサイズは ?10485763.2.1
rewriteBatchedStatementsexecuteBatch() が呼び出された時に、ドライバは多値インサートへの INSERT のために、プリペアド ステートメントの書き換えをすると共に、マルチクエリを ( "allowMultiQueries" の設定に関係なく ) 使用しますか ? 普通の java.sql.Statements を使用していて、コードがインプットを正しくサニタイズしない場合、これは SQL インジェクションになりえることをご留意ください。プリペアド ステートメントでは、サーバ側プリペアド ステートメントは現在この書き換えオプションを利用できません。また、PreparedStatement.set*Stream() の使用時にストリーム長を指定していない場合、ドライバはバッチ当たりのパラメータの適した数を判断することができず、結果パケットが大きすぎるというエラーが出るおそれがあるので注意してください。これらの書き換えられたステートメントの Statement.getGeneratedKeys() は、全体のバッチが INSERT 文を含む場合にしか作動しません。false3.1.13
useFastIntParsing過剰なオブジェクトの作成を避けるために内部 String->Integer 変換ルーチンを使用 ?true3.1.4
useJvmCharsetConverters1 バイト文字セットをテーブルのルックアップ表を使用するより、JVM に組み込まれた文字エンコード ルーチンを常に使用する ? ( このデフォルトである "true" は、より新しい JVM に適しています )true5.0.1
useLocalSessionStateドライバは、データベースを問い合わせるより、Connection.setAutoCommit() および Connection.setTransactionIsolation() によって設定された、自動コミットとトランザクションの隔離の内部値を参照しますか ?false3.1.7
useReadAheadInputサーバから読み取る時、より新しい、最適化された非ブロッキングの、バッファされた入力ストリームを使用 ?true3.1.5

デバッグ/プロファイリング. 

プロパティ名定義デフォルト値対応開始したバージョン
loggerメッセージのログ先として使用される 'com.mysql.jdbc.log.Log' を実行するクラスの名称 ( デフォルトは 'com.mysql.jdbc.log.StandardLogger' で、STDERR にログ ) 。com.mysql.jdbc.log.StandardLogger3.1.1
profileSQLデフォルトの false になる構成されたロガ (true/false) へのクエリとその実行/フェッチ時間を追跡。false3.1.0
reportMetricsIntervalMillis'gatherPerfMetrics' が有効な場合のログの頻度は ( ミリ秒単位 ) ?300003.1.2
maxQuerySizeToLogプロファイリングまたはトレースの際に記録されるクエリの最大長/サイズを制御。20483.1.3
packetDebugBufferSize'enablePacketDebug' が true の場合に、保留するパケットの最大数。203.1.3
slowQueryThresholdMillis'logSlowQueries' が有効な場合、クエリが 'slow' と記録されるまでの長さは ( ミリ秒単位 ) ?20003.1.2
useUsageAdvisorドライバは、適切で効果的な JDBC および MySQL Connector/J の使用を忠告する 'usage' 警告をログに発行しますか ( true/false 、デフォルトの 'false' になる ) ?false3.1.1
autoGenerateTestcaseScriptドライバは、サーバ側プリペアド ステートメントを含む、実行中の SQL を STDERR へダンプしますか ?false3.1.9
dumpMetadataOnColumnNotFoundドライバは、ResultSet.findColumn() が履行に失敗した場合、結果セットのフィールドレベル メタデータを例外メッセージにダンプしますか ?false3.1.13
dumpQueriesOnExceptionドライバは、サーバに送られたクエリの内容を、SQLExceptions のメッセージにダンプしますか ?false3.1.3
enablePacketDebug有効な場合、'packetDebugBufferSize' パケットのリングバッファは維持され、ドライバのコードの重要エリアに例外が投入される際にダンプされます。false3.1.3
explainSlowQueries'logSlowQueries' が有効な場合、ドライバは自動的にサーバに 'EXPLAIN' を発行し、WARN レベルで結果を構成されたログに送りますか ?false3.1.2
logSlowQueries'slowQueryThresholdMillis' より長くかかるクエリを記録しますか ?false3.1.2
traceProtocolトレース レベル ネットワーク プロトコルを記録しますか ?false3.1.2

その他. 

プロパティ名定義デフォルト値対応開始したバージョン
useUnicodeドライバは、ストリングを扱う際、Unicode 文字エンコードを使用しますか ? ドライバが文字セットのマッピングを識別できない、または、MySQL が元来サポートしない文字セット ( 例えば UTF-8 ) を使用するために、ドライバの 'force' を試みる場合にのみに使用する ? true/false 、デフォルトの 'true' になります。true1.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 値を許容しますか ?false3.1.5
autoClosePStmtStreamsドライバは、set*() メソッドを介して引数として渡される .close() を、ストリーム/リーダとして自動的呼び出しますか ?false3.1.12
autoDeserializeドライバは、BLOB フィールドに保管されたオブジェクトを、自動的に検出してデシリアル化しますか ?false3.1.5
capitalizeTypeNamesDatabaseMetaData でタイプ名を大文字にしますか ? ( 通常は WebObjects を使用している場合にのみ有効、true/false 、デフォルトの 'false' になる )false2.0.7
clobCharacterEncoding構成された接続 characterEncoding の代わりに、TEXT 、MEDIUMTEXT 、および LONGTEXT 値の送信と引き出しに使用する文字エンコード。 5.0.0
clobberStreamingResultsこれによって、'streaming' ResultSet は自動的に閉じられ、すべてのデータをサーバから読み取る前に他のクエリが実行された場合、まだサーバからストリーミングが続いている未決のデータは破棄されます。false3.0.9
continueBatchOnErrorひとつのステートメントが履行に失敗した場合、ドライバはバッチ コマンドの処理を続けますか ? JDBC 仕様はどちらも許可 ( デフォルトの 'true' になる ) 。true3.0.3
createDatabaseIfNotExistURL で提供されるデータベースがまだなければ作成。構成されたユーザはデータベース作成の許可を取っているものとします。false3.1.9
emptyStringsConvertToZeroドライバは、殻のストリング フィールドから '0' の数値への変換を許可しますか ?true3.1.8
emulateLocatorsN/Afalse3.1.0
emulateUnsupportedPstmtsドライバは、サーバにサポートされていないプリペアド ステートメントを検出し、それらをクライアント側のエミュレートされたバージョンに置き換えますか ?true3.1.7
ignoreNonTxTablesロールバックの非トランザクション テーブル警告を無視しますか ? ( デフォルトの 'false' になる )false3.0.9
jdbcCompliantTruncation警告をサポートするサーバに接続する場合 ( MySQL 4.1.0 以降 ) 、JDBC 仕様で要求されるようにデータがトランザクションされる時に、ドライバは java.sql.DataTruncation 例外を投入しますか ?true3.1.2
maxRows返す行の最大数 ( デフォルトの 0 は、すべての行を返します ) 。-1all versions
noAccessToProcedureBodiesCallableStatements のプロシージャ パラメータ タイプを識別する際に、接続しているユーザが "SHOW CREATE PROCEDURE" を介してプロシージャ本体にアクセスできない場合、または mysql.proc で選択できない場合、ドライバは例外を投入する代わりに、基本メタデータ ( INOUT VARCHAR としてレポートされたすべてのパラメータ ) を作成しますか ?false5.0.3
noDatetimeStringSyncResultSet.getDatetimeType().toString().equals(ResultSet.getString()) を確立しません。false3.1.7
noTimezoneConversionForTimeType'useTimezone'='true' の場合、サーバ時間帯を使って TIME 値を変換しません。false5.0.0
nullCatalogMeansCurrentDatabaseMetadataMethods が 'catalog' パラメータを要求する際、値 null は現在のカタログを使用するという意味ですか ? ( これは JDBC 対応ではありませんが、前バージョンのドライバ旧来の動作に従っています )true3.1.8
nullNamePatternMatchesAll*pattern パラメータを受け付ける DatabaseMetaData メソッドは、null を '%' と同様に扱いますか ? ( これは JDBC 対応ではありませんが、旧バージョンのドライバは、仕様からこれを受け入れます )true3.1.8
overrideSupportsIntegrityEnhancementFacilityドライバは、外部キーのシグナル サポートに "true" を戻すアプリケーションを避けるために、DatabaseMetaData.supportsIntegrityEnhancementFacility() に "true" を戻しますか ? データベースはこの関数をサポートしておらず、SQL 仕様はこの機能が外部キーのサポート以上のものを含んでいると示しています。そのような回避アプリケーションのひとつには Openoffice があります。false3.1.12
pedantic例外なく JDBC 仕様に従います。false3.0.0
pinGlobalTxToPhysicalConnectionXAConnections を使用する時、ドライバは、与えられた XID 上の作業が常に同じ物理接続に送られるよう確認するべきですか ? これは、"XA END" が呼び出された後、XAConnection が "XA START ... JOIN" をサポートするのを許可します。false5.0.1
processEscapeCodesForPrepStmtsドライバは、準備されたクエリのエスケープ コードを処理しますか ?true3.1.12
relaxAutoCommitドライバが接続する MySQL のバージョンがトランザクションをサポートしない場合でも、commit() 、 rollback() 、および setAutoCommit() への呼び出しを許可しますか ( true/false 、デフォルトの 'false' になる ) ?false2.0.13
retainStatementAfterResultSetCloseドライバは、ResultSet.close() が呼び出された後、ResultSet の Statement リファレンス を保持しますか ? JDBC-4.0 以降では、これは JDBC 対応ではありません )false3.1.11
rollbackOnPooledCloseプール内の理論接続が閉じられた後、ドライバは rollback() を発行しますか ?true3.0.15
runningCTS13Sun の JDBC 適応性テストスイート バージョン 1.3 のバグの回避を有効にします。false3.1.7
serverTimezonetimezone の検出/マッピングをオーバーライドします。サーバからの timezone が Java timezone にマップしない場合に使用されます。 3.0.2
strictFloatingPoint適合テストの旧バージョンでのみ使用。false3.0.0
strictUpdatesドライバは更新可能な結果セットに厳密なチェック ( 選択されたすべてのプライマリ キー ) を行いますか ( true 、false 、デフォルトの 'true' になる ) ?true3.0.4
tinyInt1isBitドライバは datatype TINYINT(1) を BIT タイプとして扱いますか ( テーブルを作成する時にサーバが BIT -> TINYINT(1) を暗黙的に変換するため ) ?true3.0.16
transformedBitIsBooleanドライバが TINYINT(1) を他のタイプに変換する場合、MySQL-5.0 は BIT タイプを持っているので、今後の MySQL-5.0 との互換性のため、BIT でなく BOOLEAN を使用しますか ?false3.1.9
ultraDevHackUltraDev が破損しており、prepareCall() for _all_ statements を発行するため、必要な場合は、prepareCall() に PreparedStatements を作成しますか ? ( true/false 、デフォルトの 'false' になる )false2.0.3
useGmtMillisForDatetimesDate と Timestamp のインスタンスを作成する前に、セッション timezone と GMT 間を変換します ( "false" の値は旧来の動作、"true" はより JDBC 対応の動作を起こします ) 。false3.1.12
useHostsInPrivilegesDatabaseMetaData.getColumn/TablePrivileges() でユーザに '@hostname' を加えます (true/false) 。デフォルトの 'true' になります 。true3.0.2
useInformationSchemaMySQL-5.0.7 以降に接続する場合、ドライバは DatabaseMetaData をを使って DatabaseMetaData に使用されている情報を引き出しますか ?false5.0.0
useJDBCCompliantTimezoneShiftjava.util.Calendar 引数を取るそれらの JDBC 引数の、TIME/TIMESTAMP/DATETIME 値の timezone 情報を変換する時、ドライバは JDBC 対応 ルールを使用しますか ? ( このオプションは "useTimezone=true" 構成オプション専用です )false5.0.0
useOldAliasMetadataBehaviorドライバは、カラムおよびテーブルの "AS" 句に旧来の動作を使用し、エイリアス ( もしあれば ) を、元のカラム/テーブル名でなく、ResultSetMetaData.getColumnName() または ResultSetMetaData.getTableName() にのみ戻しますか ?true5.0.4
useOldUTF8Behavior4.0 以前のサーバと交信している時、ドライバが行った UTF-8 動作を使用。false3.1.6
useOnlyServerErrorMessagesサーバが戻したエラー メッセージに、'standard' SQLState エラー メッセージを付加しません。true3.0.15
useServerPrepStmtsサーバがサポートする場合は、サーバ側プリペアド ステートメントを使用しますか ? ( デフォルトの 'true' になる ).true3.1.0
useSqlStateCodes'legacy' X/Open/SQL 状態コードでなく、SQL Standard 状態コードを使用 (true/false) 。デフォルトは 'true' 。true3.1.3
useStreamLengthsInPrepStmtsPreparedStatement/ResultSet.setXXXStream() メソッド コールでストリーム長パラメータを引き受けます (true/false 、デフォルトの 'true' になる )?true3.0.2
useTimezoneクライアントとサーバの timezone 間の時間/日付タイプを変換しますか (true/false 、デフォルトの 'false' になる ) ?false3.0.2
useUnbufferedInputサーバからのデータ読み取りに BufferedInputStream を使用しません。true3.0.11
yearIsDateTypeJDBC ドライバは MySQL タイプ "YEAR" を、java.sql.Date または SHORT として扱いますか ?true3.1.9
zeroDateTimeBehaviorドライバが、すべてゼロで構成された DATETIME 値 ( 無効な日付を表すために MySQL で使用される ) に遭遇した時のリアクションは ?有効値は 'exception' 、'round' 、および 'convertToNull' 。exception3.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 のコード例を使用して、独自のソケット ファクトリを作成することができます。

24.4.4.2. JDBC API 実装についての注記

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 以降に接続している時にサポートされるようになりました。現在は、CallableStatementgetParameterMetaData() メソッドはサポートされていません。

  • 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()" は無効です。

24.4.4.3. Java 、JDBC および MySQL のタイプ

MySQL Connector/J は、MySQL データタイプと Java データタイプ間の変換の扱い方に柔軟に対応します。

丸めやオーバフロー、もしくは精度の損失がおこることはありますが、一般的に、どんな MySQL データタイプでも java.lang.String に変換することが可能で、また、いかなる数値タイプも Java 数値タイプに自由に変換することができます。

Connector/J 3.1.0 からは、プロパティ jdbcCompliantTruncationfalse に設定して接続の構成に使用し、その動作を規制しない限り、JDBC ドライバは JDBC 仕様で要求される通り警告を発行、もしくは DataTruncation 例外を投入します。

常に作動が保証されている変換は、次の表の通りです :

接続プロパティ - その他. 

これらの MySQL データタイプは常時以下の Java タイプへの変換が可能
CHAR, VARCHAR, BLOB, TEXT, ENUM, and SETjava.lang.String, java.io.InputStream, java.io.Reader, java.sql.Blob, java.sql.Clob
FLOAT, REAL, DOUBLE PRECISION, NUMERIC, DECIMAL, TINYINT, SMALLINT, MEDIUMINT, INTEGER, BIGINTjava.lang.String, java.lang.Short, java.lang.Integer, java.lang.Long, java.lang.Double, java.math.BigDecimal
DATE, TIME, DATETIME, TIMESTAMPjava.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 から )BITjava.lang.Boolean
BIT( > 1) ( MySQL-5.0 から )BITbyte[]
TINYINTTINYINTjava.lang.Boolean 構成プロパティ tinyInt1isBittrue ( デフォルト ) に設定され、格納サイズが 1 の場合。それ以外では java.lang.Integer
BOOL, BOOLEANTINYINT上記 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)]FLOATjava.lang.Float
DOUBLE[(M,B)]DOUBLEjava.lang.Double
DECIMAL[(M[,D])]DECIMALjava.math.BigDecimal
DATEDATEjava.sql.Date
DATETIMEDATETIMEjava.sql.Timestamp
TIMESTAMP[(M)]TIMESTAMPjava.sql.Timestamp
TIMETIMEjava.sql.Time
YEAR[(2|4)]YEARyearIsDateType 構成プロパティが false に設定されている場合、戻されるオブジェクトのタイプは java.sql.Short 。true ( デフォルト ) の場合のオブジェクト タイプは java.sql.Date ( 日付設定は 1 月 1 日の深夜まで ) 。
CHAR(M)CHARjava.lang.String ( カラムの文字セットが BINARY の場合は byte[] が戻される )
VARCHAR(M) [BINARY]VARCHARjava.lang.String ( カラムの文字セットが BINARY の場合は byte[] が戻される )
BINARY(M)BINARYbyte[]
VARBINARY(M)VARBINARYbyte[]
TINYBLOBTINYBLOBbyte[]
TINYTEXTVARCHARjava.lang.String
BLOBBLOBbyte[]
TEXTVARCHARjava.lang.String
MEDIUMBLOBMEDIUMBLOBbyte[]
MEDIUMTEXTVARCHARjava.lang.String
LONGBLOBLONGBLOBbyte[]
LONGTEXTVARCHARjava.lang.String
ENUM('value1','value2',...)CHARjava.lang.String
SET('value1','value2',...)CHARjava.lang.String

24.4.4.4. 文字セットと Unicode の使用

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 スタイル文字エンコード名
asciiUS-ASCII
big5Big5
gbkGBK
sjisSJIS (or Cp932 or MS932 for MySQL Server < 4.1.11)
cp932Cp932 or MS932 (MySQL Server > 4.1.11)
gb2312EUC_CN
ujisEUC_JP
euckrEUC_KR
latin1ISO8859_1
latin2ISO8859_2
greekISO8859_7
hebrewISO8859_8
cp866Cp866
tis620TIS620
cp1250Cp1250
cp1251Cp1251
cp1257Cp1257
macromanMacRoman
macceMacCentralEurope
utf8UTF-8
ucs2UnicodeBig

注意.  ドライバは文字セットの変更を検出できず、最初の接続セットアップで検出された文字セットを使い続けるため、Connector/J で 'set names' クエリを発行しないでください。

クライアントからの複数の文字セットの送信を許可するには、UTF-8 の使用が必要です。utf8 をデフォルトのサーバ文字セットとして構成するか、characterEncoding を通して UTF-8 を使用するよう JDBC ドライバを構成してください。

24.4.4.5. SSL を使用して安全に接続する

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 インスタンスでプロパティ useSSLtrue に設定して、MySQL Connector/J の接続パラメータで useSSLtrue に設定する必要があります。

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 接続を開きたい時に、何が作動していないか判断するのに便利です。

24.4.4.6. ReplicationConnection でマスタ/スレーブ複製を使用する

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");

     ....... } }

24.4.5. Connector/J に関する注記とヒント

24.4.5.1. JDBC の基本コンセプト

このセクションでは、JDBC の一般的な背景を説明します。

24.4.5.1.1. DriverManager インターフェイスを使用して MySQL に接続する

アプリケーション サーバの外で 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 が確立されたら、StatementPreparedStatement のオブジェクトの作成、そしてデータベースに関するメタデータの摘出に使用できます。これについては次のセクションで説明されます。

24.4.5.1.2. ステートメントを使用して SQL を実行する

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 、UPDATEINSERT 、もしくは DELETE 文の場合は false を返します。ステートメントが SELECT クエリの場合は、getResultSet() メソッドを呼び出すことで結果を摘出できます。ステートメントが UPDATEINSERT 、もしくは 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;
    }
}
24.4.5.1.3. CallableStatements を使用してストアド プロシージャを実行する

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 を使用すると、ResultSetMetaDataNULL を返す場合があります。

次の例は、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 で使用するには、次の手順に従ってください :

  1. 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() への不要な呼び出しを最小限に抑えてください。

  2. 出力パラメータ ( ある場合は ) を登録

    出力パラメータ( ストアド プロシージャの作成時に 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);
    ...
    

  3. 入力パラメータ ( ある場合は ) を設定

    入力および 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);
    
    ...

  4. 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
    
    ...

24.4.5.1.4. AUTO_INCREMENT カラム値の呼び出し

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 インスタンス上では使用できません。

24.4.5.2. J2EE および 他の Java フレームワークで Connector/J を使用する

このセクションでは、複数の状況での Connector/J の使用方法を説明します。

24.4.5.2.1. J2EE の一般的コンセプト

このセクションでは、Connector/J の使用に関連する J2EE コンセプトの一般的な背景を説明します。

24.4.5.2.1.1. 接続プーリングを理解する

接続プーリングは、すべてのスレッドが必要な接続をすぐに使用できるよう、接続のプールを作成し管理する方法です。

接続をプールするこの方法は、ほとんどのアプリケーションは、普通数ミリ秒で完遂できるトランザクションを積極的に処理している時に、スレッドが 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 のようなロード テスト スクリプトを作成し、アプリケーションをロード テストしてください。

開始ポイントを判断する簡単な方法は、接続プールの接続の最大数を非有界なるよう構成し、ロード テストを実行、同時に使用された接続の最大数を計ります。そこから逆に作業して、プールされた接続の最小、または最大のどんな値が、特定のアプリケーションに最高の性能を与えるか判断することができます。

24.4.5.2.2. Tomcat で Connector/J を使用する

次の指示は 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 &amp; 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 
24.4.5.2.3. JBoss で Connector/J を使用する

このインストラクションは 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> 

24.4.5.3. よくある問題と解決法

MySQL Connector/J のユーザがよく直面する問題がいくつかあります。このセクションでは、それらの兆候と解決法を説明します。

Questions

  • 24.4.5.3.1: MySQL Connector/J でデータベースに接続しようとすると、次の例外が出ます :

    SQLException: Server configuration denies access to data source
    SQLState: 08001
    VendorError: 0

    これはなんでしょうか ?MySQL コマンドライン クライアントとは問題なく接続できます。

  • 24.4.5.3.2: アプリケーションが SQLException 'No Suitable Driver' を投入するのですが、なぜでしょうか?

  • 24.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 
  • 24.4.5.3.4: 1 日は問題なく動くのですが、夜の間に停止してしまうサーブレット/アプリケーションがあります。

  • 24.4.5.3.5: JDBC-2.0 の更新可能な結果セットを使おうとすると、その結果セットは更新不可能という例外が出ます。

  • 24.4.5.3.6: Connector/J を使って MySQL サーバに接続できません。接続パラメータが間違っているようです。

Questions and Answers

24.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。

24.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 ドライバのロケーションが取り込まれていない。

24.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 ) 。

24.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 機能は廃止になり、今後のリリースでは除外される可能性があります。

24.4.5.3.5: JDBC-2.0 の更新可能な結果セットを使おうとすると、その結果セットは更新不可能という例外が出ます。

MySQL は行識別子を持たないため、MySQL Connector/J は、少なくともプライマリ キーをひとつ持つテーブルのクエリからの結果セットしか更新できず、クエリはすべてのプライマリ キーと、テーブルをひとつだけスパンすることができるクエリを選択する必要があります ( 結合はなし ) 。これは JDBC 仕様に概要があります。

この問題は更新可能な結果セットを使用する時にだけ起こり、Connector.J は、各行の一意な参照なしで更新される結果セット内の正しい行を特定することができるとは保証できません。WHERE 句を使って、整合される基準値をそれぞれ特定することのできるテーブルで UPDATE または DELETE 文を使用している場合、テーブルに一意的なフィールドを持つのための必須条件はありません。

24.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 をご覧ください。

24.4.6. Connector/J のサポート

24.4.6.1. Connector/J のコミュニティ支援

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 コミュニティサポート」 参照。

24.4.6.2. Connector/J のバグまたは不具合のレポート

通常のバグのレポートは、弊社のバグ データベース 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/ にアップロードします。

24.4.6.3. Connector/J 変更履歴

Connector/J Change History ( Changelog ) は、MySQL のメイン Changelog に収められています。項C.5. 「MySQL Connector/J Change History」 参照。

24.5. Connector/PHP

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」を参照してください。


powered by SEO.CUG.NET