データ型マッピング
データベースを使用する際の最も重要な問題の一つに,データを保管するときとデータベースから取り出すときのデータの変換がある.このチュートリアルでは,データベースに保管されたデータとMathematica 式のインタラクトについて述べる.
次の表はデータ型と Mathematica 式との間のマッピングを示している.例えば Mathematica のInteger式は,SQLのINTEGERやTINYINT等の整数型で保存できる.また,VARCHAR型の列のデータを選択すると,これはMathematica ではString式となる.
| |
| String | ほとんどの場合,CHAR,VARCHAR,LONGVARCHAR等のSQL型で使われる |
| Integer | ほとんどの場合,INTEGER,TINYINT,SMALLINT,BIGINT等のSQL型で使われる |
| Real | ほとんどの場合,DOUBLE,FLOAT,REAL等のSQL型で使われる |
| True | ほとんどの場合SQL型BITで使われる |
| False | ほとんどの場合SQL型BITで使われる |
| Null | ほとんどの場合SQL型NULLで使われる |
| SQLBinary | ほとんどの場合,BINARY,VARBINARY,LONGVARBINARY等のSQL型で使われる |
| SQLDateTime | ほとんどの場合,DATE,TIME,TIMESTAMP等のSQL型で使われる |
| SQLExpr | Mathematica 式を保管するための特別なバイナリデータ型 |
Mathematica 式とデータベースに保管されているデータ型のマッピング
String,Integer,Real,True,False,Null等の Mathematica の原子式,およびSQLBinary,SQLDateTime,SQLExprで形成された複合式は,Javaオブジェクトに変換,またはJavaオブジェクトから変換される.JavaオブジェクトはJDBCドライバで提供されているあらゆるエンコードまたはエスケープ機能を利用して,JDBC操作で処理される.一般にこのようなドライバはクエリに渡す,あるいはクエリから受け取った値のエンコードのための,データベースに特有のコードを含んでいる.これらのドライバはデータベースの製造元により実装されていることも多いので,その機能を最大限利用するとよい.
データ型によっては,Mathematica 式が特別なラッパーを使わなければならないこともある.例えばデータ型BINARYについては,Mathematica 式はラッパーSQLBinaryを使用していなければならない.これらのラッパーはコマンドの構成において不明瞭な点を取り除くために必要である.
SQLBinary
SQLBinaryは,データベース中のバイナリデータの操作に使用する.これは画像やコンパイルしたコードの保管に使える.
このセクションの例を実際に試してみて,記載の通りに動作しなかった場合は,「データベースの例の使用」で述べているように
パッケージを使ってデータベースをもとの状態に戻す必要があるかもしれない.
DatabaseLink をロードし,demoデータベースに接続する.
GIF画像を含む文字列を生成する.
| Out[3]= |  |
ToCharacterCodeを使って,画像を表すバイトのリストを作る.このリストをSQLBinaryで囲む.
次に例題用の表を作る.
| Out[5]= |  |
表にデータを挿入する.
| Out[6]= |  |
SQLSelectを使ってデータを取り出す.これはバイナリデータなので,SQLBinary式で返される.
その後,FromCharacterCodeを使ってデータを文字列に戻す.
最後にデータをインポートし,表示する.
| Out[9]= |  |
表を削除し,接続を閉じる.
SQLDateTime
SQLDateTimeは,データベースの日付と時間の操作に使う.これを使うと日付,時間情報を保管したり取り出したりすることができる.また,特定の日付または時間に依存するクエリを実行することもできる.
このセクションの例を実際に試してみて,記載の通りに動作しなかった場合は,「データベースの例の使用」で述べているように
パッケージを使ってデータベースをもとの状態に戻す必要があるかもしれない.
DatabaseLink をロードし,demoデータベースに接続する.
例題用の表を作成する.この表にはDATE,TIME,DATETIME,TIMESTAMP列が含まれる.
| Out[3]= |  |
表にデータを挿入する.TIME以外のデータ型には Mathematica の関数DateList[]の出力が使える.TIMEには時間,分,秒を指定する3つの整数のリストを指定しなければならない.DATEはDateList[]の日付情報のみを使用し,時間情報は使わないことに注意されたい.DATETIMEとTIMESTAMPはどちらの情報も使い,またナノ秒を使う.
| Out[4]= |  |
データベースからデータを取り出すにはSQLSelectを使う.データはSQLDateTime式で返される.
| Out[5]= |  |
表を削除し,接続を閉じる.
SQLExpr
Mathematica 式をデータベースに保管するときはSQLExprを使う.保管したものを取り出すときは Mathematica 式に戻される.
このセクションの例を実際に試してみて,記載の通りに動作しなかった場合は,「データベースの例の使用」で述べているように
パッケージを使ってデータベースをもとの状態に戻す必要があるかもしれない.
DatabaseLink をロードしdemoデータベースに接続する.
Mathematica 式を保管するには,VARCHAR等の文字列を保管するために使える列を作る必要がある.
| Out[3]= |  |
データベースに Mathematica 式を挿入する.
| Out[4]= |  |
SQLSelectでデータをデータベースから取り出す.データはSQLExpr式として返される.
| Out[5]= |  |
表を削除して接続を閉じる.