1.打开
数据库 函数 int
sqlite3_open( const char *filename,//
数据库的
文件路径
sqlite3 **ppDb //
数据库实例 ); 示例 // path是
数据库文件的存放路径
sqlite3 *db = NULL; int result =
sqlite3_open([path UTF8String],&db);
代码解析:
sqlite3_open()将根据
文件路径打开
数据库,如果不存在,则会创建一个新的
数据库。如果result等于常量
sqlITE_OK,则表示成功打开
数据库 sqlite3 *db:一个打开的
数据库实例
数据库文件的路径必须以C字符串(而非NSString)传入
关闭数据库:
sqlite3_close(db); 2.执行任何
sql语句
函数 int
sqlite3_exec(
sqlite3*,// 一个打开的
数据库实例 const char *
sql,// 需要执行的
sql语句 int (*callback)(void*,int,char**,char**),//
sql语句执行完毕后的回调 void *,// 回调
函数的第1个参数 char **errmsg //
错误信息 ); 示例 执行创表语句 char *errorMsg = NULL; // 用来存储
错误信息 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; 3.检查
sql语句的合法性(
查询前的准备) int
sqlite3_prepare_v2(
sqlite3 *db,//
数据库实例 const char *z
sql,// 需要检查的
sql语句 int nByte,//
sql语句的最大字节长度
sqlite3_stmt **ppStmt,//
sqlite3_stmt实例,用来获得
数据库数据 const char **pzTail ); 4.
查询一行数据 int
sqlite3_step(
sqlite3_stmt*); // 如果
查询到一行数据,就会返回
sqlITE_ROW 5.利用stmt获得某一字段的值(字段的下标从0开始) double
sqlite3_column_double(
sqlite3_stmt*,int iCol); // 浮点数据 int
sqlite3_column_int(
sqlite3_stmt*,int iCol); // 整型数据
sqlite3_int64
sqlite3_column_int64(
sqlite3_stmt*,int iCol); // 长整型数据 const void *
sqlite3_column_blob(
sqlite3_stmt*,int iCol); // 二进制文本数据 const unsigned char *
sqlite3_column_text(
sqlite3_stmt*,int iCol); // 字符串数据 示例1//插入数据 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个参数 ①第1个参数是
sqlite3_stmt *类型 ②第2个参数指占位符的位置,第一个占位符的位置是1,不是0 ③第3个参数指占位符要绑定的值 ④第4个参数指在第3个参数中所传递数据的长度,对于C字符串,可以传递-1代替字符串的长度 ⑤第5个参数是一个可选的
函数回调,一般用于在语句执行后完成内存清理工作
sqlite_step():执行
sql语句,返回
sqlITE_DONE代表成功执行完毕
sqlite_finalize():销毁
sqlite3_stmt *对象 示例2//
查询数据 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开始