12

sqlite DB の user_version を確認しようとしています。バージョンを上げるための管理ツールがありますが、プラグマ ステートメントの構文がわかりません。ifステートメントで値をテストすることを期待しています。誰かがコードサンプルを提供できますか? 目的の C コードにプラグマ ステートメントを埋め込むと、コンパイラがエラーをスローします。

4

3 に答える 3

22

newtover からインスピレーションを得て、FMDB を掘り下げ、sqlite3のドキュメントを読み直しました (私の意見では、まだ非常に漠然としています)。このコードは、移行が必要なスキーマに重要な変更を加えたときに、管理ツールでバンプした値を返します。

-(int)queryUserVersion: (sqlite3*) db {
    // get current database version of schema
    static sqlite3_stmt *stmt_version;
    int databaseVersion;

    if(sqlite3_prepare_v2(db, "PRAGMA user_version;", -1, &stmt_version, NULL) == SQLITE_OK) {
        while(sqlite3_step(stmt_version) == SQLITE_ROW) {
            databaseVersion = sqlite3_column_int(stmt_version, 0);
            NSLog(@"%s: version %d", __FUNCTION__, databaseVersion);
        }
        NSLog(@"%s: the databaseVersion is: %d", __FUNCTION__, databaseVersion);
    } else {
        NSLog(@"%s: ERROR Preparing: , %s", __FUNCTION__, sqlite3_errmsg(db) );
    }
    sqlite3_finalize(stmt_version);

    return databaseVersion;
}

SQLステートメントが変更されたスキーマバージョンにも同様の方法があります"PRAGMA schema_version;"

于 2010-05-31T16:06:00.597 に答える
4

プラグマ ステートメントは、他のステートメント内では使用できません(他のステートメントから pragma-stmt への参照はありません)。

ただし、プラグマのクエリと、次のクエリで選択した値をリテラルとして使用するという 2 つの要求を行うことで、user_version 値を使用できます。

UPD : PRAGMA 構文に興味がある場合は、かなり単純です。

sqlite> pragma user_version=10;
sqlite> pragma user_version;
user_version
------------------------------
10
sqlite> pragma user_version='12.3.124';
sqlite> pragma user_version;
user_version
------------------------------
12

つまり、結果は単一の値を持つ行として返されます。

Objective-C で SQLite にステートメントを発行する方法に興味がある場合は、neighbor questionを見てみてください: example。残念ながら、私は Objective-C でコーディングしたことがありません。

于 2010-04-20T12:48:35.410 に答える
3

FMDB ラッパーを使用している場合 (sqlite の C ハンドラー インターフェイスを扱いたくない場合に推奨されます)

使用する

[self.db setUserVersion:yourUserVersion]; // yourUserVersion is of uint32_t type

現在の user_version ユーザーを読み取るには

[self.db userVersion];                   // returned value is of uint32_t type

ドキュメンテーション:

http://ccgus.github.io/fmdb/html/Categories/FMDatabase+FMDatabaseAdditions.html

この回答は、基本的にこの回答のコピーです: https://stackoverflow.com/a/27807125/1364174

于 2015-01-06T21:23:00.577 に答える