数据库操作之SQLite

作者: luowanglin | 来源:发表于2016-04-06 18:25 被阅读174次

    使用SQLite 需要引入动态库libsqlite3.tbd ,在对应的操作类文件前导入

    #import<sqlite3.h>//由于是非三方框架,所以使用尖括号

    在@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

    相关文章

      网友评论

        本文标题:数据库操作之SQLite

        本文链接:https://www.haomeiwen.com/subject/uvlmlttx.html