回答
如果我說得對,「忙」意味着你無法獲得鎖定。似乎有另一個進程(或線程等)對數據庫有鎖定。
如果你調用一個函數sqlite3的錯誤代碼SQLITE_BUSY時,得到的結果,這意味着通過drdaeman觀察到該數據庫已通過相同的方法或通過您的工藝中的一個線程鎖定。
處理這種情況的正確方法是在循環中嘗試操作,並且如果返回碼仍然是SQLITE_BUSY,要等待一段時間(您決定超時值),然後在下一次重試操作循環迭代。
例如,下面的代碼片段從目標C包裝FMDB採取(http://code.google.com/p/flycode/source/browse/trunk/fmdb)展示瞭如何準備語句的查詢考慮到某些操作可能返回SQLITE_BUSY:
int numberOfRetries = 0;
BOOL retry = NO;
if (!pStmt) {
do {
retry = NO;
rc = sqlite3_prepare(db, [sql UTF8String], -1, &pStmt, 0);
if (SQLITE_BUSY == rc) {
retry = YES;
usleep(20);
if (busyRetryTimeout && (numberOfRetries++ > busyRetryTimeout)) {
NSLog(@"%s:%d Database busy (%@)", __FUNCTION__, __LINE__, [self databasePath]);
NSLog(@"Database busy");
sqlite3_finalize(pStmt);
[self setInUse:NO];
return nil;
}
}
else if (SQLITE_OK != rc) {
if (logsErrors) {
NSLog(@"DB Error: %d \"%@\"", [self lastErrorCode], [self lastErrorMessage]);
NSLog(@"DB Query: %@", sql);
if (crashOnErrors) {
NSAssert2(false, @"DB Error: %d \"%@\"", [self lastErrorCode], [self lastErrorMessage]);
}
}
sqlite3_finalize(pStmt);
[self setInUse:NO];
return nil;
}
}
while (retry);
}
由方式,如果您需要訪問sqlite,FMDB非常方便,並且通過本機C API直接訪問方面的使用非常簡單。
只需調用[sqlite3_busy_timeout](http://www.sqlite.org/c3ref/busy_timeout.html)即可完成相同的工作。 – 2012-02-02 22:11:10
我在順序INSERT INTO命令中遇到了與SQLITE_BUSY類似的問題。第一行插入正常,但當應用程序嘗試插入第二行時,我得到了SQLITE_BUSY狀態。在谷歌周圍,我知道你必須在執行它們之後調用sqlite3_finalize()語句:http://www.sqlite.org/c3ref/finalize.html。完成我的陳述解決了我的問題。
就我而言,我忘記了在使用它後關閉數據庫。繼固定雷:
sqlite3_finalize(statement);
sqlite3_close(contactDB);
FMDB也可以從你輕鬆緩解這些頭疼的問題。
就像管理員爲我運行命令提示符一樣簡單。另外在UNIX上,你可以在啓動數據庫時使用sudo
。
- 1. Rails 3.1:Sqlite異常
- 2. 使用SQLite滴Laravel黃昏測試文件繁忙異常
- 3. sqlite的空指針異常
- 4. FluentNHibernate; SQLite的; FileNotFoundException異常(System.Data.SQLite)
- 5. 黑莓SQLite路徑異常
- 6. Sqlite數據庫Pragma異常?
- 7. WPF SQLite查詢異常
- 8. Java異常錯誤 - Sqlite preparedStatement.setBlob
- 9. Sqlite異常,語法錯誤
- 10. Android SQLite異常表沒有列
- 11. 異常亞音速2.2,SQLite和遷移
- 12. create table sentense中的sqlite異常
- 13. sqlite的異常處理的Android
- 14. 創建數據庫時sqlite異常
- 15. Android SQLITE查詢異常錯誤?
- 16. 的Android SQLite的異常接近「/」
- 17. Android的sqlite異常,如何解決?
- 18. SQLite的異常內存使用
- 19. 插入時得到sqlite異常?如何?
- 20. ActiveAndroid SQLite異常'沒有這樣的表'
- 21. SQLite的拋出異常與NH 3.2
- 22. Xamarin中的SQLite拋出連接異常
- 23. SQLite查詢在Android中拋出異常
- 24. SQLite數據庫查詢異常處理
- 25. sqlite異常沒有這樣的列
- 26. 的ActiveRecord + SQLite的3行爲異常
- 27. Android SQLite異常沒有這樣的列
- 28. 如何解決此sqlite異常約束
- 29. Android SQLite「沒有這樣的表」異常
- 30. Android SQLite數據庫空指針異常
你能提供一些示例代碼嗎?幾條線瞭解發生了什麼。 – stefanB 2009-06-08 10:21:04