数据库操作之SQLite

使用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);*/

数据库操作之SQLite_第1张图片

遍历打印,其中sqlite3_step(sqlite3_stmt *)为迭代方法,其SQLITE_ROW= 100 ,其方法会返回一个状态码,与SQLITE_ROW对应


数据库操作之SQLite_第2张图片

方法

sqlite3_column_int(sqlite3_stmt *, int iCol)//参数int iCol 为对应的列数,从0开始 ,返回为int型数据

sqlite3_column_text(sqlite3_stmt *, int iCol)//同上,返回const unsigned char *型数据,需进行转化为char* 类型,后续转NSString

你可能感兴趣的:(数据库操作之SQLite)