データ型マッピング

データベースを使用する際の最も重要な問題の一つに,データを保管するときとデータベースから取り出すときのデータの変換がある.このチュートリアルでは,データベースに保管されたデータとWolfram言語式のインタラクトについて述べる.

次の表はデータ型とWolfram言語式との間のマッピングを示している.例えばWolfram言語のInteger式は,SQLのINTEGERやTINYINT等の整数型で保存できる.また,VARCHAR型の列のデータを選択すると,これはWolfram言語ではString式となる.

Wolfram言語
データ型
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型で使われる
SQLExprWolfram言語式を保管するための特別なバイナリデータ型

Wolfram言語式とデータベースに保管されているデータ型のマッピング

StringIntegerRealTrueFalseNull等のWolfram言語の原子式,およびSQLBinarySQLDateTimeSQLExprで形成された複合式は,Javaオブジェクトに変換,またはJavaオブジェクトから変換される.JavaオブジェクトはJDBCドライバで提供されているあらゆるエンコードまたはエスケープ機能を利用して,JDBC操作で処理される.一般にこのようなドライバはクエリに渡す,あるいはクエリから受け取った値のエンコードのための,データベースに特有のコードを含んでいる.これらのドライバはデータベースの製造元により実装されていることも多いので,その機能を最大限利用するとよい.

データ型によっては,Wolfram言語式が特別なラッパーを使わなければならないこともある.例えばデータ型BINARYについては,Wolfram言語式はラッパーSQLBinaryを使用していなければならない.これらのラッパーはコマンドの構成において不明瞭な点を取り除くために必要である.

SQLBinary

SQLBinaryは,データベース中のバイナリデータの操作に使用する.これは画像やコンパイルしたコードの保管に使える.

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

DatabaseLink をロードし,demoデータベースに接続する.

GIF画像を含む文字列を生成する.

ToCharacterCodeを使って,画像を表すバイトのリストを作る.このリストをSQLBinaryで囲む.

次に例題用の表を作る.

表にデータを挿入する.

SQLSelectを使ってデータを取り出す.これはバイナリデータなので,SQLBinary式で返される.

その後,FromCharacterCodeを使ってデータを文字列に戻す.

最後にデータをインポートし,表示する.

表を削除し,接続を閉じる.

SQLDateTime

SQLDateTimeは,データベースの日付と時間の操作に使う.これを使うと日付,時間情報を保管したり取り出したりすることができる.また,特定の日付または時間に依存するクエリを実行することもできる.

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

DatabaseLink をロードし,demoデータベースに接続する.

例題用の表を作成する.この表にはDATE,TIME,DATETIME,TIMESTAMP列が含まれる.

表にデータを挿入する.TIME以外のデータ型にはWolfram言語の関数DateList[]の出力が使える.TIMEには時間,分,秒を指定する3つの整数のリストを指定しなければならない.DATEはDateList[]の日付情報のみを使用し,時間情報は使わないことに注意されたい.DATETIMEとTIMESTAMPはどちらの情報も使い,またナノ秒を使う.

データベースからデータを取り出すにはSQLSelectを使う.データはSQLDateTime式で返される.

表を削除し,接続を閉じる.

SQLExpr

Wolfram言語式をデータベースに保管するときはSQLExprを使う.保管したものを取り出すときはWolfram言語式に戻される.

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

DatabaseLink をロードしdemoデータベースに接続する.

Wolfram言語式を保管するには,VARCHAR等の文字列を保管するために使える列を作る必要がある.

データベースにWolfram言語式を挿入する.

SQLSelectでデータをデータベースから取り出す.データはSQLExpr式として返される.

表を削除して接続を閉じる.