• 数据持久化之SQLite数据库(SQLite.swift使用) 一、简介 SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了。它的处理速度比Mysql、PostgreSQL这两款著名的...

    数据持久化之SQLite数据库(SQLite.swift使用

    一、     简介

    SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了。它的处理速度比Mysql、PostgreSQL这两款著名的数据库都还快。SQLite提供的是一些C函数接口,你可以用这些函数操作数据库。通过使用这些接口,传递一些标准 sql 语句(以 char * 类型)给 SQLite函数,SQLite就会为你操作数据库

    一个数据库中的表就算是一个文件,一般是将这个文件放在沙盒Document目录下,文件后缀名一般为db(database)

    SQLite.swift:他就是为了swift专业打造的一SQLite为基础的swift封装的第三方库,Github地址:https://github.com/stephencelis/SQLite.swift

     

    二、     SQlite.swift的使用

    首先还是要导入SQlite.swift库(导入方法自行百度),导入响应的二进制文件,还要导入数据库SQlite[重点],设置完成后的界面应该有如下图中红线部分

    使用Sqlite.swift基本功能

     

    //: Playground - noun: a place where people can play
    //使用SQLite之前记得要添加在工程属性Build Phases 选项,增加SQLite iOS到Target Dependencies中
    //用于介绍SQlite.swift的基本使用地址https://github.com/stephencelis/SQLite.swift
    //详细使用地址:https://github.com/stephencelis/SQLite.swift/blob/master/Documentation/Index.md#sqliteswift-documentation
    
    import SQLite
    
    //**链接数据库
    let db = try Connection("path/to/db.sqlite3")//与数据库连接(重点)
    
    //**定义表属性
    let users = Table("users")                   //创建数据表名字
    let id = Expression<Int64>("id")            //定义表属性
    let name = Expression<String?>("name")
    let email = Expression<String>("email")
    
    //**建表
    try db.run(users.create { t in              //创建表只需要产生一次,多次运行会报错
        t.column(id, primaryKey: true)
        t.column(name)
        t.column(email, unique: true)
        })
    // CREATE TABLE "users" (
    //     "id" INTEGER PRIMARY KEY NOT NULL,
    //     "name" TEXT,
    //     "email" TEXT NOT NULL UNIQUE
    // )
    
    //*插入
    let insert = users.insert(name <- "Alice", email <- "alice@mac.com")  //插入的信息
    let rowid = try db.run(insert)//返回插入的id                            //执行插入
    // INSERT INTO "users" ("name", "email") VALUES ('Alice', 'alice@mac.com')
    
    for user in try db.prepare(users) {                       //采用循环式使用(.prepare:表示准备执行某表某操作)//返回表行
        print("id: \(user[id]), name: \(user[name]), email: \(user[email])")
        // id: 1, name: Optional("Alice"), email: alice@mac.com
    }
    
    
    //*选择
    // SELECT * FROM "users"
    
    let alice = users.filter(id == rowid) //[filter:过滤]     //查询(返回一个表不是行,无法直接输出)可以像操作数据表一样操作它(并且会同步到初始表)如果失败了,表的数量为0呗(db.scalar(alice.count) //0)
    
    
    //*更新
    try db.run(alice.update(email <- email.replace("mac.com", with: "me.com")))//执行更新
    // UPDATE "users" SET "email" = replace("email", 'mac.com', 'me.com') //这里还是部分更新
    // WHERE ("id" = 1)
    
    
    
    
    //*删除
    try db.run(alice.delete())                                           //执行删除
    // DELETE FROM "users" WHERE ("id" = 1)
    
    db.scalar(users.count) // 0    //【scalar:数量】                      //统计数据行数
    // SELECT count(*) FROM "users"
    
     ////建议,实际使用,将部分代码(如建表)分开到另外的地方,将一些其他的数据变量化
    
     /// SQLite.swift also works as a lightweight, Swift-friendly wrapper over the C API.
    
    //可以直接执行语句????
    let stmt = try db.prepare("INSERT INTO users (email) VALUES (?)")
    for email in ["betty@icloud.com", "cathy@icloud.com"] {
        try stmt.run(email)
    }
    
    db.totalChanges    // 3
    db.changes         // 1
    db.lastInsertRowid // 3
    
    for row in try db.prepare("SELECT id, email FROM users") {
        print("id: \(row[0]), email: \(row[1])")//用下标代替列
        // id: Optional(2), email: Optional("betty@icloud.com")
        // id: Optional(3), email: Optional("cathy@icloud.com")
    }
    
    db.scalar("SELECT count(*) FROM users") // 2
    

     

     

     

     提示:Sqlite数据库可以使用可视化工具MesaSQlite软件(例如:SQLite Manager)打开

    SQlite.swift的使用Github介绍(详细):https://github.com/stephencelis/SQLite.swift/blob/master/Documentation/Index.md- sqliteswift-documentation

     

    扩展链接:SQlite常用语句

    三、在OC开发语言下使用FMBD

    1、什么是FMDB

    FMDB是基于OC语言对SQlite数据库使用的封装,具有对象化概念(注意这里的对象化概念不是说可以直接存储对象,是指OC语言的基本对象【NSInteger(integer)、浮点型(real)、NSString (text) 、 对象或其他(blol)】,实际数据库存储的类型只有小括号内的四中基本的。对于图片等其他类型的可以转化为二进制存储在数据库中。

    数据库的创建以及增删查该使用介绍:宏创学院->数据本地化

    补充学习,如何传不定参数到sql语句中:http://www.jianshu.com/p/2ea0d60b15f0

    删除数据表:

     

    if (![database executeUpdate:@"delete from contactLists"]) {//  【learn:以下语句无法删除】drop contactList if exsists

     

    插入(注意插入语法和方式,不要两种混搭使用呀!):

    第一种:先写好sql语句(比较建议,调试可以查看插如语句数据有没有错误,name是已经定义的NSString变量)

     

    NSString *insertSql = [NSString stringWithFormat:@"insert into contactLists(userName,sign,age) values('%@','%@','%d')",name,@"签名",18];//[注意:这里必须指定值类型需,不可以在values中使用?会出错]

    第二种:更新的时候加入,这个时候的值类型可以使用?代替,但是数字前的加@。

    //在executeUpdate后面直接加sql语法时,使用?来表示OC中的对象,integer对应NSNumber,text对应NSString,blob对应NSData,数据内部转换FMDB已经完成,只要sql语法正确就没有问题
        if (![database executeUpdate:@"insert into person (id, name, sex, telephone) values (?, ?, ?, ?)", @4, @"gary", @"male", @"99996666"])

     

     

     

     

     

    对于查找:

     

    /*
        DQL查询数据
        SELECT        -- 查询
        name, age    -- 查询的字段
        FROM        -- 从哪张表中查询
        contactLists       -- 查询的表名
     */
    
    -- 查询指定字段
    SELECT name, age FROM contacLists;
    
    -- 查询所有字段
    SELECT * FROM contactLLists;
    
    -- 查询 age < 22 的记录的name, age字段
    SELECT name, age FROM contactLists WHERE age < 22;
    
    -- 查询 age < 22 的所有字段
    SELECT * FROM contactLists WHERE age < 22;
    
    -- 查询记录总数
    SELECT COUNT(*) FROM contactLists;
    
    -- 查询 age < 22 的记录总数
    SELECT COUNT(*) FROM contactLists WHERE age < 22;
    
    -- 查询最大的 age
    SELECT MAX(age) FROM contactLists;
    
    -- 查询最小的 age
    SELECT MIN(age) FROM contactLists;
    
    -- 查询所有记录的所有字段,根据 age 升序排序
    SELECT * FROM contactLists ORDER BY age;
    
    -- 查询所有记录的所有字段, 根据 age 降序排序
    SELECT * FROM contactLists ORDER BY age DESC;
    
    -- 使用多个字段排序,先按age降序排序,当age相同再根据height降序排序
    SELECT * FROM contactLists ORDER BY age DESC,height DESC;
    
    -- 返回指定的记录
    -- LIMIT常用于分页
    -- 0 表示跳过的3条
    -- 2 表示获取2条
    SELECT * FROM contactLists LIMIT 3, 2;
    
    -- 取出年龄最大的3条记录
    SELECT * FROM contactLists ORDER BY age DESC LIMIT 3;
    
    -- 查询是给字段取别名
    SELECT name AS contactLists, age AS age1, height AS height1 FROM Person;


    疑问:

     

    1.怎么设置数据表字段为不能为空,外键等?

     

     

     

     

     

     

     

     

    展开全文
  • 第一步:导入SQLite库文件(libsqlite...创建并且打开一个数据库#1>根据路径打开一个数据库, 如果数据库路径不存在, 就创建, 如果存在, 直接打开2>UTF8编码#3>参数1: 数据库文件的路径4>参数2: 一个已经打开的数据库(一定
  • 数据缓存和FMDB是很多程序需要做的事,但是swift又有一些坑,希望这篇文章能对大家有用,除了FMDB数据库的操作,还有swift单例的写法,if let在项目中实战用法,仅供参考: 直接上代码 // Copyright © 2016年...
  • 第一种查询方式:// 1. sql语句 let sql = "select * from t_stu... // 参数1: 一个已经打开的数据库 // 参数2: sql语句 // 参数3: 回调代码(*) 当查询到结果之后, 会调用这个代码块, 把结果返回给我们 // 参数1: 参
  • swift-创建数据库 2018-10-31 11:48:00
    import UIKit class LoginDatabase: NSObject { var fmdb = FMDatabase() func shareManager() -&gt; LoginDatabase { let manager = LoginDatabase() return manager } o...
  • Swift-Realm数据库的使用详解 概述 Realm 是一个跨平台的移动数据库引擎,其性能要优于 Core Data 和 FMDB - 移动端数据库性能比较, 我们可以在 Android 端 realm-java,iOS端:Realm-Cocoa,同时支持 OC 和 ...
  • 这是关于Swift中使用SQLite的系列文章,整个系列文章分别从打开、增、删、改、查,几个方面来介绍SQLite的具体使用,这一篇重点介绍一下如何打开。
  • (本文代码已升级至Swift4) 1,什么是Realm Realm 于2014 年7月发布,是一个跨平台的移动数据库引擎,专门为移动应用的数据持久化而生。其目的是要取代 Core Data 和 SQLite。 2,关于Realm,你要知道下面几...
  • 今天给大家带来的是堪称是一个可以替代SQLite,Core Data 的以及ORMlibraries的轻量级数据库—Realm移动端数据库。相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持JSON,流式api,数据变更通知,以及...
  • Swift 操作数据库 2015-07-21 19:05:35
    操作数据库 以一个实例展示输入名称和年龄保存到数据库,然后在另外一个tab里面显示,围绕一个TableView 来完成一个对数据的增、删、改、查的操作 。 具体实现代码:   1:创建工程的时候需要选择Use ...
  • 本demo包含 ios远程访问mysql数据库 swift+php+mysql 访问数据库示例 包含详细的搭建方法,包含 cordova +ios 远程访问数据库。webservice方式访问远程数据库
  • FMDB框架的简单使用(swift) 2016-05-23 17:41:55
    FMDB框架是OC的,在swift中使用,需要创建一个桥接文件转换;在桥接文件中导入FNDB的头文件;static let shareInstance = SQLiteTool() //创建和打开一个数据库 //如果有就直接打开,如果没有,创建一个再打开 lazy var...
  • FMDB是iOS平台的SQLite数据库框架,FMDB以OC的方式封装了SQLite的C语言API FMDB的优点 使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码提供了多线程安全的数据库操作方法,有效地防止数据混乱 FMDB中...
  • 在iOS上展示了Firebase API的快速入门示例的集合。 每个示例都包含Objective-C和Swift两种代码。
  • 本文主要介绍如何查询 SQLite 结果集,以及封装 SQLite 的操作方法。
  • ios开发,用是swift语言。如何链接SQLite数据库。求详细代码
  • FMDB 增删改查的小 demo,有兴趣的可以去下载看一下~_~Swift 版本 Demo地址
  • IOS中, 替代Core Data的数据库框架. 比Core Data的配置简单N倍.强烈建议查看官网文档: 1.0.2 英文文档: https://realm.io/docs/swift/latest/ 1.0.0中文文档: https://realm.io/cn/docs/swift/latest/1:Realm的库...
  • 使用Swift和SQLite创建iOS数据库应用 Build iOS Database Apps with Swift and SQLite What You'll Learn: How to create database and database applications using iOS and Swift How to insert, select, edit, ...
  • swift 3.0 创建数据步骤 一,导入描述文件 1. 2, .   3,   二,写桥接文件sqliteManager 1.文件里写入 #import &lt;sqlite3.h&gt;就可以了 2.把桥接文件添加到编译环境         ...
1 2 3 4 5 ... 20
收藏数 15,054
精华内容 6,021