2011-07-01 2 views
0
java.sql.SQLException: database is locked 
    at org.sqlite.DB.throwex(DB.java:288) 
    at org.sqlite.NestedDB.prepare(NestedDB.java:115) 
    at org.sqlite.DB.prepare(DB.java:114) 
    at org.sqlite.Stmt.executeQuery(Stmt.java:89) 

私はこの例外を取得します。私はSAとGoogleでそれを読んでいました。最も一般的な結論は、決して終わらない別のクエリを作成し始めたということです。私が抱えている問題は、以前このマシンでこのDBのクエリを実行したことがないことです。私はそれをホストした場所(以前作成したもの)からdbファイルをダウンロードし、何もしていないので、なぜロックされるのか分かりません。 SQLite Database Browserというプログラムを使ってクエリを実行すると、うまく動作します。助けてくれてありがとう、私は必要があれば、私に知らせてもっと情報を提供します。SQLite DBはロックされた例外です。もしこれまでお試しいただいていないのであれば、どうすればロックを解除できますか?

adapter = new DbAdapter(); 
ResultSet info; 
ResultSet attributes; 
for (int i = 1; i < 668; i++) { 
    if (i%50 == 0) { 
     System.out.print('.'); 
    } 
    info = adapter.makeQuery("SELECT * FROM vehicles WHERE id = '" + i + "'"); 
    attributes = adapter.makeQuery("SELECT * FROM vehicle_moves WHERE vehicle_id = '" + i + "'"); 
    if(info.next()) { 
     base = new (info, attributes); 
    } 

    vehicleArray[i] = base; 
} 
System.out.println("Done."); 
info.close(); 
attributes.close(); 
adapter.close(); 

上記はコードが発生している場所です。私はコード全体を通していくつかの宿題をしましたが、問題はこのコードにあります。他のDBクエリはうまく動作します。あなたから何かが飛び出した?

+0

'DbAdapter'はパラメータ化/準備済みクエリを処理しませんか? SQLiteは確かにそうです!それはより速く安全です! –

答えて

0

SQLite自体は、別のクエリの結果が処理されている間に、クエリを実行することを最も確実に処理できます。それはできない場合はひどく役に立たないだろう!問題を引き起こす可能性が高いのは、データベースへの2つの接続が同時に開かれている場合です。 DbAdapterクラスはまったく分かりません。どのパッケージに入っているのか、どのモジュールがそれを提供しているのかは分かりませんが、多くの接続を開くことができると仮定している場合(または適切な接続衛生を維持していない場合)確かにあなたが見ている種類の問題の原因になるでしょう。そこに最初に見てください。

関連する問題