2016-11-11 26 views
4

file:DB_NAME?mode=memory&cache=sharedsqlite3_open_v2()で使用して、メモリ内のsqliteデータベースへの複数の接続を開くことができます。メモリ内のsqliteデータベースに読み取り専用モードで接続することはできますか?

私はインメモリデータベースへの2つの接続を開きます。 1つはフラグSQLITE_OPEN_URI | SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE、もう1つはSQLITE_OPEN_READONLY | SQLITE_OPEN_URIです。

問題は、接続が読み取り専用であってもsqliteでデータベースを変更できることです。

接続を読み取り専用にする方法はありますか?それを達成するために私自身のVFSを書くべきですか?

答えて

3

フラグSQLITE_OPEN_READONLYフラグは、データベースがファイルにアクセスしてトランザクションを処理する方法に影響します。

shared-cache modeでは、複数の接続がファイルシステムとのインターフェイスで1つの接続として表示されます。したがって、ファイルアクセス/トランザクション設定を共有します。

接続が書き込みトランザクションを開始しないようにするには、PRAGMA query_onlyを使用します。

+0

素晴らしい!説明と解決策をありがとう。 – Bhargava

関連する問題