重複したデータをsqliteファイルに保持しないように複数のテーブルを使用する必要があるプロジェクトがあります(複数のテーブルの使用は悪夢であることがわかっていましたが)。
私のアプリケーションでは、ある方法で1つのテーブルからデータを読み取り、別の方法で別のテーブルにデータを挿入しています。私がこれを行うとき、私はsqliteステップ関数から得ています、sqliteの誤用であるエラーコード21。
私の研究によると、それは私がマルチスレッドからテーブルに到達できなかったためでした。
これまで、sqliteのWebサイトを読んで、sqliteデータベースを構成するための3つのモードがあることを学びました。
1)シングルスレッド:複数のスレッドを呼び出す機会はありません。
2)マルチスレッド:ええマルチスレッド; しかし、いくつかの障害があります。
3)シリアル化:これはマルチスレッドデータベースアプリケーションとの最適な一致です。
trueを返す場合sqlite3_threadsafe() == 2
は、yes sqliteデータベースがシリアル化され、これがtrueを返すので、自分で証明しました。
次に、sqliteデータベースをシリアル化して保証対象にするように構成するコードがあります。
sqlite3_config(SQLITE_CONFIG_SERIALIZED);
1つのテーブルからデータを読み取って挿入するクラスで上記のコードを使用すると、完全に機能します:)。しかし、2つのテーブルからデータを読み取って挿入するクラス(実際には本当に必要な場所)で使用しようとすると、sqliteの誤用が発生します。
データベースを開いたり閉じたりするコードを確認しましたが、問題はありません。私が他を削除しない限り、それらは機能します。
私はios5を使用していますが、これは私のプロジェクトにとって本当に大きな問題です。Instagramがpostgresqlを使用していると聞きましたが、これが理由でしたか?最初にpostgresqlまたはsqliteを提案しますか?