// 基本步骤
// 1. 打开数据库
// 2. 处理数据
// 3. 关闭数据库

//先设置全局变量
lazy var documentsPath: String = {
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
return paths.first!
}() //指针
var db: OpaquePointer? = nil
var stmt: OpaquePointer? = nil
// 创建或打开数据库
func createOrOpenDatabase() {
print("\(NSHomeDirectory())") //创建数据库文件路径,并要改成UTF-8类型
let path: NSString = "\(documentsPath)/test.sqlite3" as NSString
let filename = path.utf8String //判断打开数据库是否成功(若没有数据库,会自动生成),不成功则打印输入"create or open failed..."并关闭数据库
if sqlite3_open(filename, &db) != SQLITE_OK {
print("create or open failed...")
sqlite3_close(db)
}
} // 创建学生表
func createTable() {
//拼接sql语句并转为UTF-8
let string: NSString = "create table if not exists Student(id integer primary key autoincrement, sno text, name text, score integer)"
let sql = string.utf8String
//执行sql语句
if sqlite3_exec(db, sql, nil, nil, nil) != SQLITE_OK {
print("create table failed...")
sqlite3_close(db)
}
} //slq的新增操作
func insertStudent(sno: String, name: String, score: Int) {
// 准备SQL语句
let string: NSString = "insert into Student(sno, name, score) values(?, ?, ?)"
let sql = string.utf8String // 解析SQL文本语句
//sqlite3_prepare_v2解析
//参数1:当前数据库指针
//参数2:要解析的sql语句(默认以0结束)
//参数3:因为sql语句默认以0结束,为了出去那个0,所以是-1
//参数4:另外一个指针用于解析后存储,最后一个参数忘了,你直接写nil就可以了
if sqlite3_prepare_v2(db, sql, -, &stmt, nil) != SQLITE_OK {
sqlite3_close(db)
print("\(sno), insert failed...")
} // 绑定参数
let csno = (sno as NSString).utf8String
let cname = (name as NSString).utf8String sqlite3_bind_text(stmt, , csno, -, nil)
sqlite3_bind_text(stmt, , cname, -, nil)
sqlite3_bind_int(stmt, , Int32(score)) // 执行SQL语句
if sqlite3_step(stmt) == SQLITE_ERROR {
sqlite3_close(db)
print("\(sno), insert failed...")
} else {
// 释放资源
sqlite3_finalize(stmt)
}
} // 修改学生数据
func updateStudent() {
// 准备SQL语句
let string: NSString = "update Student set score = 100 where name like 'a%'"
let sql = string.utf8String // 执行SQL语句
//sqlite3_exec后面的三个参数可以不用关,就写nil就可以了
if sqlite3_exec(db, sql, nil, nil, nil) != SQLITE_OK {
sqlite3_close(db)
print("update failed...")
}
} // 删除学生数据
func deleteStudents() {
// 准备SQL语句
let string: NSString = "delete from Student where score < 60"
let sql = string.utf8String // 执行SQL语句
if sqlite3_exec(db, sql, nil, nil, nil) != SQLITE_OK {
sqlite3_close(db)
print("delete failed...")
}
}
总结:
增删改(如果没有参数,则第2,3步都不用写)
1:准备sql语句
如:let string: NSString = "insert into Student(sno, name, score) values(?, ?, ?)"
2:解析sql语句 如:sqlite3_prepare_v2(db, sql, -1, &stmt, nil)
3:绑定参数
如:let csno = (sno as NSString).utf8String
sqlite3_bind_text(stmt, 1, csno, -1, nil)
4执行语句 如:sqlite3_step(stmt)
5:释放资源 如:sqlite3_finalize(stmt)
 
 
查询
1:准备sql语句
2:解析sql语句
3: 执行SQL语句
获取每条记录的数据(某些字符类型还要转换才能显示你要的结果)
sqlite3_column_text(stmt, 0)
4:释放资源

