データベース接続

データベースを使い始めるには,まず接続を開始する.ここでは,これをどのように行うかについて述べる.

DatabaseLink を使い始めたばかりの方は,このチュートリアルにある基本的な例題をいくつか試されるとよいだろう.また,お持ちのデータベースのドライバが DatabaseLink に含まれているかどうかについては「データベース接続:JDBC接続」を参照されたい.新しいドライバの追加方法についての詳細情報が記載されている.接続に名前を付ける方法については「データベース接続:名前付き接続」を参照されたい.

データベースの設定

DatabaseLink のユーザの多くは,接続して使いたいとデータベースがあるだろう.そのようなデータベースがある場合は,このドキュメントの手順をそのデータベースに合わせて変更して使うことができる.データベースがない場合は,DatabaseLink に含まれているHSQLDB,SQLite,H2,またはDerbyが利用できる.別の種類のデータベースを設定したいときは,そのデータベースについての情報を参照されたい.データベースを設定し終えたら,このドキュメントを使って接続方法が学べる.

接続の確立

このセクションの例を実際に試してみて,記載の通りに動作しなかった場合は,「データベースの例の使用」で述べているように"DatabaseLink`DatabaseExamples`"パッケージを使ってデータベースをもとの状態に戻す必要があるかもしれない.

OpenSQLConnection[name]名前付きSQLデータソースに接続する
OpenSQLConnection[JDBC[driver,url]]JDBCを使ってデータソースURLに接続する
OpenSQLConnection[args,opts]接続のオプションを設定する
OpenSQLConnection[]Connection Toolを使って接続を開始する
CloseSQLConnection[conn]接続を閉じる
SQLConnections[]SQL接続をリストする
SQLConnectionInformation[conn]SQL接続についての詳細情報
SQLConnectionOpenQ[conn]接続が開いているかどうかを,サーバに連絡することなく検証する
SQLConnectionUsableQ[conn]接続が利用可能であるかどうかを,サーバに連絡して検証する

データベース接続のための関数

DatabaseLink をロードする:

これで,ドキュメントのために DatabaseLink に含まれている名前付きデータベース demo に接続できる.新しい名前付き接続の設定方法については「データベースのリソース:接続設定」を,既存の名前付き接続については「データベース接続:名前付き接続」を参照のこと.

OpenSQLConnectionは,接続を参照するWolfram言語式を返す.これはデータベースにクエリを行うのに使える:

SQLConnectionsは開いている接続のリストを返す:

次の例では,データベース中の表が返される:

接続の使用が終ったら,CloseSQLConnectionで閉じる:

OpenSQLConnectionには数々のオプションが使える.

オプション名
デフォルト値
"Name"""接続名
"Description"""接続についてのテキストによる記述
"Username"""接続に使用するユーザ名
"Password"""接続に使用するパスワード
"Catalog"Automaticデータベースカタログの場所
"Properties"{}JDBCドライバに渡される,規則として表されたキーと値のペア
"ReadOnly"Automatic接続を読取り専用に設定する
"RelativePath"Falseデータベースの場所が(ファイルベースのデータベースについての)設定に相対的に指定されているかどうかを示す
"Timeout"$SQLTimeout演算のタイムアウト設定(秒)
"TransactionIsolationLevel"Automatic接続にトランザクション分離を設定する
"UseConnectionPool"Automatic管理されたプールから接続を開く

OpenSQLConnectionのオプション

これらのオプションは,接続を開始するときに使える.以下の例のようにすると,異なるユーザ名とパスワードが使える:

パスワードに"$Prompt"と入力すると,ダイアログボックスが開き,そこにパスワードを入力する.これにより,パスワード入力がより安全になる.

接続が開始したら,SetOptionsを使って特定のオプションを変更することができる.

"Catalog"データベースカタログの場所
"ReadOnly"読取り専用として開くかどうか
"TransactionIsolationLevel"トランザクション分離を加えるかどうか

接続後に変更できる接続オプション

データベースに読取り専用アクセスのみできるように接続を変更する.

TransactionIsolationLevelオプションについての詳細は「トランザクション:トランザクション分離」を参照されたい.

接続の情報

接続状態は関数SQLConnectionOpenQSQLConnectionUsableQを使って確認できる.

サンプルデータベースへの接続を開始する:

SQLConnectionOpenQは,接続がクライアント側でまだ有効であるかどうかを確認するが,データベースサーバとは通信を行わない:

SQLConnectionUsableQはデータベースサーバと通信を行い,接続でクエリが発生したかどうかを確認する:

接続についての詳細情報は,SQLConnectionInformationで取得できる.以下のようにして行う:

接続についての情報を取得する:

接続についての情報を,より整理された形で表示する:

JDBC接続

名前付きデータベース接続がない場合,明示的なJDBC設定を使ってデータベースに接続することができる.

