SQLite3学习笔记

SQLite3是一款开源的嵌入式关系型数据库,可移植性好,易用性,内存开销小。
SQLite3是无类型的,意味着你可以保存任何类型的数据到任意表的任意字段中。比如下列的创表语句是合法的:
create table t_person(name,age)
为了保证可读性,建议还是把字段类型加上:
create table t_person(name text, age integer);
SQLite3常用的5种数据类型:text 、integer、float 、boolean、blob
---------------------------------

数据类型
{
  text     字段
  integer  数字
  real     浮点
  bolb     二进制  可以完整保存数据,例如照片
}

ddl(结构定义 CREATE ALTER DROP)
{

CREATE
CREATE TABLE 表的名字(每个字段的定义 字段名 数据类型...)
CREATE TABLE t_cjb(xiaoming text NOT NULL,
                   yuwen integer NOT NULL)


}
dml(数据操作 INSERT DELETE UPDATE SELECT)
{
INSERT
INSERT INTO 表名(字段列表) values(值的列表)
INSERT INTO studnet(id,name) VALUES (3,'linf') integer 可以不用''

UPDATE
UPDATE 表名 SET 字段名=值...WHERE 条件
UPDATE studnet SET telnum = '13100000000' WHERE name = 'xiaoming'

DELETE
DELETE FROM 表名 WHERE 条件
DELETE FROM studnet WHERE name = 'xiaoming'

SELECT
SELECT 字段列表 FROM 表名 WHERE 条件 ORDER BY 字段名
SELECT telnum (AS 电话号码) FROM studnet WHERE name = 'xiaoming'
SELECT * FROM studnet WHERE name = 'xiaoming'       //显示所有列
SELECT * FROM studnet WHERE name LIKE '张%'          //模糊查询,like
SELECT * FROM studnet WHERE age>20 AND age<30        //显示所有列,*
SELECT * FROM studnet WHERE age>20 ORDER BY age      //排序,大于20的年龄从小到大排
SELECT * FROM studnet WHERE age>20 ORDER BY age DESC//排序,大于20的年龄从大到小排

统计函数(数据类型为intege real)
SELECT count(*) FROM studnet WHERE age>20 AND age<30 //求个数
SELECT sum(age) FROM studnet                         //求总数
SELECT avg(age) FROM studnet                         //求平均数
SELECT *,yuwen+shuxue+yingyu AS sum FROM student    //各个列总和

此部分引自:http://my.oschina.net/u/2346786/blog/515540?fromerr=kl04EcAq
------------------------------------
在iOS中使用SQLite3,首先要添加库文件libsqlite3.dylib和导入头文件
这里写图片描述
创建、打开、关闭数据库
1.创建或打开数据库

首先获取iPhone上sqlite3的数据库文件的地址

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"database_name"];

获取地址后,打开数据库

sqlite3 *db;
int result = sqlite3_open([path UTF8String], &db); 

上面的代码解析:sqlite3_open()将根据文件路径打开数据库,如果不存在,则会创建一个新的数据库。如果result等于常量SQLITE_OK,则标示成功打开数据库。

sqlite3 *db;是一个打开的数据库实例
Sqlite3数据库打开时的返回值及其所代表的含义:
这里写图片描述
数据库访问的路径必须以C字符串传入(而非NSString)
2.关闭数据库:sqlite3_close(db)
3.执行创表语句

char *errorMsg;  // 用来存储错误信息
char *sql = "create table if not exists t_person(id integer primary key autoincrement, name text, age integer);";
int result = sqlite3_exec(db, sql, NULL, NULL, &errorMsg);

上述代码解释:sqlite3_exec()可以执行任何SQL语句,比如创建表、更新、插入和删除操作。但是一般不用它执行查询语句,因为它不会返回查询到的数据
sqlite3_exec()还可以执行的语句:
开启事务:begin transaction;
回滚事务:rollback;
提交事务:commit;
4.带占位符插入数据

char *sql = "insert into t_person(name, age) values(?, ?);";
sqlite3_stmt *stmt;
if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) == SQLITE_OK) {
    sqlite3_bind_text(stmt, 1, "文本字符", -1, NULL);
    sqlite3_bind_int(stmt, 2, 27);
}
if (sqlite3_step(stmt) != SQLITE_DONE) {
    NSLog(@"插入数据错误");
}
sqlite3_finalize(stmt);

代码解析:
sqlite3_prepare_v2()返回值等于SQLITE_OK,说明数据库SQL语句已经准备成功,没有语法问题
sqlite3_bind_text():大部分绑定函数都只有3个参数
- 第一个参数是:sqlite3_stmt *类型
- 第二个参数是:指占位符的位置,第一个占位符的位置是1,不是0
- 第三个参数是:指占位符要绑定的值
- 第四个参数是:指在第3个参数中所传递数据的长度,对于C字符串,可以传递 -1 代替字符串的长度
- 第五个参数是:一个可选的函数回调,一般用于在语句执行后完成内存清理工作
sqlite_step():执行SQL语句,返回SQLITE_DONE代表成功执行完毕
sqlite_finalize():销毁sqlite3_stmt *对象
5.查询数据

char *sql = "select id,name,age from t_person;";
sqlite3_stmt *stmt;
if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) == SQLITE_OK) {
    while (sqlite3_step(stmt) == SQLITE_ROW) {
        int _id = sqlite3_column_int(stmt, 0);
        char *_name = (char *)sqlite3_column_text(stmt, 1);
        NSString *name = [NSString stringWithUTF8String:_name];
        int _age = sqlite3_column_int(stmt, 2);
        NSLog(@"id=%i, name=%@, age=%i", _id, name, _age);
    }
}
sqlite3_finalize(stmt);

代码解析:
sqlite3_step()返回SQLITE_ROW代表遍历到一条新纪录
sqlite3_column_*()用于获取每个字段对应的值,第2个参数是字段的索引,从0开始。

本文介绍的不完善,有兴趣的童鞋可以参考下面的链接!
参考资料:
http://mobile.51cto.com/iphone-392479.htm
http://my.oschina.net/u/2346786/blog/515540
http://www.xuebuyuan.com/2226926.html
http://blog.youkuaiyun.com/huifeidexin_1/article/details/7518179

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值