2016-12-19 8 views
0

私はココアポッドの依存としてFMDBを使用しています。挿入、削除、および選択操作は正常に動作しますが、行を更新することはできません。ここでswiftを使用してFMDBで更新を実行できません3

は私のコードこの問題を検索する際

データベースとテーブルの作成

let filemgr = FileManager.default 
let dirPaths = filemgr.urls(for: .documentDirectory, 
          in: .userDomainMask) 
let databasePath = dirPaths[0].appendingPathComponent("database.sqlite").path 

defaults.set(String(databasePath), forKey: "databasePath") 

let dbObj = FMDatabase(path: defaults.value(forKey: "databasePath") as! String) 

if dbObj == nil { 
    print("Error: \(dbObj?.lastErrorMessage())") 
} 

if (dbObj?.open())! 
{ 
    let sql_stmt = "CREATE TABLE IF NOT EXISTS TABLE_TICKET (ID INTEGER PRIMARY KEY AUTOINCREMENT, TICKET_SUBJECT TEXT, TICKET_DESCRIPTION TEXT, DEPARTMENT_ID TEXT, PRIORITY_ID TEXT NOT NULL, TYPE_ID TEXT NOT NULL, TICKET_ATTACHMENT TEXT, STAFF_NAME TEXT NOT NULL, TICKET_NO TEXT NOT NULL, TICKET_ID TEXT NOT NULL, TICKET_STATUS TEXT NOT NULL,TICKET_OFFLINE_FLAG TEXT NOT NULL,TICKET_DATE TEXT NOT NULL, TICKET_UPDATE_TIME TEXT)" 
    if !(dbObj?.executeStatements(sql_stmt))! { 
     print("Error: \(dbObj?.lastErrorMessage())") 
    } 
    dbObj?.close() 
} 
else 
{ 
    print("Error: \(dbObj?.lastErrorMessage())") 
} 

更新操作

if (dbObj?.open())! 
    { 
     let updatedTime = String(describing: json["response"]["CurrentDateTime"]) 
     print(updatedTime) 
     let deleteSQL = "UPDATE TABLE_TICKET SET ticket_update_time = '\(updatedTime)' WHERE ticket_id ='\(self.currentTicketID!)'" 

     do {  
       try dbObj?.executeUpdate("UPDATE TABLE_TICKET SET ticket_update_time=? WHERE ticket_id=?", withArgumentsIn: [updatedTime, self.currentTicketID!]) 
      } 
      catch { 
       print(error) 
      } 
    } else { 
     print("Error: \(dbObj?.lastErrorMessage())") 
    } 

である私は、DBはにコピーされなければならないことがわかりました読み取り専用ではない特定の場所。私は間違った場所に保管していますか?

注:このコードの実行中にエラーは発生しませんでした。更新後の更新された列の値が空白になりました。

答えて

0

場所は、限り、あなたはそれがiCloud上にバックアップさに慣れているようで結構です。

ストアユーザ生成コンテンツにこのディレクトリを使用します。このディレクトリの内容は、ファイル共有を通じてユーザーが利用できるようにすることができます。そのため、彼のディレクトリには、ユーザーに公開したいファイルのみが含まれている必要があります。 このディレクトリの内容は、iTunesおよびiCloudによってバックアップされます。

あなたが挿入できるのであれば、あなたのデータベースは読み込み専用ではないと思います。

let attributes: [String:AnyObject] = [FileAttributeKey.posixPermissions.rawValue: NSNumber(value: 0o777)] 
         let fileContents = self.fileManager.contents(atPath: tempURL.path) 

         let success = self.fileManager.createFile(atPath: preferredURL.path, contents: fileContents, attributes: attributes) 

私だけ更新クエリが失敗している場合は、データとクエリをダブルチェックになります。私の経験では、私はそうのように、ダウンロードした新しいデータベースファイルにアクセス許可を設定する必要がありました。

関連する問題