このセクションの例を実際に試してみて,記載の通りに動作しなかった場合は,「データベースの例の使用」で述べているように"DatabaseLink`DatabaseExamples`"パッケージを使ってデータベースをもとの状態に戻す必要があるかもしれない.

JDBC[name,url]JDBC設定
JDBC[classname,url]明示的にドライバのクラス名を与えるJDBC設定
JDBCDriverNames[]可能なJDBCドライバの名前のリスト
JDBCDrivers[]すべてのJDBCドライバの詳細情報
JDBCDrivers[name]JDBCドライバ name の詳細情報

パッケージをロードする.

次にファイル$UserBaseDirectory/DatabaseResources/Examples/demoを使ってHSQLDBに接続を開始する.このように接続が開始できるのは,パッケージがHSQLDBへの接続にどのJDBCドライバを使うべきかを知っているからである.

JDBCDriverNamesコマンドは組込みドライバのリストを返す."HSQL(Standalone)"もこのリストに含まれているため,JDBCの引数に設定"HSQL(Standalone)"が使える.

JDBCDriversを使うと,すべての組込みドライバに関する詳細情報が得られる.

1つのドライバに関しての情報のみが必要な場合は,JDBCDriversにその名前を渡す.ドライバに設定されているプロトコルを確認すると,OpenSQLConnectionを使う手助けとなる.

組込みドライバの設定方法については「データベースのリソース」を参照のこと.

JDBCドライバのインストール

使用中のデータベースのドライバが DatabaseLink に含まれていない場合,JavaClassPathで返されるパスにドライバクラスファイルかjarファイルを置くことでインストールすることができる.例えば,Oracleデータベースは以下のどの場所にでも置くことができる.

$InstallationDirectory/SystemFiles/Links/DatabaseLink/Javaインストールレイアウト
$UserBaseDirectory/Applications/Oracle/Javaユーザスペース
$BaseDirectory/Applications/Oracle/Java共有スペース

JDBCドライバクラスファイルの可能な場所

DatabaseLink 自体にドライバを加えることの短所は,Wolframシステムをアップデートするとインストールを繰り返す必要があるということである.$UserBaseDirectory$BaseDirectoryにインストールしたものは,ソフトウェアをアップデートしても維持される.

アプリケーションのJavaサブディレクトリは自動的にクラスパス上になり,そこに置かれたドライバクラスファイルまたはjarファイルは DatabaseLink で使用できるようになる.同じ場所のDatabaseResourcesディレクトリは,「データベースのリソース」で述べたように,設定情報を置いておくのに便利な場所である.

クラスパス上にないドライバを使用したい場合,AddToClassPathを使ってドライバディレクトリをクラスパスに加えなければならない.

この設定は異なるWolfram言語セッション間では保持されないことに注意されたい.

ドライバクラスをインストールしたら,接続を開始することができる.引数のURLは,使用中のサーバ,ポート,およびデータベースの種類によって異なる.次の例では,上記の場所のいずれかインストールしたドライバを使ってOracleデータベースに接続する(実際には設定しない).使用するクラスとURL形式についてはJDBCドライバのドキュメントを参照のこと.

これはOpenSQLConnectionの最も詳しいバージョンである.過去に保存した情報を利用してもよい.この方法については「データベースのリソース」に記載されている.

ODBC接続

ODBC (Open Database Connectivity)は,SQLデータベースに接続する一般的な方法で,特にMicrosoft Windows等,多くのオペレーティングシステムでサポートされている.DatabaseLink にはODBC接続用のドライバ設定が含まれている.以下はODBCを使って例題用データベースに接続する例で,Windowsでのみ動作する.

このセクションの例を実際に試してみて,記載の通りに動作しなかった場合は,ODBCとJDBC-ODBCのAccessとExcelへの接続を容易にするMicrosoft Accessデータベースエンジン2010再頒布可能コンポーネントをインストールする必要がある可能性がある.

接続の設定

この例では,DatabaseLink パッケージ構造の中にあるサンプルデータベースファイルpublisher.accdbを使う.次の行を実行すると,ファイルの場所が分かる.

DatabaseLink の中のファイルを編集するのではなく,ファイルを別の場所にコピーすることが推奨される.コピー先の場所の例として,$UserBaseDirectoryの中のDatabaseResources/Examplesディレクトリ内が挙げられるる(まずこのディレクトリを作る必要があるかもしれない).このディレクトリの場所を見付けるには,以下を実行する.

publisher.accdbファイルはExamplesサブディレクトリの中にある.

ここでODBCコントロールパネルを使ってデータソースを登録する.これは通常Windowsコントロールパネル管理ツールにある.これを開くと,次のようなウィンドウが現れる.

1.gif

「追加」ボタンをクリックするとデータソースの新規作成ウィンドウが開く.

2.gif

Microsoft Access Driverを選び,「完了」をクリックする.ODBC Microsoft Accessセットアップウィンドウが開く.

