2016-04-02 18 views
1

ここに掲載しました:このワインアプリは、私のデータベースの内容を素敵なテーブルビューでユーザーに表示します。私はFMDBのexecuteQuery関数を使ってデータを簡単に取得できますが、SQLiteテーブルに何かを追加しようとすると失敗します。iOSスウィッチインサートをsqlite FMDB

ここに私が使用するコードがあります。

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

私は1つの文字列にすべてを入れてみました、その後、最初のパラメータとして送信し、2番目のパラメータとしてnilを入れて、それも失敗してきました。この構文は、Data Sanitisation section in the FMDB README from githubから

私はいくつかの同様のケースを見つけましたが、答えはObjective-Cでした。私はiOSを全く新しくしていますが、私はObjective-Cについて何も知らないので、これは私の最初のSwiftアプリです。

私は間違っていますか?

+0

SQLite用のSwiftラッパーを使用できます。現在はhttps://github.com/groue/GRDB.swiftのような良いものがあります –

答えて

0

場合によってはexecuteUpdateに失敗します。まず、executeQueryまたはexecuteStatmentsを使用して問題を解決してください。

それがうまくいかなかった場合は、私の意見では、データベースをオープンした後、SQL文を実行するための適切な方法がある:文の後

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

して閉じるデータベースが正常に実行されます。データベースにあなたのIDのタイプは何ですか?それは自動インクリメントですか?

コンソールにはどのようなエラーが表示されていますか?ブレークポイントを使って何が起きているのかを見てみてください。

0

構文が正しい、あなたがチェックしたいことがあり場合:あなたはFMDatabaseAdditionsVariadic.swiftFMDatabaseVariadic.swiftに含まれる場合のみ、3列

で構成さ

  • あなたのテーブルを事前にsharedInstance.database!.open()と呼ば

    • あなたのプロジェクトでは、executeUpdateを次のように呼ぶことができます:

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

    注::ここでは、FMDBを迅速に使用してデータベースにレコードを挿入するコードを送信します。

    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="" 
         } 
        } 
    } 
    } 
    
    関連する問題