SQLite的使用--SQLite语句
- SQLite是一款轻型的嵌入式关系数据库
- 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了
- 目前广泛应用于移动设备中存储数据(Android/iOS)
- 处理数据的速度非常快,效率非常高
- 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库(类似于excel表格)
- 数据库可以分为2大种类(了解)
- 关系型数据库(主流)
- 对象型数据库






- 创建表时需要指定该表有哪些字段
- 比如学生表有:学号/姓名/年龄/身高等
- 比如添加一条学生数据:型号:1/姓名:why/年龄:18/身高:1.88

// 创建数据库
// 文件路径 :
// 1.获取数据库的存放路径(沙盒中)
let filePath = "/Users/xiaomage/Desktop/123.sqlite"
let cString = filePath.cStringUsingEncoding(NSUTF8StringEncoding)! // 2.定义数据库对象(后面还要用,定义一个属性替代)
// var db : COpaquePointer = nil // 3.打开/创建 数据库对象
if sqlite3_open(cString, &db) == SQLITE_OK {
print("创建/打开数据库成功")
} else {
print("失败")
}
}
CREATE TABLE IF NOT EXISTS '表名' (
'字段名' 类型(INTEGER, REAL, TEXT, BLOB)
NOT NULL 不允许为空
PRIMARY KEY 主键
AUTOINCREMENT 自增长,
'字段名2' 类型,
...
- CREATE TABLE:创建一张表
- IF NOT EXISTS:不存在则创建
- 't_student':表的名称
- NOT NULL:不允许为空
- PRIMARY KEY:主键
- AUTOINCREMENT:自动增加
- 'id' INTEGER:有一个ID字段,类型是INTEGER

5.删除表
DROP TABLE IF EXISTS '表名';
// 1.获取要执行的SQL语句
let createTableSQL = "DROP TABLE IF EXISTS t_student;" // 2.执行语句
if sqlite3_exec(db, createTableSQL.cStringUsingEncoding(NSUTF8StringEncoding)!, nil, nil, nil) == SQLITE_OK {
print("删除表成功")
} else {
print("删除表失败")
}
}
class SQLiteManager { // 设计单例对象
static let shareInstance : SQLiteManager = SQLiteManager() // 数据库对象
var db : COpaquePointer = nil
} // MARK:- 打开数据库的操作
extension SQLiteManager {
func openDB(filePath : String) -> Bool {
// 1.将Swift字符串转成C语言的字符串
let cString = filePath.cStringUsingEncoding(NSUTF8StringEncoding)! // 3.打开/创建数据库对象
return sqlite3_open(cString, &db) == SQLITE_OK
}
} // MARK:- 执行SQL语句
extension SQLiteManager {
func execSQL(sqlString : String) -> Bool {
// 1.将Swift字符串转成C语言的字符串
let cSQLString = sqlString.cStringUsingEncoding(NSUTF8StringEncoding)! // 2.执行语句
return sqlite3_exec(db, cSQLString, nil, nil, nil) == SQLITE_OK
}
}
INSERT INTO 't_student' (name, age, height) VALUES ('why', 18, 1.88);
- INSERT INTO: 插入数据
- 't_student': 在哪一个表中插入数据
- (数据的字段): 给哪些字段插入数据
- VALUES ('why', 18, 1.88): 插入的具体值
// 1.插入数据(获取插入语句)
let insertSQL = "INSERT INTO t_student (name, age, height) VALUES ('why', 18, 1.88);"
// 2.执行语句
SQLiteManager.shareInstance.execSQL(insertSQL)
UPDATE 't_student' SET 字段 = '值' WHERE 条件判断;
- UPDATE: 跟新数据
- 't_student': 在哪一个表中更新数据
- SET 字段 = '值': 更新怎样的数据
- WHERE 条件判断: 更新哪些数据
// 1.获取更新语句
let updateSQL = "UPDATE t_student SET name = 'yz';"
// 2.执行语句
SQLiteManager.shareInstance.execSQL(updateSQL)
DELETE FROM t_student;
- DELETE FROM: 从表中删除数据
- t_student : 表名
- 可以跟条件也可以不跟:不跟表示删除所有的数据
// 1.获取删除语句
let deleteSQL = "DELETE FROM t_student;"
// 2.执行语句
SQLiteManager.shareInstance.execSQL(deleteSQL)
// 模拟从网络服务器中请求到很多数据(实际中数据是网络来的,这里自己写模拟)
for _ in ..< {
let name = "zs\(arc4random_uniform(100))"
let age = Int( + arc4random_uniform())
let height = + Double(arc4random_uniform()) / 10.0 let stu = Student(name: name, age: age, height: height) stus.append(stu)
}
class Student: NSObject {
var name : String = ""
var age : Int =
var height : Double = 0.0 init(name : String, age : Int, height : Double) {
self.name = name
self.age = age
self.height = height
}
} extension Student {
func insertDB() {
// 1.插入数据(获取插入语句)
let insertSQL = "INSERT INTO t_student (name, age, height) VALUES ('\(name)', \(age), \(height));"
// 2.执行语句
SQLiteManager.shareInstance.execSQL(insertSQL)
}
}
for stu in stus {
stu.insertDB()
}
dispatch_async(dispatch_get_global_queue(, )) {
//获取插入数据开始时间
let startTime = CACurrentMediaTime()
// 开启事务
let startSQL = "BEGIN TRANSACTION;"
SQLiteManager.shareInstance.execSQL(startSQL) for stu in self.stus {
stu.insertDB()
}
//关闭事务
let commitSQL = "COMMIT TRANSACTION;"
SQLiteManager.shareInstance.execSQL(commitSQL)
//获取插入数据结束时间
let endTime = CACurrentMediaTime()
//获取插入数据耗时
print(endTime - startTime)
}
}
1.查询语句