3.gif

データソース名テキストフィールドに「publisher」と入力する.これはODBCが使用する名前となる.「選択」ボタンをクリックすると,publisher.accdbファイルを探して選択することができる.

4.gif

すべてのウィンドウで「OK」をクリックして,最後にコントロールパネルを閉じる.これで,publisherとそのドライバがODBCデータソースアドミニストレータウィンドウに現れる.

接続の使用

これで,設定したODBCデータソースに接続できる.DatabaseLink をロードし,ODBCデータソース publisher に接続する.これにはパッケージが設定したODBCドライバを使う.

代りに,Access専用のODBCドライバとAccessファイルへのパスを使うこともできる.この方法では,パッケージが設定したODBCソースが必要ない.

接続はデータベースのクエリに使用できる.

接続を閉じる.

名前付き接続

同じデータベースに頻繁にアクセスする必要がある場合は,接続に名前を付けて,その名前をOpenSQLConnectionで使うと便利なことがある.名前付き接続の設定方法の詳細は「データベースのリソース」を参照されたい.本セクションでは,どの名前付き接続が使用できるかについて述べる.

DataSourceNames[]すべての接続の名前のリスト
DataSources[]すべての名前付き接続の詳細情報
DataSources[name]接続 name の詳細情報

名前付き接続に使用する関数

パッケージをロードする.

名前付き接続をすべてリストする.他にも接続がインストールされている場合は,リストが以下の例より長くなる.

DataSourcesを使うと,すべての接続についての詳細情報が得られる.

DataSourcesに引数 name を渡すと,特定の1つの名前付き接続についての情報が得られる.

データベースのタイムアウト

一般に,データベース操作を行うときはサーバに接続するので,サーバ接続の際に生じる問題の可能性も考える必要がある.そのため,接続やクエリの実行等のデータベース操作に対するタイムアウトが用意されている.タイムアウトはグローバル変数$SQLTimeoutで設定する.

オプション名
デフォルト値
$SQLTimeoutAutomatic接続の開始およびクエリの実行の際のタイムアウト

データベース使用時のタイムアウトの指定

デフォルト値Automaticで,これはドライバに与えられたデフォルト値が使われることを意味する.

接続の例

このセクションでは,いくつかの接続コマンドを示し,どのように使うか説明する.

次の例では,ユーザtestで,組込みDrizzleドライバを使ってdatabasesという名前のコンピュータのポート1234で実行中のMySQLデータベースconn_testに接続する.

次も上の例と同じMySQLデータベースに接続するが,ドライバのクラス名com.drizzle.jdbc.DrizzleDriverを使う.

最初の例では,組込みのJDBC設定MySQL(Drizzle)を使用した.別の方法として,「データベースのリソース:JDBCの設定」に記載のように,カスタムのドライバ設定を与えることもできる.2つ目の例はDatabaseResources設定を必要としない.さらに,デフォルトの DatabaseLink レイアウトにはドライバクラスorg.drizzle.jdbc.DrizzleDriverがあるので,セッションのクラスパスを変更する必要がない.

明示的なJDBC指定を使った例を以下に示す.

メモリ内HSQLデータベースscratchpadへの接続を開く.

ディスク上SQLiteデータベースmasterへの読取り専用接続を,絶対パスを指定して開く.

localhostの3050で利用できるFirebirdデータベースoverflowへの接続を開く.指定にはデータベースファイルへのパスが必要である.

マシンのポート1521で利用できるOracleデータベースxeへの接続を開く.パスワード入力にはゲストアカウントとプロンプトを使用する.Oracleドライバ(今回はojdbc14.jar)の場所は/My/Driver/Directoryで,セッションのクラスパスに加えられる.

マシンmssql.domain.comのポート1433で利用できるSQL Serverデータベースステージングへの接続を開く.

マシンwarehouse.domain.orgのポート5432で利用できるPostgreSQLデータベースarchiveへの接続を開く.ドライバクラス名は明示的に与える.組込みの"PostgreSQL"設定または名前付きカスタム設定を与えてもよい.

マシン10.11.12.13のポート9092で利用できるH2データベースusersへの接続を開く.この例では,H2はサーバモードで実行される.

Derbyデータベースtransactionsへの接続を開く.その際,もしデータベースが存在しない場合は作成するように"Properties"オプションを使ってサーバに指示する.この例では,Derbyは埋込みモードで実行される.

組込みのAccessドライバを使ってMicrosoft Accessデータベースへの接続を開く.この際,データベースファイルへのパスを与える.

ドライバについての詳細情報は「データベース接続: JDBC接続」を参照されたい.

Connection Tool

Connection Toolはデータベースへの接続が簡単に開けるグラフィカルインターフェースツールである.これはコマンドOpenSQLConnection[]を実行して起動する.これについては「Database Explorer:Connection Tool」を参照されたい.