2017-09-19 3 views
0

Je reçois cette erreur "FMDatabase n'est pas ouvert". Même après avoir ouvert ma base de données avant d'exécuter la requête. Voici le code d'instance de la base de données que j'utilise pour ouvrir la base de données.Erreur de base de données Sqlite: FMDatabase <FMDatabase: 0x6080000a96c0> n'est pas ouvert.

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 
} 

}

et c'est le code où je reçois l'erreur.

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() 
    } 

Veuillez donner la solution à ce problème. Je ne fermais pas la base de données à tout moment après avoir lancé des requêtes. cela provoque des utilisations de cpu plus de 200. Donc maintenant je ferme la base de données. mais je reçois cette erreur. Merci pour l'aide.

+0

avez-vous appelé 'getInstance' ou' getInstance2' quelque part dans votre code avant d'appeler 'saveImageAudio'? –

+0

Je recommande fortement de déclarer 'database' et' database2' comme des variables * paresseuses * au lieu d'implémenter 'getInstance' et' getInstance2' –

+0

Oui, Ahmad F. J'ai appelé Appet deletgate. –

Répondre

0

J'ai trouvé la solution à ce problème. J'ai une méthode dans la méthode qui ferme la base de données. En raison de cette erreur à venir. Merci pour l'aide.