2011-08-12 6 views
2

、私はそのようないくつかのループを持っている:Androidのsqliteのと私のデータベースを作成する複数のクエリ

for (int i=0;i<something;++i){ 
    myDatabase.insert(...); 
} 

をしかし、私はそれを実行すると、それはあまりにも長い時間がかかります。ですから、ランタイムを改善する方法を知りたいですか?

String queries=""; 
for (int i=0;i<something;++i){ 
    queries += "my query;"; 
} 
myDatabse.execSQL(queries); 

をしかしExecSqlの機能は、最初のクエリだけではなく、他人を挿入します。 私はそのように挿入するために一つだけの呼び出しをしようと思います。 どうすればいいですか?

答えて

9

あなたが1つのトランザクションを介してすべての要求をexecしなければならない:7で割った

db.beginTransaction(); 
try { 
    ... 
    db.setTransactionSuccessful(); 
} finally { 
    db.endTransaction(); 
} 
+0

ありがとう、それは素晴らしい作品:) – Imotep

3

「BEGIN」トランザクションと「COMMIT」トランザクションでこれらの挿入行を囲むことができます。 SQLiteはトランザクションブロック内で各DMLとDDL呼び出しをラップし、トランザクションジャーナルを作成し、挿入後に削除します(コードの最初の例の場合)。

TCLコマンドを手動で実行すると、SQLiteデータベースは自動トランザクションモードを終了し、それを実行するようになります。

+0

感謝:)ランタイム:P – Imotep

4

複数の行を1つのステートメントに挿入しようとしましたか?このような何か:あなたはまた、単一transactionであなたの挿入をラップしようとすることができ

INSERT INTO table (c1, c2, c3) VALUES 
(1, 2, 3), 
(4, 5, 6), 
.... 

。すべての作業を1つのトランザクションにまとめると、挿入ごとのロックのオーバーヘッドが回避されます。

+0

は、ランタイムがすでに1つのトランザクションのみを使用して7で割って、私は、これはそれを軽減しようとするでしょうもう一度;) – Imotep

関連する問題