【Titanium】SQLiteのテーブル一覧を出力
Titanium.Databaseを使ってテーブルを作成したあとに、確認のためにデータベースのテーブル一覧を出力したときの覚書。
環境: Titanium SDK 3.3.0.GA
公式ドキュメントを参考に。
- Working with a SQLite Database - Appcelerator Platform - Appcelerator Docs
- Pragma statements supported by SQLite
- EZ-NET: SQLite でテーブルのカラム構造を取得する
SQLで取得するためには「sqlite_master」からSELECTすればいいらしい。
データベース名を引数にして、構造をオブジェクトで返す関数を作った。
/**
* Get Database Structure
*
* @api public
* @param {String} dbName Database Name
* @return {Object}
*/
function getStructure(dbName) {
var db, rsTables, rsColumns;
var sql, tables, tableName;// Generate SQL
sql = [];
sql.push("SELECT name");
sql.push("FROM sqlite_master");
sql.push("WHERE type = 'table';");// Excute
db = Ti.Database.open(dbName);
rsTables = db.execute(sql.join(' '));// Loop in Table ResultSet
tables = {};
while (rsTables.isValidRow()) {
tableName = rsTables.fieldByName('name');
tables[tableName] = {};// Get Columns ResultSet
rsColumns = db.execute("PRAGMA TABLE_INFO('" + tableName + "');");
while (rsColumns.isValidRow()) {
tables[tableName][rsColumns.field(1)] = {
cid: rsColumns.field(0),
type: rsColumns.field(2),
notNull: rsColumns.field(3),
defalutValue: rsColumns.field(4),
primaryKey: rsColumns.field(5)
};
rsColumns.next();
}
// Close
rsColumns.close();rsTables.next();
}
// Close
rsTables.close();
db.close();// Output for debug
console.log('[Database Structure]');
console.log(tables);return tables;
}
< Related Posts >