sqlite的增删改查的更多相关文章

  1. (转)SQLite数据库增删改查操作

    原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...

  2. Android SQLite 数据库 增删改查操作

    Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...

  3. IOS sqlite数据库增删改查

    1.简单介绍 简单封装sqlite数据库操作类 BaseDB 用于完毕对sqlite的增删改查.使用前先导入libsqlite3.0.dylib库 2.BaseDB.h // // BaseDB.h ...

  4. 一步一步教你用c# entity framework6 连接 sqlite 实现增删改查

    使用entity framework6 连接 SQLite 数据库 前言 很多小型应用程序中,都要使用数据库,而现在比较流行的本地数据库非SQLite莫属. 第一步:前期准备 开发环境:vs2015 ...

  5. 一、Android四大框架之ContentProvider的学习与运用,实现SQLite的增删改查。

    本文系原创博客,文中不妥烦请指出,如需转载摘要请注明出处! ContentProvider的学习与运用 Alpha Dog 2016-04-13  10:27:06 首先,项目的地址:https:// ...

  6. 使用C#书写SQLite数据库增删改查语句(以及插入byte[]时遇到的问题总结)

    在没有使用SQLite这种轻量级的数据库之前,只使用过Sqlserver2008进行数据的增删改查,公司使用的是大型的ORACLE数据库,还没有真正的会使用它.那时候觉得数据库很庞大,然而遇到SQLi ...

  7. IOS Sqlite用户界面增删改查案例

    1.案例简单介绍 对SQLite操作进行了简单的封装,将对数据表操作转变成对对象的操作,并通过UI界面完毕对用户表的增.删.改.查,执行界面例如以下图所看到的 a 2.项目project文件夹 Use ...

  8. Sqlite创建增删改查

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. 简单使用SQLite 的增删改查

    1.插入 第一种方式 INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 200 ...

随机推荐

  1. Linux内核模块设计

    内核的设计有两种方式:单内核和微内核,两者各有优劣,关于两者的比较可以参见wiki.windowds和Solaris采用微内核结构. Linux内核采用单内核结构,设计比较简单,但单内核的理念是把所有 ...

  2. C#泛型代理、泛型接口、泛型类型、泛型方法

    //http://www.cnblogs.com/JeffreySun/archive/2012/11/14/2770211.html //http://www.baqima.com/a/2628.h ...

  3. Linux学习笔记——重点推荐的Linux网络在线学习资源

     首先非常感谢百度,感谢网络的搜索引擎技术,也非常感谢学习资源的贡献者和组织! 1:http://billie66.github.io/TLCL/book/zh/ 2:http://www.ha97. ...

  4. http请求提交cookie

    package leadsServerTest;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient ...

  5. md5算法

    md5算法 不可逆的:原文-->密文.用系统的API可以实现: 123456 ---密文 1987 ----密文: 算法步骤: 1.用每个byte去和11111111做与运算并且得到的是int类 ...

  6. CSS 宝典

    input点击时候,有个灰块 outline:medium; -webkit-tap-highlight-color:rgba(0,0,0,0); -webkit-user-modify:read-w ...

  7. OAuth认证

    OAuth简介 OAuth是在不提供用户名和密码的情况之下,授权第三方应用访问Web资源的安全协议. OAuth允许用户提供一个令牌给第三方网站,一个令牌对应一个特定的第三方网站,同时该令牌只能在特定 ...

  8. Tcp/IP

     在数据传输完毕之后,通信双方都可以发出释放连接的请求.释放连接的过程为如上图所示:      1)数据传输结束后,主机A的应用进程先向其TCP发出释放连接请求,不在发送数据.TCP通知对方要释放从A ...

  9. sass安装与使用

    安装: 1.安装ruby 2.安装Koala,用于sass编译 3.gem install sass(mac电脑安装如果安装报错,一般是权限问题,没有权限安装到ruby下面,因此可以尝试sudo ge ...

  10. LeetCode-179. Largest Number

    179. Largest Number Given a list of non negative integers, arrange them such that they form the larg ...