3

SQLITE_MAX_COMPOUND_SELECTAndroidでSQLiteデータベースの価値を取得する方法はありますか?C sqlite3 APIでは、これはですがsqlite3_limit(db, SQLITE_LIMIT_COMPOUND_SELECT, -1) AndroidSQLiteAPIで公開されているこのインターフェイスは表示されません。

これは、何千もの行を挿入しているためです。バッチINSERTステートメントの発行は、トランザクションでラップされている場合でも、多くの単一行の挿入よりも高速です。ただし、ステートメントごとに挿入できる行の最大数はによって制限されるSQLITE_MAX_COMPOUND_SELECTため、ステートメントを複数のバッチに分割する必要があります。そして、明らかな理由から、デフォルトの制限である500をハードコーディングしたくありません。

4

1 に答える 1

1

制限は、SQLITE_LIMIT_COMPOUND_SELECT(少なくともAndroidシステムでは)メモリオーバーフローを防ぐための手段ではなく、健全性チェックにすぎません。したがって、ベンダーがデフォルトからそれを減らす可能性は非常に低いので、500は安全であるはずです。

さらに、1つのコマンドに挿入されるレコードの数が増えると、増分スピードアップは小さくなります。たとえば、5から50レコードへの移行のスピードアップは、50から500への移行のスピードアップよりも大きくなります。したがって、50を使用するだけでもそれほど害はありません。


繰り返し実行を高速化する別の方法は、。を使用してプリペアドステートメントを使用することSQLiteDatabase.compileStatementです。

于 2013-01-10T18:57:53.320 に答える