2016-11-29 26 views
1
let dBName = FMDatabase(path: databasePath as String) 
var isUpdated = Bool() 
      if dBName.open() 
      { 
       isUpdated = dBName.executeUpdate("UPDATE TableName SET \(Column1)=?, \(Column2)=?, \(status)=? WHERE \(ID)=?", withArgumentsInArray: [Column1, Column2, strStatus, strID]) 
       if isUpdated == true{ 

       print("sucess") 

       } 
       else{ 

        print("Error: isUpdated\(dBName.lastErrorMessage())") 
        print("Error: lasterrorcode \(dBName.lastErrorCode())") 
       } 

       dBName.close() 
      } 
      else 
      { 
       print("Error: \(dBName.lastErrorMessage())") 
      } 

始終顯示錯誤未知錯誤調用sqlite3_step(5:數據庫被鎖定)歐盟。
數據庫名稱是DatabaseName.sqlite,在DocumentDirectory可用的數據庫
數據庫路徑是:
FMDB更新或插入查詢問題「未知錯誤調用sqlite3_step(5:數據庫被鎖定)歐盟」

let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String 
    let url = NSURL(fileURLWithPath: path) 
    let filePath = url.URLByAppendingPathComponent(dbName).path! 

如果文件名DatabaseName.db工作正常,沒有任何數據庫鎖的問題,但同樣的問題,如果發現文件名是DatabaseName.sqlite

+0

嘗試清理並再次運行您的代碼。 – Saranjith

+0

清潔工程和派生數據中移除仍然沒有工作 –

+0

databaseName.executeUpdate( 「UPDATE表名SET \(列1)=?\(列2)=?\(狀態)= WHERE \(ID)=?」,withArgumentsInArray: [strColumn1,strColumn2,strStatus,strID]),這裏是查詢已經調試正常 –

回答

0

5的值是SQLITE_BUSY,這意味着該數據庫爲c非常繁忙(例如,之前的SQLite調用沒有正確完成並關閉)。

可能的錯誤條件是。

  1. 如果你executeUpdate方法返回沒有任何輸出。它會靜靜地鎖定數據庫。所以請確保dBName.close()正常工作。

  2. 是否會導致悄悄返回executeUpdate您的SQL語法。

記錄您的SQL語句,並檢查語法

+0

你是對的,數據庫關閉是真的,那我該怎麼辦? ,任何解決方案?打印(database.close())總是真 –

+0

檢查SQL語句的語法太 – Saranjith

+0

isUpdated = dBName.executeUpdate(「UPDATE表名SET \(列1)=?\(列2)=?\(狀態)=? WHERE \(ID)=「,withArgumentsInArray:[column1的,列2,strStatus,strID]),不正確該工作 –

0

另外檢查是否通過任何其他應用程序,即通過說SQLite的經理或類似的東西一樣訪問DB檔案。以及如果你在多線程環境切換到FMDatabaseQueue 檢查此 fmdatabasequeue and thread safety