使用SQLite 需要引入动态库libsqlite3.tbd ,在对应的操作类文件前导入
#import
在@interface中创建sqlite对象 " sqlite3 *sql "
1、创建数据仓库,使用该方法
sqlite3_open(const char *filename, sqlite3 **ppDb)
参数1:const char *filename 存放路径
参数2:sqlite3 **ppDb sqlite对象的双重指针,即“&sql"
参数3:返回SQLITE_OK
2、创建数据库表格,使用以下方法
sqlite3_exec(sqlite3 *, const char *sql, int (*callback)(void *, int, char **, char **), void *, char **errmsg) //后面三个参数如不需要可填null
参数一:sqlite3 * sqlite对象
参数二:const char *sql char*类型的sql语句。例如 "create table if not exists 表名称 (name text primary key,age integer,lastname text)" ,其中name 为主键,唯一,如果使用相同name 则会报error,判断是否存在同名的user表格 ,如果不存在就创建,否之不创建
参数三:int (*callback)(void *, int, char **, char **) 执行exec时,每查到一条记录,会调用这个回调函数
参数1:void* 传递来的数据
参数2:int 一条记录有多少个字段(即这条记录的列数)
参数3:char** 查询出来的数据(即:每个字段的值 )。它是个一维数组(不要以为是2维数组),每个元素都是一个字符串 char * 值,是一个字段内容
参数4:char** 每一个字段的字段名称(即:列名),与 参数三 对应
参数四:void * 传递数据,可以是任意值。会传递到回调函数callback,作为它的第一个参数传入
参数五:char **errmsg 错误信息
3、数据库修改
1)更新
sql语句: update 表名 set name = ”hello friend“ where 条件 例如:"update user set name="hello friend" where age = 12" 如果 age = 12,就修改对应的name值为hello friend
调用sqlite3_exec 方法
2)删除
sql语句 :delete from 表名 where 条件 例如:”delete from user where name="hello friend"
3)插入
sql语句:insert into 表名 values (1,"hello world",12)
4、数据查询
调用该方法,实现查询,返回职位SQLITE_OK,查询到的值将会 存入sqlite3_stmt **ppStmt 参数中。
sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail)
//sqlite3 *db sqlite对象(句柄)
//const char *zSql sql语句 select 列名(*代表全部)from 表名 例如"select * from user"
//int nByte sql语句的最大字节长度,-1代表无限制
//sqlite3_stmt **ppStmt 外部声明的sqlite3_stmt 对象的地址 例如”&ppStmt"
//const char **pzTail 指向zSpl未使用的部分/* OUT: Pointer to unused portion of zSql */
例如
/*sqlite3_stmt *stmt;
sqlite3_prepare_v2(sql, "select * from user", -1, &stmt,NULL);*/
遍历打印,其中sqlite3_step(sqlite3_stmt *)为迭代方法,其SQLITE_ROW= 100 ,其方法会返回一个状态码,与SQLITE_ROW对应
方法
sqlite3_column_int(sqlite3_stmt *, int iCol)//参数int iCol 为对应的列数,从0开始 ,返回为int型数据
sqlite3_column_text(sqlite3_stmt *, int iCol)//同上,返回const unsigned char *型数据,需进行转化为char* 类型,后续转NSString