【Titanium】SQLiteのテーブル一覧を出力

titanium_sqliteTitanium.Databaseを使ってテーブルを作成したあとに、確認のためにデータベースのテーブル一覧を出力したときの覚書。

環境: Titanium SDK 3.3.0.GA

公式ドキュメントを参考に。

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 >