|
AlexRecord_ja
サマリAlexRecordは、HTML5 Web DatabaseをベースとしたO/R Mappingフレームワークです。 Web Databaseにおける基本的なDB操作は全て非同期なため、AlexRecordのAPIは非同期処理が基本です。Web Database仕様においては、ワーカ内でのみ使用できる同期処理API(openDatabaseSync())も存在しますが、現時点においては実装しているブラウザが存在しないため、AlexRecordでも実装を見送っています(将来的にはサポートを予定しています)。 オンラインデモオンラインデモはこちらのページになります。 HTML5のWeb Databaseをサポートしたブラウザ(2009/7/28時点ではSafari4のみ)でご覧下さい。 チュートリアルAlexRecordを利用するには、まず<script>タグを用いてJavaScriptファイルを読み込みます。 <script type="text/javascript" src="alex.core.js"></script> <script type="text/javascript" src="alex.record.js"></script> 次に、alex.record.configオブジェクトをセットアップし、設定を行います。 alex.record.config = {
databases: {
"default": {
version: 1,
displayName: "Default DB",
estimatedSize: 1024 * 1024
}
}
};データベースのテーブルに対応したクラスを作成します。 このクラスには、テーブルに対する操作(テーブルの作成/削除など)がstaticメソッドとして、テーブル内のレコードに対する操作(レコードの保存/削除など)をインスタンスメソッドとして定義されます。 また、カラムの名前に対応するsetter/getterメソッドも定義されます。 var Book = alex.record.Class({
tableName: "Book",
columns: [{
name: "id",
type: "integer",
primaryKey: true,
autoIncrement: true
}, {
name: "title",
type: "string",
notNull: true
}, {
name: "price",
type: "integer",
notNull: true
}, {
name: "ISBN",
type: "string"
}]
});テーブルを作成します。非同期で実行されるため、処理結果はコールバック関数で受け取ります。 Book.createTable(function(result, error) {
if (error) {
// error handling
return;
}
...
});コールバック関数のシグネチャは、メソッドが正常終了したときの結果オブジェクトが第一引数、メソッドがエラー終了したときのエラーオブジェクトが第二引数として渡されます。 alex.recordでは、全ての非同期コールバックがこの形式です。 レコードを作成するには、先ほど作成したクラスをコンストラクタとしてnew演算子を使用します。コンストラクタの引数を用いてレコードを初期化する事が出来ます。 var book = new Book({title: "HTML5 Reference", price: 1000});カラム名に対応したsetterメソッドを使って値を設定する事も出来ます。 book.setISBN("487311389X");このレコードを保存するには、save()メソッドを用います。 book.save(function(result, error) {
if (error) {
// error handling
}
});APIリファレンスRecordClass alex.record.Class(Object spec)テーブルと一対一で対応するクラスを作成します。 引数のspecには、以下の値を指定する事が出来ます。
Database alex.record.database(DOMString dbName)データベース名を指定し、Web Database仕様におけるDatabaseオブジェクトを取得します。指定したDBがオープンされていなければ、自動でオープンします。また、一度オープンしたDatabaseオブジェクトはキャッシュされます。 void alex.record.executeSql(DOMString sql, optional Array args, optional Function callback, optional any dbOrTransactionSQLを非同期実行します。引数の意味は次の通りです。
class alex.record.ResultSetSQLを実行した結果にアクセスするためのインターフェースです。Web Database仕様におけるResultSetオブジェクトをラップして、使いやすいAPIを追加するのが主目的です。 insertIdinsert文の結果生成されたIDを取得します。 rowsAffected更新操作が影響を与えたレコード行数を返します。 alex.record.ResultSet(rs)コンストラクタ。Web Database仕様におけるResultSetオブジェクトを指定します。 void each(Function callback)結果セットを先頭から最後まで繰り返し、コールバック関数をループの都度呼び出します。 ResultSet next()結果セットのカーソルを一つ先に進めます。カーソルが最後に達すると、メソッドの戻り値はnullとなります。 void close()結果セットをクローズします。 any get(DOMString fieldName)フィールド名を指定して、現在のカーソル位置の行に含まれる値を取得します。 Object object()現在のカーソルが指す行を、JavaScriptオブジェクトとして取得します。結果オブジェクトのプロパティ名は、結果セットのフィールド名に対応します。 Record record(RecordClass recordClass)現在のカーソルが指す行を、レコードのオブジェクトとして取得します。このメソッドを使用するには、結果セットから「テーブル名カラム名」と言うフィールド名で値を取得できるようになっている必要があります。 RecordClassalex.record.Classで作成する、テーブルと一対一に対応するクラスをRecordClassと呼びます。 static boolean isAlexRecord常にtrueを返します。 static DOMString tableNameテーブル名です。 static DOMString databaseデータベース名です。 static Array refColumns外部キー列の定義です。 static rowIdColumnrowid(テーブルの行を特定することのできる整数型のキー)を表す列の定義です。 static pkColumnテーブルの主キーを表す列の定義です。 static void addEventListener(DOMString eventName, Function listener)レコードに対する操作をフックするためのイベントリスナを追加します。現在監視できるイベントは以下の通りです。
また、イベントハンドラに渡されるEventオブジェクトは、以下のプロパティを持ちます。
static void removeEventListener(DOMString eventName, Function listener)イベントリスナを削除します。 static void createTable(Function callback, Object options)テーブルを作成します。既にテーブルが存在する場合は何も行われません。以下のようなオプションを第二引数に渡す事が出来ます(さらに多くのオプションが追加される予定です)。
static void dropTable(Function callback)テーブルを削除します。テーブルが存在しない場合は何も行われません。 static void create(Object props, Function callback, Transaction tx)レコードを作成します。以下のコードとほぼ等価です。 new Record(props).save(callback, tx); static void find(any id, Function callback, tx)指定したIDでDBを検索し、結果をRecordClassのインスタンスとして取得します。IDに対応するレコードがない場合は、nullが返されます。 static alex.record.query.Query filter(DOMString expr, variadic args)テーブルに対する検索クエリを作成します。 void set(DOMString propName, any value)プロパティに値を設定します。 any get(DOMString propName)プロパティから値を取得します。 void setByColumnName(DOMString columnName, any value)プロパティ名(propertyName)ではなくカラム名(name)を用いて、プロパティに値を設定します。 any getByColumnName(DOMString propName)プロパティ名(propertyName)ではなくカラム名(name)を用いて、プロパティから値を取得します。 void populate(Object values)JavaScriptオブジェクトを引数にとり、プロパティの値をまとめてセットします。以下のように使用します。 book.populate({ title: "title", price: 100 });void populateByColumnName(Object values)プロパティ名(propertyName)ではなくカラム名(name)を用いて、プロパティの値をまとめてセットします。 void save(Function callback, optional Transaction tx)レコードをデータベースに保存します。 void update(Function callback, optional Transaction tx)データベース上のレコードを更新します。レコードを特定するためのRowIDがセットされていない場合、エラーとなります。 void remove(Function callback, optional Transaction tx)データベース上のレコードを削除します。レコードを特定するためのRowIDがセットされていない場合、エラーとなります。 integer getRowId()RowIdを取得します。 class alex.record.query.Query検索クエリを抽象化したクラスです。RecordClass.filter()の戻り値に使用されます。 alex.record.query.Query(RecordClass recordClass)コンストラクタ。検索対象のRecordClassを指定します。 Query filter(DOMString expr, variadic args)フィルタを追加します。 Query orderBy(variadic columns)ORDER BY句の列名を指定します。列名を文字列で指定すると、昇順になります。降順で並べ替えたい場合は、JavaScriptオブジェクトを使用します。 // タイトルは降順を指定
query.orderBy("price", {column: "title", desc: true});Query limit()LIMIT句に用いる数値を指定します。 Query offset()OFFSET句に用いる数値を指定します。 integer count()クエリを実行した結果の行数を返します。 void fetch(Function callback, any dbOrTransaction)非同期で実行した結果を取得します。結果の型はResultSetクラスのオブジェクトになります。 void fetchRecords(Function callback, any dbOrTransaction)非同期で実行した結果を取得します。結果の型はRecordClassの配列になります。 void fetchArray(Function callback, any dbOrTransaction)非同期で実行した結果を取得します。結果の型はオブジェクト(ResultSet.object())の配列になります。 |