2014-02-23 163 views
0

我試圖在sqllite數據庫中使用beginTransaction()時讀取excel文件,但我面臨一些問題得到錯誤數據庫被鎖定sql lite交易鎖定

這是我的編輯。 注意到我使用這個代碼五個時間插入5個Excel文件

代碼:

 dbHandler.open(); 
    try { 
     url = new URL(
       "http://ictfox.com/Hafil_Updates/ImportExcel/schoolmaster.csv"); 
     BufferedReader in = new BufferedReader(new InputStreamReader(
       url.openStream(), "Windows-1256")); 
     while ((line = in.readLine()) != null) { 

      String[] insertValues = line.split(","); 
      if (flag_is_header) { 

       dbHandler = new MySQLiteHelper(context); 

       long row = dbHandler.insertSchoolMaster(insertValues[0], 
         insertValues[1], insertValues[2], insertValues[3], 
         insertValues[4], insertValues[5]); 
       Log.e("no. of rows inserted", "" + row); 

      } else { 
       flag_is_header = true; 
      } 
     } 
    dbHandler.setsucss(); 
     in.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     dbHandler.end(); 
     dbHandler.close(); 
    } 
    return line; 
} 

    public void open() 
{ 

    sqliteDB=this.getWritableDatabase(); 
    sqliteDB.beginTransaction(); 

} 

    public void setsucss() { 


sqliteDB.setTransactionSuccessful(); 

} 


// Close Database 
public void end() { 


sqliteDB.endTransaction(); 

} 
+1

發表您的logcat和格式化你的代碼。 –

+0

你有很多線程訪問數據庫嗎? – Merlevede

+0

5個方法在關閉後一個接一個地訪問數據庫 – user3245658

回答

0

使用您的交易,如:

db.beginTransaction(); 
try{ 
//Process inserts 
//.... 
db.setTransactionSuccessful(); 
}catch(Exception e){ 

}finally{ 
db.endTransaction(); 
} 
+0

我已經在開放的聲明中使用了所有這些,並且關閉了 – user3245658

+0

該模式很重要,您還可以使用DDMS跟蹤哪個線程導致問題:http://developer.android.com/tools/debugging/ddms.html – Skynet

+0

其中把db.close(); – user3245658

0

有道在Android中使用數據庫事務:

  1. beginTransaction() - 開始交易
  2. setTransactionSuccessful() - 要提交交易,它將提交數據庫中的值
  3. endTransaction() - 結束數據庫事務。

注意:如果您啓動交易,您需要關閉交易。

這裏是交易的標準成語:

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

參見:SQLiteDatabse

例子:

mDatabase.beginTransaction(); 
try{ 
    //do multiple database operations here 
    //which throws exceptions on error 
    mDatabase.setTransactionSuccessful(); 
    //do not any more database operations between 
    //setTransactionSuccessful and endTransaction 
    }catch(Exception e){ 
    //end the transaction on error too when doing exception handling 
    mDatabase.endTransaction(); 
    throw e; 
    } 
    //end the transaction on no error 
    mDatabase.endTransaction(); 
} 
+0

你爲什麼不提供鏈接? https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html –