2017-04-26 10 views
1

(Salary.db)をiOS(Swift)プロジェクト に接続し、データベースからデータを取得しますか?swite 3で既存のSQLiteを使用するには? (FMDB)

まず、Swift 3の既存のデータベースをどのように接続できますか?ここで

let fileURL = try! FileManager.default 
      .url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) 
      .appendingPathComponent("Salary.db") 

guard let database = FMDatabase(path: fileURL.path) else { 
    print("unable to create database") 
    return 
} 

guard database.open() else { 
    print("Unable to open database") 
    return 
} 

答えて

2

FMDBはスウィフトのために更新されていない素晴らしいObjective-Cのライブラリです、そして時にはスウィフトにぎこちない感じています。

import GRDB 

// GRDB's DatabaseQueue is similar to FMDB's FMDatabaseQueue 
let dbQueue = try DatabaseQueue(path: "/path/to/database.sqlite") 

try dbQueue.inDatabase { db in 
    // Same as FMDB's -[FMDatabase executeUpdate:withArgumentsInArray:] 
    try db.execute(
     "INSERT INTO pointOfInterests (title, favorite, latitude, longitude) " + 
     "VALUES (?, ?, ?, ?)", 
     arguments: ["Paris", true, 48.85341, 2.3488]) 

    // Same as FMDB's -[FMDatabase executeQuery:] and FMResultSet 
    let rows = try Row.fetchCursor(db, "SELECT * FROM pointOfInterests") 
    while let row = try rows.next() { 
     let title: String = row.value(named: "title") 
     let isFavorite: Bool = row.value(named: "favorite") 
     let coordinate = CLLocationCoordinate2DMake(
      row.value(named: "latitude"), 
      row.value(named: "longitude")) 
    } 
} 

あなたはドンときGRDBも」SQLを書くことを避けるためにことができます:あなたはFMDBと同じ機能、スウィフトに書かれているGRDB.swiftのようなライブラリを使用して堅牢、fast、および補助金検討すること

欲しい。詳細については、README.mdを参照してください。

+0

これは私が今までにテストした最高です!使いやすい。 – styl3r

1

は迅速

http://www.appcoda.com/fmdb-sqlite-database/

https://www.raywenderlich.com/123579/sqlite-tutorial-swift

でSQLiteのFO最高のチュートリアルでのGithub上の完全なプロジェクトを取得します。ここではclick here

は私のコードです:

のMod elManager.swift

import UIKit 
import FMDB 
let sharedInstance = ModelManager() 
class ModelManager: NSObject { 

    var database: FMDatabase? = nil 
    var dbPath:String? = nil 
    class func getInstance() -> ModelManager 
    { 
     if(sharedInstance.database == nil) 
     { 
      let documentsPath1 = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]) 
      let logsPath = documentsPath1.appendingPathComponent("datadb") 

      let dbpath = logsPath?.appendingPathComponent("test.db") 
      sharedInstance.database = FMDatabase(path:dbpath?.path) 
     } 
     return sharedInstance 
    } 

    func getUserProfile() -> Dictionary<String, String> { 

     sharedInstance.database!.open() 
     let strQuery = "select * from tbl_UserProfile limit 1" 
     let resultSet: FMResultSet! = sharedInstance.database!.executeQuery(strQuery, withArgumentsIn: nil) 
     var dict:Dictionary<String, String> = [:] 
     if (resultSet != nil) { 
      while resultSet.next() { 
       dict = resultSet.resultDictionary() as! [String : String] 
      } 
     } 
     return dict as Dictionary<String, String> 
    } 
} 

SidePanelVC.swift

import UIKit 

class SidePanelVC: UIViewController,UITableViewDataSource,UITableViewDelegate{ 
    @IBOutlet weak var lblWelcomeMsg: UILabel! 
    override func viewDidLoad() { 
     self.setUserProfile() 
    } 
    func setUserProfile() { 
     let userProfile = ModelManager.getInstance().getUserProfile() 
     let userName:String = userProfile["FullName"] ?? "empty" 
     lblWelcomeMsg.text = userName 
    } 
} 
+0

THANKS !!!!便利です –

関連する問題