3.SQLite3的具体实现 

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1.为什么要使用SQLite3?•大量数据需要存储

•管理数据,存储数据

SQLite是一种关系型数据库(也是目前移动客户端的主流数据库)

2.SQLite3的几种存储类型

a.NULL: 表示该值为NULL值

b.INTEGER: 无符号整型值

c.REAL: 浮点值

d.TEXT: 文本字符串

e.BLOB: 二进制数据(比如文件)

•实际上SQLite是无类型的,建表时声明或不声明类型都可以,也就意味着创表语句可以这么写:

create table t_student(name, age);

但为了保持良好的编程规范,方便程序员之间的交流,编写建表语句的时候最好加上每个字段的具体类型

3.SQLite3的具体实现3.1•在iOS中要使用SQLite3,需要添加库文件:libsqlite3.dylib并导入主头文件,这是一个C语言的库

3.2创建数据库(sqlite3_opendb)

1//设置沙盒中的文件路径2//提示:在自己开发中,不要用.db结尾的sqlite数据库文件名3NSString *dbPath = [@"readme.db"appendDocumentDir];4NSLog(@"%@", dbPath);56/**7sqlite3_open891) 如果数据库存在,直接打开102) 如果数据库不存在,先创建数据库文件,再打开11*/12_db =NULL;1314if(SQLITE_OK == sqlite3_open([dbPath UTF8String], &_db)) {15NSLog(@"数据库打开成功");16}else{17NSLog(@"数据库打开失败");18}

3.31.单步执行操作(sqlite3_exec)

#PRagmamark 单步执行SQL

- (void)execSQL:(NSString *)sql message:(NSString *)message

{//执行SQL语句char*errmsg =NULL;if(SQLITE_OK == sqlite3_exec(_db, [sql UTF8String], NULL, NULL, &errmsg)) {

NSLog(@"%@成功!", message);

}else{//C语言中字符串输出应该用%sNSLog(@"%@失败 - %s", message, errmsg);

}

}

2.创建数据表

1//1. 检查沙盒,判断数据库文件是否存在,如果存在就不再建表;2//2. 数据库的方法:IF NOT EXISTS,放在表名之前即可3//定义SQL语句4NSString *sql =@"CREATE TABLE IF NOT EXISTS T_Person (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, gender INTEGER, age INTEGER, height REAL)";56[self execSQL:sql message:@"创建数据表"];

4.插入数据

1//1. SQL2NSString *sql = [NSString stringWithFormat:@"INSERT INTO T_Person (name, gender, age, height) VALUES ('%@', %d, %d, %f)", person.name, person.gender, person.age, person.height];34[self execSQL:sql message:@"新增个人记录"];

5.更新数据

1//修改2- (void)updatePerson:(Person *)person{345NSString *sql = [NSString stringWithFormat:@"update t_Person set name = '%@' where id=%d",person.name,person.ID];67[self execSQL:sql msg:@"修改"];89}

6.删除数据

1//删除2- (void)removePerson:(NSInteger)personID{345NSString *sql = [NSString stringWithFormat:@"delete from t_Person where id=%d",personID];67[self execSQL:sql msg:@"删除"];89}

7.查询操作

–sqlite3_prepare_v2检查sql的合法性

–sqlite3_step逐行获取查询结果

–sqlite3_coloum_xxx获取对应类型的内容

–sqlite3_finalize释放stmt

1//1. SQL2NSString *sql =@"SELECT id, name, age, gender, height FROM T_Person";34//2. 查询语句通常是使用字符串拼接出来的5//因此,在正常使用查询语句之前,需要检查SQL语句的语法正确!6sqlite3_stmt *stmt =NULL;78if(SQLITE_OK == sqlite3_prepare_v2(_db, [sql UTF8String], -1, &stmt, NULL)) {9NSLog(@"语法正确");10//利用句柄,逐一查询符合条件的数据11//sqlite3_step 每次提取一条查询的记录行,不断重复,一直取到最后一条记录位置12while(SQLITE_ROW ==sqlite3_step(stmt)) {13//取到行信息,逐一获取每一列的内容14//iCol对应的就是SQL语句中字段的顺序,从0开始15//根据实际查询字段的属性,使用sqlite3_column_xxx取得对应的内容即可16intID = sqlite3_column_int(stmt,0);17constunsignedchar*name = sqlite3_column_text(stmt,1);18intage = sqlite3_column_int(stmt,2);19intgender = sqlite3_column_int(stmt,3);20CGFloat height = sqlite3_column_double(stmt,4);2122//const unsigned char *直接输出看不出结果,需要转换23NSString *nameUTF8 = [NSString stringWithUTF8String:(constchar*)name];2425Person *p =[Person personWithID:ID name:nameUTF8 age:age gender:gender height:height];2627NSLog(@"%@", p);28}29}else{30NSLog(@"语法错误");31}

作者: 清澈Saup

出处: http://www.cnblogs.com/qingche/

本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航