SQLite3学习笔记

前端之家收集整理的这篇文章主要介绍了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,&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,-1,&stmt,NULL) == sqlITE_OK) {
    sqlite3_bind_text(stmt,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,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,_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://www.jb51.cc/article/p-erljfcxm-ur.html

猜你在找的Sqlite相关文章