2017-09-19 9 views
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以上にします。だから今私はデータベースを閉じています。しかし、私はこのエラーが発生しています。手伝ってくれてありがとう。

+0

'saveImageAudio'を呼び出す前にコードのどこかで' getInstance'または 'getInstance2'を呼び出しましたか? –

+0

'getInstance'と' getInstance2'を実装するのではなく、 'database'と' database2'を* lazy *変数として宣言することを強くお勧めします。 –

+0

はい、Ahmad F. App delegateを呼び出しました。 –

答えて

0

この問題の解決策が見つかりました。私はデータベースを閉じるメソッドの中にメソッドを持っています。そのエラーが来ているためです。手伝ってくれてありがとう。

関連する問題