Swift使用FMDB操作SQLite

  SQLite大家都懂的。本地数据库,在移动设备上使用广泛。IOS平台上自然也少不了它。最近自己折腾一个小App的时候需要使用sqlite本地数据库,上Github搜了下IOS下对SQLite的三方封装有个星星很多的FMDB。不过是Obiect-C的库,我是使用Swift的,本以为不能用了,不过后折腾了下发现在Swift下使用oc的库非常简单。下面我就介绍下如何在Swift下使用oc的FMDB库。

  1.下载

  第一步自然是去下载FMDB了。https://github.com/ccgus/fmdb

  2.建立桥接

  把下载下来的zip解压。打开项目文件夹,找到fmdb文件夹,把里面所有的文件选中,拖动到你的Swfit项目中。

  

  这时候XCode会自动提示你是否要建立桥接,选YES。XCode就会自动建立好oc到Swift的桥接了。

  

  接下来我们在Swift项目下找到一个叫做BabyLog-Bridging-Header的文件,打开编辑。在里面输入:#import "FMDB.h"

  

  这样我们FMDB到Swift的桥接头就建好了。

  3.使用

  有了桥接头,我们就可以欢快的使用FMDB了。下面给出CURD的简单实例,不多说看代码吧。

  获取数据库

  如果数据库不存在则建立数据库表,存在则返回数据库对象。  

//
//  Db.swift
//  BabyLog
//
//  Created by mj.zhou on 15/3/4.
//  Copyright (c) 2015年 mjstudio. All rights reserved.
//

import Foundation

var logs = [FeedLog]()

class Db{

    class func getDb()->FMDatabase{

        let filemgr = NSFileManager.defaultManager()
        let dirPaths =
        NSSearchPathForDirectoriesInDomains(.DocumentDirectory,
            .UserDomainMask, true)

        let docsDir = dirPaths[0] as String

        var databasePath = docsDir.stringByAppendingPathComponent("feedlog.db")

        if !filemgr.fileExistsAtPath(databasePath) {

            let db = FMDatabase(path: databasePath)

            if db == nil {
                println("Error: \(db.lastErrorMessage())")
            }

            if db.open() {
                let sql_stmt = "CREATE TABLE IF NOT EXISTS FEEDLOGS (ID TEXT PRIMARY KEY, COUNT INTEGER, TYPE INTEGER,LOGTIME DATETIME,LOGDAY TEXT, REMARK TEXT)"
                if !db.executeStatements(sql_stmt) {
                    println("Error: \(db.lastErrorMessage())")
                }
                db.close()
            } else {
                println("Error: \(db.lastErrorMessage())")
            }
        }

        let feedlogDb = FMDatabase(path: databasePath)
        return feedlogDb
    }

}

  插入数据

 class func insert(log:FeedLog){

        let sql="INSERT INTO FEEDLOGS (ID,COUNT,TYPE,LOGTIME,LOGDAY,REMARK) "+"VALUES (?,?,?,?,?,?)"
        let db = Db.getDb()
        db.open()
        db.executeUpdate(sql, withArgumentsInArray: [log.id,log.count,log.type,log.logTime,log.logDay,log.remark])
        db.close()
    }

  更新数据

    class func update(log:FeedLog){

        let sql = "UPDATE FEEDLOGS SET COUNT=?,TYPE=?,LOGTIME=?,LOGDAY=?,REMARK=? WHERE ID=?"
        let db = Db.getDb()
        db.open()
        db.executeUpdate(sql, withArgumentsInArray: [log.count,log.type,log.logTime,log.logDay,log.remark,log.id])
        db.close()
    }

  删除数据

    class func remove(id:String){
        let sql = "DELETE FROM FEEDLOGS WHERE ID = ?"
        let db = Db.getDb()
        db.open()
        db.executeUpdate(sql, withArgumentsInArray: [id])
        db.close()
    }

   查询数据

    class func select(id:String)->FeedLog?{

        let sql = "SELECT * FROM FEEDLOGS WHERE ID = ?"
        let db = Db.getDb()
        db.open()
        let rs = db.executeQuery(sql, withArgumentsInArray: [id])
        var log:FeedLog?=FeedLog()
        while rs.next() {
            log?.id=rs.stringForColumn("ID")
            log?.count=Int(rs.intForColumn("COUNT"))
            log?.type=Int(rs.intForColumn("TYPE"))
            log?.remark=rs.stringForColumn("REMARK")
            log?.logTime=rs.dateForColumn("LOGTIME")
            log?.logDay=rs.stringForColumn("LOGDAY")
        }
        db.close()

        return log
    }
