データ型マッピング
データベースを使用する際の最も重要な問題のひとつに,データを保管するときとデータベースから取り出すときのデータの変換があります.このチュートリアルでは,データベースに保管されたデータと
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は,データベース中のバイナリデータの操作に使用します.これは画像やコンパイルしたコードの保管に使えます.
このセクションの例を実際に試してみて,記載の通りに動作しなかった場合は,
データベースの例の使用で述べているように
DatabaseExamples`パッケージを使ってデータベースをもとの状態に戻す必要があるかもしれません.
DatabaseLink をロードし,
demo データベースに接続します.
| Out[3]= |  |
ToCharacterCodeを使って,画像を表すバイトのリストを作ります.このリストを
SQLBinaryで囲みます.
| Out[5]= |  |
| Out[6]= |  |
SQLSelectを使ってデータを取り出します.これはバイナリデータなので,
SQLBinary式で返されます.
その後,
FromCharacterCodeを使ってデータを文字列に戻します.
| Out[9]= |  |
SQLDateTime
SQLDateTimeは,データベースの日付と時間の操作に使います.これを使うと日付,時間情報を保管したり取り出したりすることができます.また,特定の日付または時間に依存するクエリを実行することもできます.
このセクションの例を実際に試してみて,記載の通りに動作しなかった場合は,
データベースの例の使用で述べているように
DatabaseExamples`パッケージを使ってデータベースをもとの状態に戻す必要があるかもしれません.
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 式に戻されます.
このセクションの例を実際に試してみて,記載の通りに動作しなかった場合は,
データベースの例の使用で述べているように
DatabaseExamples`パッケージを使ってデータベースをもとの状態に戻す必要があるかもしれません.
DatabaseLink をロードし
demo データベースに接続します.
Mathematica 式を保管するには,
VARCHAR 等の文字列を保管するために使える列を作る必要があります.
| Out[3]= |  |
データベースに
Mathematica 式を挿入します.
| Out[4]= |  |
SQLSelectでデータをデータベースから取り出します.データは
SQLExpr式として返されます.
| Out[5]= |  |