データベース接続
This feature is not supported on the Wolfram Cloud.

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

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

データベースの設定

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

接続の確立

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

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 をロードする:

In[1]:=
Click for copyable input

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

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

In[1]:=
Click for copyable input
Out[1]=

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

In[2]:=
Click for copyable input
Out[2]=

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

In[3]:=
Click for copyable input
Out[3]=

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

In[4]:=
Click for copyable input
In[5]:=
Click for copyable input
Out[5]=

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

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

OpenSQLConnectionのオプション

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

In[6]:=
Click for copyable input
Out[6]=
In[7]:=
Click for copyable input

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

In[8]:=
Click for copyable input
Out[8]=

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

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

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

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

In[9]:=
Click for copyable input
Out[9]=
In[10]:=
Click for copyable input
Out[10]=

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

接続の情報

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

In[11]:=
Click for copyable input

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

In[12]:=
Click for copyable input
Out[12]=

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

In[13]:=
Click for copyable input
Out[13]=

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

In[14]:=
Click for copyable input
Out[14]=
In[15]:=
Click for copyable input
Out[15]=

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

In[16]:=
Click for copyable input
Out[16]=

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

In[17]:=
Click for copyable input

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

In[18]:=
Click for copyable input
Out[18]//TableForm=

JDBC接続

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

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

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

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

In[19]:=
Click for copyable input

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

In[20]:=
Click for copyable input
Out[20]=
In[21]:=
Click for copyable input

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

In[22]:=
Click for copyable input
Out[22]=

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

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

In[23]:=
Click for copyable input
Out[23]=

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

DatabaseLink に含まれていないデータベースドライバを追加することもできる.ドライバはJavaクラスコレクションであり,J/Link が提供しているクラスを追加する標準の方法を使ってWolfram言語に加える必要がある.一般には,クラスファイルかjarファイルをWolfram言語のJavaサブディレクトリに追加する.可能な場所の一つに DatabaseLink の中があるが,Wolframシステムを更新した場合に新しくドライバをコピーしなければならないという問題もある.別の場所として,$UserBaseDirectoryまたは$BaseDirectoryの中のアプリケーションの中が挙げられる.この場所だと,ソフトウェアを更新しても設定を変更する必要がない.

例えば,Oracleデータベースに接続できるアプリケーションが作れる.この場合,$UserBaseDirectory/Applicationsまたは$BaseDirectory/Applicationsの中にOracleというアプリケーションを作る.手動でいくつかのディレクトリを作らなければならないかもしれないが,ソフトウェアをアップデートしても変更を加える必要はない.もう一つの利点に,DatabaseResourcesディレクトリにも同じ場所が使えるということが挙げられる.これは「データベースのリソース」で述べるように,別の設定情報が保管できる.

次の表に,Oracleに接続するためのドライバがインストールできる場所をまとめる.

$UserBaseDirectory/Applications/Oracle/Javaデータベースドライバのクラスファイルの場所
$BaseDirectory/Applications/Oracle/Javaデータベースドライバのクラスファイルの場所

データベースドライバクラスファイルの可能な場所

アプリケーションのJavaサブディレクトリは自動的にクラスパス上になる.しかし,ドライバクラスファイルに選択された場所がJavaClassPathが返すパス上でない場合は,AddToClassPathを使ってクラスパス上にドライバディレクトリを加えなければならない.

In[24]:=
Click for copyable input

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

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

Click for copyable input

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

ODBC接続

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

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

接続の設定

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

In[25]:=
Click for copyable input
Out[25]=

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

In[26]:=
Click for copyable input
Out[26]=

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

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

7.gif

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

8.gif

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

9.gif

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

10.gif

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

接続の使用

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

In[27]:=
Click for copyable input

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

In[28]:=
Click for copyable input

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

In[29]:=
Click for copyable input
Out[29]=
In[30]:=
Click for copyable input
Out[30]//TableForm=

接続を閉じる.

In[31]:=
Click for copyable input

名前付き接続

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

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

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

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

In[32]:=
Click for copyable input

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

In[33]:=
Click for copyable input
Out[33]=

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

In[34]:=
Click for copyable input

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

In[35]:=
Click for copyable input
Out[35]=

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

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

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

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

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

接続の例

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

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

次も上の例と同じMySQLデータベースに接続するが,ドライバのクラス名com.mysql.jdbc.Driverを使う.このドライバは組み込まれているので,セッションのクラスパスに加える必要はない.

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

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

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

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

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

マシンのポート1521で利用できるOracleデータベースxeへの接続を開く.パスワード入力にはゲストアカウントとプロンプトを使用する.Oracleドライバ(今回はojdbc6.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は埋込みモードで実行される.

設定済みのODBCソース"Access sandbox"を使ってMicrosoft Accessデータベースへの接続を開く.

組込みのAccessドライバを使ってMicrosoft Accessデータベースへの接続を開く.この際,データベースファイルへのパスを与える.この方法では,既存のODBCデータソースは必要ない.

Microsoft Excelへの接続も同様に動作する.設定済みのODBCソース"Excel sandbox"を使ってMicrosoft Excelスプレッドシートへの接続を開く.

組込みのExcelドライバを使ってMicrosoft Excelスプレッドシートへの接続を開く.この際,スプレッドシートへのパスを与える.この方法では,既存のODBCデータソースは必要ない.

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

Connection Tool

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