// 基本步骤
// 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 mutext spinlock 性能分析

    http://www.parallellabs.com/2010/01/31/pthreads-programming-spin-lock-vs-mutex-performance-analysis/ ...

  2. IOS 设置导航栏全局样式

    // 1.设置导航栏背景 UINavigationBar *bar = [UINavigationBar appearance]; [bar setBackgroundImage:[UIImage r ...

  3. View Controller Relationships

    Parent-child relationshipsParent-child relationships are formed when using view controller container ...

  4. 百度地图API 定位一直4.9E-324

    使用百度地图Android SDK 7.0定位坐标一直为4.9E-324,网上搜索了很多,但是均未解决我的问题,在此坐下解决记录,在设置权限中将应用添加信任即可!android 6.0 其他版本未测! ...

  5. virt-manager管理整个云平台的instances

    http://people.redhat.com/~rjones/virt-top/faq.html

  6. javaweb 拦截器报错

    拦截器报错   The content of element type "interceptor-ref" must match "(param)*".内容元素 ...

  7. 在angular中实现下拉框的两种方式 ng-repeat和 ng-option

    1. ng-repeat实现下拉框: select下拉框里option组装成下拉框,这里利用ng-repeat指令来创建 实现源码   <!DOCTYPE html> <html&g ...

  8. 提取数据库字段里面的值,并改变+图片懒加载,jquery延迟加载

    要求:手机端打开某个页面的详细信息,因为网速或者别的原因,响应太慢,因为图片大的原因,希望先进来,图片在网页运行的情况再慢慢加载(jquer延迟加载) http://www.w3cways.com/1 ...

  9. Linux解压和打包jar

    linux 中解压jarunzip XXX.jar -d app 打jar 进入到解压目录里面(app)jar cvfm0 MR-XDR-JMR-NEW.jar META-INF/MANIFEST.M ...

  10. 用vs2013(cpu-only)调试caffe的mnist

    在调试Mnist例子之前,首先需要用vs2013编译好caffe.详情请参见: [caffe-Windows]caffe+VS2013+Windows无GPU快速配置教程 按照上述教程编译好caffe ...