时间: 2024-08-11 16:15:25

Swift使用FMDB操作SQLite的相关文章

(一一四)使用FMDB操作SQLite数据库

上节介绍了用系统自带的C语言库操作SQLite的方法,比较繁琐,使用FMDB会大幅度简化,并且是面向对象的,使用十分方便. 使用步骤如下: 先从github下载FMDB框架,然后把它导入工程. ①导入libsqlite3.0.dylib库. ②导入主头文件FMDatabase.h. ③创建数据库对象,传入路径,打开数据库,如果数据库不存在会被创建. NSString *sqlitePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDir

iOS-FMDB事务操作SQLite数据库

批量操作数据库的时候,我们经常会用到事务处理.事务是访问并可能更新数据库各种数据项的数据单元(unit),是恢复和并发的控制的基本单位. 事务具有四个属性. - 原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做. - 一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态.一致性与原子性是密切相关的. - 隔离性(isolation):一个事务的执行不能被其他事务干扰.即一个事务内部的操作及使用的数据对并发的

Qt操作Sqlite数据库

总算在Qt中把Sqlite操作成功了,写点总结吧.其实早就弄对了的,但查看数据库就是没有想要的结果.最后发现生成的执行文件在Dbug目录,与先前设定的路径不同,这才恍然大悟. 一.使用到数据库模块,需在pro文件中加入:QT += sql 二.所需数据库操作的相关头文件:#include <QSqlDatabase>#include <QSqlQuery>#include <QSqlRecord>#include <QSqlField> 三.连接Sqlite

.NET环境下,通过LINQ操作SQLite数据库

//对应数据库中的某个表 [Table(Name = "main.Student")]    public class Student    {        [Column(Name = "StuName", DbType = "varchar(50)")]        public string StuName { get; set; }        [Column(Name = "StuNo", DbType = &

无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.demo1" /> 上面targetPackage指定的包要和应用的package相同. (2)在清单文件中ap

C#使用System.Data.SQLite操作SQLite

使用System.Data.SQLite 下载地址:http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki 得到System.Data.SQLite.dll添加到工程引用: 建表,插入操作 static void Main(string[] args) { SQLiteConnection conn = null; string dbPath = "Data Source =" + Environmen

JDBC访问及操作SQLite数据库

SQLite 是一个开源的嵌入式关系数据库,其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下,只要确保SQLite的二进制文件存在即可开始创建.连接和使用数据库.  SQLite的下载页面:http://www.sqlite.org/download.html window操作系统下载:sqlite-dll-win32-x86-3081002.zip及sqlite-shell-win32-x86-3081002.zi

android操作sqlite数据库及心得

写这篇文章主要是网上的对sqlite的操作太多且太杂,很多时候都不能很好的运用到自己的项目中,结构不清晰,我自己写了一篇适合刚刚接触的人看的操作方法. 近来用android时要将一些数据保存起来,一开始用的是preferences,后来要保存的东西多了,发现用preferences明显不能满足要求了,而且发现用这个的话代码就变得有点乱了,所以才开始学习使用sqlite数据库,一开始以为不就是个数据库么,和平时的mysql啊或者是sqlserver都一样,都很简单的,但后来真正在用的时候才发现困难

mips平台使用jdbc操作sqlite的最终解决方案

1.概述: 本项目需要在多平台上(mips必须支持)操作嵌入式数据库sqlite,而最新的sqlite-jdbc-3.15.1.jar的本地驱动只含有少量的平台,于是解决支持mips平台实在必行.方法有多,具体如下. 1.1 SQLite三种JDBC驱动的区别 摘自http://blog.sina.com.cn/s/blog_654337ca01016x4n.html 在DBeaver中看到SQLite有三种JDBC驱动,查了它们官方网站的相关解释,发现它们还是挺不一样的. SQLite Wra