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:数据库被锁定)eu。
数据库名称为DatabaseName.sqlite,数据库可在DocumentDirectory中使用
数据库路径是:
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 :(得分:1)
同时检查您是否通过任何其他应用程序访问相同的DB文件,例如通过SQLite Manager等。如果您在多线程环境中切换到FMDatabaseQueue 检查一下 fmdatabasequeue and thread safety
答案 1 :(得分:0)
值5是 SQLITE_BUSY ,这意味着数据库当前正忙。(例如,先前的SQLite调用未正确完成并关闭)。
可能的错误条件是。
如果您在没有任何输出的情况下返回executeUpdate
方法。它将以静默方式锁定数据库。因此,请确保dBName.close()完美运行。
检查可能导致executeUpdate
静默返回的SQL语法。
记录您的SQL语句并检查语法
答案 2 :(得分:0)
签名很多,请检查是否使用了适当的签名:
database.executeQuery
database.executeUpdate
database.executeStatements