其他分享
首页 > 其他分享> > IOS DB技术方案对比

IOS DB技术方案对比

作者:互联网

IOS DB技术方案对比

1. IOS 使用DB存储的方式

1. 1 直接使用Sqlite3 框架

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

1.使用麻烦:在Swift下使用SQLite很是麻烦(当然OC下也是挺麻烦的),苹果官方文档中,要使用原生的SQLite,要先导入framwork,然后建一个.h文件,还要做一次Swift与C语言的桥接(SQLite是基于C语言的),使用的时候还要写SQL语句.

数据类型表达式 标识类型
smallint 短整型
integer 整型
real 实数型
float 单精度浮点
double 双精度浮点
currency 长整型
varchar 字符型
text 字符串
binary 二进制数据
blob 二进制大对象
boolean 布尔类型
date 日期类型
time 时间类型
timestamp 时间戳类型
数据类型表达式 解释
PRIMARY KEY 将本参数这个为主键,主键的值必须唯一,可以作为数据的索引,例如编号。
NOT NULL 标记本参数为非空属性。
UNIQUE 标记本参数的键值唯一,类似主键。
DEFAULT 设置本参数的默认值
CHECK 参数检查条件,例如上面代码,写入数据是count必须大于时才有效。

1. 2 使用FMDB框架:

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

// 删除数据表

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

//插入
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"])





1. 3

1. 4

1. 5 使用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,name,DB,数据库,IOS,FMDB,使用,swift,对比
来源: https://blog.csdn.net/kyl282889543/article/details/100198041