在iOS中使用sqlite3,首先要添加库文件libsqlite3.dylib和导入主头文件
创建、打开、关闭数据库创建或打开数据库
// path为:~/documents/person.db
sqlite3 *db = NulL;
int result = sqlite3_open([path UTF8String],&db);
代码解析:
sqlite3_open()将根据文件路径打开数据库,如果不存在,则会创建一个新的数据库。如果result等于常量sqlITE_OK,则表示成功打开数据库
sqlite3 *db:一个打开的数据库实例
数据库文件的路径必须以C字符串(而非Nsstring)传入
关闭数据库:sqlite3_close(db);
执行不返回数据的SQL语句
执行创表语句
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;
带占位符插入数据
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 *对象
查询数据
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开始
使用实例
//// IWStudentTool.m// 02-sqlite的封装//// Created by apple on 14-5-22.//#import "IWStudentTool.h"#import "IWStudent.h"#import <sqlite3.h>@implementation IWStudentTool// static的作用:能保证_db这个变量只被IWStudentTool.m直接访问static sqlite3 *_db;+ (voID)initialize{ // 0.获得沙盒中的数据库文件名 Nsstring *filename = [[NSSearchPathForDirectorIEsInDomains(NSdocumentDirectory,NSUserDomainMask,YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"]; // 1.创建(打开)数据库(如果数据库文件不存在,会自动创建) int result = sqlite3_open(filename.UTF8String,&_db); if (result == sqlITE_OK) { NSLog(@"成功打开数据库"); // 2.创表 const char *sql = "create table if not exists t_student (ID integer primary key autoincrement,age integer);"; char *errorMesg = NulL; int result = sqlite3_exec(_db,&errorMesg); if (result == sqlITE_OK) { NSLog(@"成功创建t_student表"); } else { NSLog(@"创建t_student表失败:%s",errorMesg); } } else { NSLog(@"打开数据库失败"); }}+ (BOol)addStudent:(IWStudent *)student{ Nsstring *sql = [Nsstring stringWithFormat:@"insert into t_student (name,age) values('%@',%d);",student.name,student.age]; char *errorMesg = NulL; int result = sqlite3_exec(_db,sql.UTF8String,&errorMesg); return result == sqlITE_OK;}+ (NSArray *)students{ // 0.定义数组 NSMutableArray *students = nil; // 1.定义SQL语句 const char *sql = "select ID,age from t_student;"; // 2.定义一个stmt存放结果集 sqlite3_stmt *stmt = NulL; // 3.检测SQL语句的合法性 int result = sqlite3_prepare_v2(_db,NulL); if (result == sqlITE_OK) { NSLog(@"查询语句是合法的"); students = [NSMutableArray array]; // 4.执行SQL语句,从结果集中取出数据 while (sqlite3_step(stmt) == sqlITE_ROW) { // 真的查询到一行数据 // 获得这行对应的数据 IWStudent *student = [[IWStudent alloc] init]; // 获得第0列的ID student.ID = sqlite3_column_int(stmt,0); // 获得第1列的name const unsigned char *sname = sqlite3_column_text(stmt,1); student.name = [Nsstring stringWithUTF8String:(const char *)sname]; // 获得第2列的age student.age = sqlite3_column_int(stmt,2); // 添加到数组 [students addobject:student]; } } else { NSLog(@"查询语句非合法"); } return students;}+ (NSArray *)studentsWithCondition:(Nsstring *)condition{ // 0.定义数组 NSMutableArray *students = nil; // 1.定义SQL语句 const char *sql = "select ID,age from t_student where name like ?;"; // 2.定义一个stmt存放结果集 sqlite3_stmt *stmt = NulL; // 3.检测SQL语句的合法性 int result = sqlite3_prepare_v2(_db,NulL); if (result == sqlITE_OK) { NSLog(@"查询语句是合法的"); students = [NSMutableArray array]; // 填补占位符的内容 Nsstring *newCondition = [Nsstring stringWithFormat:@"%%%@%%",condition];// NSLog(@"%@",newCondition); sqlite3_bind_text(stmt,newCondition.UTF8String,NulL); // 4.执行SQL语句,从结果集中取出数据 while (sqlite3_step(stmt) == sqlITE_ROW) { // 真的查询到一行数据 // 获得这行对应的数据 IWStudent *student = [[IWStudent alloc] init]; // 获得第0列的ID student.ID = sqlite3_column_int(stmt,2); // 添加到数组 [students addobject:student]; } } else { NSLog(@"查询语句非合法"); } return students;}@end总结
以上是内存溢出为你收集整理的sqlite3 使用全部内容,希望文章能够帮你解决sqlite3 使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)