2016-04-02 9 views
1

Hier ist mein Problem: Ich habe diese Wein-App, die den Inhalt meiner Datenbank dem Benutzer in einer schönen Tabellenansicht zeigt. Ich kann mit der Funktion FMDB executeQuery recht einfach Daten daraus abfragen, aber wenn ich versuche, etwas zur SQLite-Tabelle hinzuzufügen, schlägt es einfach fehl.iOS Swift einfügen in sqlite FMDB

Hier ist der Code, den ich verwende.

do 
{ 
    try sharedInstance.database!.executeUpdate("INSERT INTO wine VALUES (?, ?, ?)", values: [id, name, wineType]) 
} 
catch 
{ 
    print("error \(error)") 
} 

Ich habe versucht, alles in einem String setzen und es dann als erste Parameter senden, und Null als zweiten Parameter setzen, und das nicht klappt auch. Diese Syntax kommt von der Data Sanitisation section in the FMDB README from github

Ich habe ein paar ähnliche Fälle gefunden, aber die Antworten waren Objective-C. Bitte beachte, dass ich komplett neu in iOS bin, ich weiß nichts über Objective-C, und dies ist meine erste Swift-App.

Was mache ich falsch?

+0

Sie könnten einen Swift-Wrapper für SQLite verwenden. Es gibt jetzt gute, wie https://github.com/groue/GRDB.swift –

Antwort

0

In einigen Fällen executeUpdate schlägt es so fehl Zuerst versuchen, executeQuery oder executeStatments zu verwenden, um das Problem zu beheben.

Wenn es nicht funktioniert hat, meiner Meinung nach Eröffnung Datenbank der richtige Weg, nachdem SQL-Anweisung für die Ausführung ist:

executeUpdate("INSERT INTO wine VALUES ('\(id)', '\(name)', '\(wineType)')") 

Und in der Nähe Datenbank nach der Anweisung erfolgreich ausgeführt. Was ist der Typ Ihrer ID in der Datenbank? Und ist es automatisch erhöht?

Welchen Fehler bekommen Sie in der Konsole? versuche, den Haltepunkt zu verwenden und zu sehen, was passiert.

0

Die Syntax korrekt ist, können Sie überprüfen möchten, wenn:

  • Sie sharedInstance.database!.open() vorher
  • Tisch

Wenn Sie FMDatabaseAdditionsVariadic.swift und FMDatabaseVariadic.swift enthalten bestehen aus drei Spalten genannt in Ihr Projekt können Sie anrufen executeUpdate wie folgt:

do { 
    try sharedInstance.database!.executeUpdate("INSERT INTO wine VALUES (?, ?, ?)", id, name, wineType) 
} catch { 
    print("error \(error)") 
} 
0

Hinweis: - Hier sende ich Code für Datensatz in Datenbank mit FMDB in Swift einfügen.

import UIKit 

class FMDBDatabaseSignUpVC: UIViewController { 

@IBOutlet weak var txtFirstNameOutlet: UITextField! 
@IBOutlet weak var txtLastNameOutlet: UITextField! 
@IBOutlet weak var txtEMailIDOutlet: UITextField! 
@IBOutlet weak var txtPasswordOutlet: UITextField! 

var databasePath = NSString() 
override func viewDidLoad() { 
    super.viewDidLoad() 

    let filemgr = NSFileManager.defaultManager() 
    let dirPaths = 
     NSSearchPathForDirectoriesInDomains(.DocumentDirectory, 
              .UserDomainMask, true).first as String! 

    databasePath = (dirPaths as NSString).stringByAppendingPathComponent("swiftDemo.db") 

    if !filemgr.fileExistsAtPath(databasePath as String) { 
     let contactDB = FMDatabase (path: databasePath as String) 
     if contactDB == nil { 
      print(contactDB.lastErrorMessage()) 
     } 
    } 
    // Do any additional setup after loading the view. 
} 

@IBAction func btnSaveAction(sender: UIButton) { 

    let contactDB = FMDatabase (path: databasePath as String) 
    if contactDB.open() { 
     let InsertQry = "insert into userInfo (userFirstName, userLastName,userEmailID,userPassword) values ('\(txtFirstNameOutlet.text!)','\(txtLastNameOutlet.text!)','\(txtEMailIDOutlet.text!)','\(txtPasswordOutlet.text!)')" 
     let result = contactDB.executeUpdate(InsertQry, withArgumentsInArray: nil) 
     if !result { 
      print(contactDB.lastErrorMessage()) 
     } 
     else 
     { 
      print("Success") 
      txtFirstNameOutlet.text="" 
      txtLastNameOutlet.text="" 
      txtEMailIDOutlet.text="" 
      txtPasswordOutlet.text="" 
     } 
    } 
} 
}