// 1.获取查询语句
let querySQL = "SELECT * FROM t_student LIMIT 30, 30;"; // 2.执行语句 (执行语句封装到了一个方法里面)
guard let dictArray = SQLiteManager.shareInstance.querySQL(querySQL) else {
return
} // 3.遍历数组
var tempArray = [Student]()
for dict in dictArray {
// 字典转模型
tempArray.append(Student(dict: dict))
} for stu in tempArray {
print(stu.name, stu.age)
} //执行语句代码实现
func querySQL(querySQL : String) -> [[String : NSObject]]? {
// 0.将Swift字符串转成C语言字符串
let cString = querySQL.cStringUsingEncoding(NSUTF8StringEncoding)! // 1.定义游标(指针)
var stmt : COpaquePointer = nil // 2.给游标赋值
// 1> 参数一: 数据库对象
// 2> 参数二: SQL语句
// 3> 参数三: 该SQL语句的长度 -1 --> 系统自动计算
// 4> 参数四: 游标的地址
guard sqlite3_prepare_v2(db, cString, -, &stmt, nil) == SQLITE_OK else {
return nil
} // 3.取出所有的数据
// 3.1.定义字典数组
var dictArray = [[String : NSObject]]() // 3.2.判断是否有该条数据
while sqlite3_step(stmt) == SQLITE_ROW {
// 3.3.获取字段的个数
let count = sqlite3_column_count(stmt)
// 3.4.定义字典
var dict = [String : NSObject]()
// 3.5.遍历每一个字典
for i in ..<count {
// 3.6.取出该列的键
let ckey = sqlite3_column_name(stmt, i)
guard let key = String(UTF8String : ckey) else {
continue
}
// 3.7.取出该列的值
let cvalue = UnsafePointer<Int8>(sqlite3_column_text(stmt, i))
//将c语言字符串转成swift字符串
let value = String(UTF8String : cvalue) // 3.8.将键值对放入到字典中
dict[key] = value
}
// 3.9.将字典放入到数组中
dictArray.append(dict)
}
return dictArray
}
}
private lazy var db : FMDatabase = FMDatabase(path: "/Users/lgp/Desktop/321.sqlite")
// 创建FMDatabase对象
// 打开/创建数据
if db.open() {
print("打开成功")
} else {
print("失败")
}
// 1.获取创建表的语句
let createSQL = "INSERT INTO t_person (name, age, height) VALUES ('why', 18, 1.88);"
// 2.执行语句
db.executeUpdate(createSQL, withArgumentsInArray: nil)
func querySQL(querySQL : String) -> [[String : NSObject]]? {
// 0.判断db是否有值 db定义为属性
guard let db = db else {
return nil
}
// 1.执行查询语句 结果为集合
let results = db.executeQuery(querySQL, withArgumentsInArray: nil) // 2.获取数据
// 2.0.定义数据
var dictArray = [[String : NSObject]]() // 2.1.判断结果集中是否有内容
while results.next() { let count = results.columnCount() var dict = [String : NSObject]() for i in ..<count {
let key = results.columnNameForIndex(i)
let value = results.stringForColumnIndex(i) dict[key] = value
}
dictArray.append(dict)
}
return dictArray
}
SQLite的使用--SQLite语句的更多相关文章
- SQLite的时候判断语句是否纯在:出现RuntimeException
写SQLite的时候判断语句是否纯在: public boolean exist(long id) { String filter = FRIEND_KEY_ID + "=" + ...
- 【Android】13.3 使用SQLite.NET-PCL访问SQLite数据库
分类:C#.Android.VS2015: 创建日期:2016-02-26 一.简介 本章开头已经说过了,SQLite.NET-PCL用起来很爽,这一节咱们看看怎样使用吧. 二.示例3运行截图 下面左 ...
- 纯 Swift 封装的 SQLite 框架:SQLite.swift
SQLite.swift 是一个使用纯 Swift 语言封装 SQLite3 的操作框架. 特性: 简单的查询和参数绑定接口 安全.自动类型数据访问 隐式提交和回滚接口 开发者友好的错误处理和调试 文 ...
- Sqlite教程(3) SQlite Query
Configuration是属於util工具包. 把所有环境设置都定义在Configuration工具包里,那麽这个Configuration就是独立的单一入囗. 在架构上,可以提高耦合度,而且出Bu ...
- SQLite中的PRAGMA语句攻略
原文地址:http://iihero.iteye.com/blog/1189633 PRAGMA语句是SQLITE数据的SQL扩展,是它独有的特性,主要用于修改SQLITE库或者内数据查询的操作.它采 ...
- SQLite常用函数及语句
SQLite3.0使用的是C的函数接口,常用函数如下: sqlite3_open() //打开数据库 sqlite3_close() //关闭数据库 sqlite3_exec() //执行sql语句, ...
- 【SQLite】select into 语句
sqlite不支持类似sqlserver中的select into 语法 在SQL Server中,我们要将一个表中的数据复制到一个新表中,可以这样写: SELECT * INTO newtable ...
- [Sqlite] 移动嵌入式数据库Sqlite日报SQL操作语句汇总
,EXPLAIN分析 没有建立索引之前.分析都是表扫描: sqlite> EXPLAIN SELECT * FROM COMPANY WHERE Salary < 20000; add ...
- sqlite时间戳转时间语句(时间转时间戳)实例
sqlite时间戳转时间.时间转时间戳的方法 实现代码: sqlite, 'unixepoch', 'localtime'); +----------------------------------- ...
随机推荐
- 省略文字的css
在显示一行文字时,如果容器太小,为了显示出省略字符,可以使用 ellipsis { white-space: nowrap; overflow: hidden; text-overflow: elli ...
- RSA_RSA算法原理(二)
上一次,我介绍了一些数论知识. 有了这些知识,我们就可以看懂RSA算法.这是目前地球上最重要的加密算法. 六.密钥生成的步骤 我们通过一个例子,来理解RSA算法.假设爱丽丝要与鲍勃进行加密通信,她该怎 ...
- Hibernate中主键生成策略
主键生成策略 increment identity sequence native uuid assigned 1) increment 由hibernate完成 主键递增, 原理:select ma ...
- Oracle-表格的建立
表格的建立,在table分列鼠标右键: 在名称写上此表格的名称,最好用英文,中文容易报错.表空间默认为user,也可以自己选择. 数据类型,一个汉字占用3个字节,最好多定义一些字节,防止出错. 可为空 ...
- 关于 QRCode 的问题[C# 生成二维码固定大小]
一直在纠结了一天多的问题:就是为什么生成的二维码会随着内容多少的变化而变化大小,但是为什么网上做出来的二维码内容变化但是大小却没有变化?刚开始的时候我就一直围绕着是不是根据缩略图来做的,但是这个方法行 ...
- 如何防御“神器”Mimikatz窃取系统密码?
Mimikatz是一款能够从Windows中获取内存,并且获取明文密码和NTLM哈希值的神器,本文将介绍如何防御这款软件获取密码. Mimikatz介绍 Mimikatz是一款能够从Windows认证 ...
- 自动解析URL
function parseURL(url) { var a = document.createElement('a'); a.href = url; return { source: url, pr ...
- Android中如何解决输入法键盘和activity页面遮挡的问题
不希望遮挡设置activity属性android:windowSoftInputMode="adjustPan" 希望动态调整高度android:windowSoftInputMo ...
- Windows内核 WDM驱动程序的基本结构和实例
WDM驱动的基本结构: WDM驱动模型是建立在NT式驱动程序模型基础之上的.对于WDM驱动程序来说,一般都是基于分层的,即完成一个设备的操作,至少要由两个驱动设备共同完成. 1)物理设备对象和功能设备 ...
- jquery send(data) 对data的处理
// Convert data if not already a string if ( s.data && s.processData && typeof s.dat ...