0
このエラーは「FMDatabaseが開かれていません」です。クエリを実行する前にデータベースを開いた後でも。ここでは、私はデータベースを開くために使用しているデータベースのインスタンスのコードです。Sqliteデータベースエラー:FMDatabase <FMDatabase:0x6080000a96c0>が開かれていません。
var instance = ModelManager()
class ModelManager: NSObject {
var database: FMDatabase? = nil
var database2: FMDatabase? = nil
var resultSet: FMResultSet!
class func getInstance(sqllite:String) -> ModelManager {
if(instance.database == nil){
instance.database = FMDatabase(path: Util.getPath(sqllite))
}
return instance
}
class func getInstance2(sqllite:String) -> ModelManager {
if(instance.database2 == nil){
instance.database2 = FMDatabase(path: Util.getPath(sqllite))
}
return instance
}
}
、これは私がエラーを取得していますコードです。
func saveImageAudio(audioFile:String?,imageFile:String?,isImage:Bool){
guard (instance.database?.open())! else {
return
}
let fileName = isImage == true ? imageFile : audioFile
var paramName = isImage == true ? "imageList" : "audioList"
let countParam = isImage == true ? "imageCount" : "audioCount"
let time = Util.DateTime()
guard increaseLastNo(isImage: isImage) else {
return
}
do {
let FileArray = getImageAudiolist(isImagelist: isImage)
var query = ""
var values:[Any] = []
if FileArray.count == 0 {
query = "update RoomSectionDetails set \(paramName) = ?, \(countParam) = 1 ,modified_dtm = ? where pda_guid = ? and roomName = ? and sectionID = ? and dead = ?"
values = [fileName!,time,pda_guid,roomName,sectionId,0]
}else{
query = "update RoomSectionDetails set \(paramName) = \(paramName) || ?, \(countParam) = \(countParam) + 1, modified_dtm = ? where pda_guid = ? and roomName = ? and sectionID = ? and dead = ?"
values = [",\(fileName!)",time,pda_guid,roomName,sectionId,0]
}
try instance.database?.executeUpdate(query, values: values)
paramName = isImage == true ? "lastImageNo" : "lastAudioNo"
if !isImage {
self.updateAudioDuration()
}
} catch {
print("Error while Saving Image Audio in DB")
}
instance.database?.close()
}
この問題の解決方法を教えてください。クエリを実行した後もデータベースを閉じていませんでした。それはCPU使用率を200以上にします。だから今私はデータベースを閉じています。しかし、私はこのエラーが発生しています。手伝ってくれてありがとう。
'saveImageAudio'を呼び出す前にコードのどこかで' getInstance'または 'getInstance2'を呼び出しましたか? –
'getInstance'と' getInstance2'を実装するのではなく、 'database'と' database2'を* lazy *変数として宣言することを強くお勧めします。 –
はい、Ahmad F. App delegateを呼び出しました。 –