iOS数据库操作(基于C语言API)
2016-07-20 20:56
465 查看
表创建
sqlite3 *db; NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES).firstObject; const char *cpath = [path UTF8String]; if (sqlite3_open( cpath,&db) != SQLITE_OK){ sqlite3_close(db); NSAssert(NO, @"数据库打开失败"); }else{ char *err ; if (sqlite3_exec( db, [@"CREATE TABLE IF NOT EXISTS t_test(name TEXT PRIMARY KEY, sex TEXT NOT NULL);" UTF8String], NULL, NULL, &err) != SQLITE_OK){ sqlite3_close(db); printf("%s",err); NSAssert(NO, @"表创建失败"); } NSLog(@"表创建成功"); sqlite3_close(db); }
查询数据
操作步骤:
- 1 使用sqlite3_open 函数打开数据库- 2 使用sqlite3_prepare_v2函数预处理SQL语句
- 3 使用sqlite3_bind_text函数绑定参数
- 4 使用sqlite3_step函数执行SQL语句,便利结果集
- 5 使用sqlite3_column_text等函数提取字段数据
- 6 使用sqlite3_finalize和sqlite3_close函数释放资源
if (sqlite3_open(cpath, &db) != SQLITE_OK){ sqlite3_close(db); NSAssert(NO, @"数据库打开失败"); }else{ NSString *sql = @"SELECT name, sex FROM t_test where name = XXX "; //ORDER BY name DESC降序 //ORDER BY name ASC 升序排列 const char *csql = [sql UTF8String]; sqlite3_stmt *statement; //预处理 if (sqlite3_prepare_v2(db, csql, -1, &statement, NULL) == SQLITE_OK){//将SQL语句编译为二进制代码,提高SQL语句的额执行速度,第三个参数代表全部SQL字符串的长度,第四个参数是sqlite3_stmt指针的地址,第五个参数是SQlite语句没有执行的部分语句 const char *cname = [@"jason" UTF8String]; sqlite3_bind_text(statement, 1, cname, -1, NULL);//用于绑定SQL语句的参数,第二个参数为序号(从1开始),第三个参数为字符串值,第四个参数为字符串长度,第五个参数为一个函数指针<如果SQL语句中带有问号(即占位符),那么就要绑定参数> if (sqlite3_step(statement) == SQLITE_ROW){//返回值为SQLITE_ROW说明还有没有遍历的行 char *cname = (char *)sqlite3_column_text(statement, 0);//提取字段数据,高函数用来读取字符串类型的字段,第二个参数用于指定select字段的索引(从0开始) /* 类似的函数 sqlite3_column_blob() sqlite3_column_doubleb() sqlite3_column_int() sqlite3_column_int64() sqlite3_column_text() sqlite3_column_text16() */ char *csex = (char *)sqlite3_column_text(statement, 1); NSString *name = [[NSString alloc] initWithUTF8String:cname]; NSString *sex = [[NSString alloc] initWithUTF8String:csex]; NSLog(@"===%@,sex == %@",name, sex); } } sqlite3_finalize(statement);//释放资源 sqlite3_close(db); }
修改数据
操作步骤
- 1使用sqlite3)_open代开数据库- 2 使用sqlite3_prepare_v2函数预处理SQL语句
- 3 使用sqlite3_bind_text函数绑定参数
- 4 使用sqlite3_step函数执行SQL语句
- 5 使用sqlite3_finalize和sqlite3_close韩式释放资源(与查询相比,少了提取字段的过程)
//修改数据 if (sqlite3_open(cpath, &db) != SQLITE_OK){ sqlite3_close(db); NSAssert(NO, @"数据库打开失败"); }else{ NSString *sql = @"INSERT OR REPLACE INTO t_test(name, sex) VALUES(?,?)"; //"UPDATE t_test set name = ? WHERE name = ?" const char *csql = [sql UTF8String]; sqlite3_stmt *statement; if (sqlite3_prepare_v2(db, csql, -1, &statement, NULL) == SQLITE_OK ){ const char *name = [@"jason" UTF8String]; const char *sex = [@"girl" UTF8String]; sqlite3_bind_text(statement, 1, name, -1, NULL); sqlite3_bind_text(statement, 2, sex, -1, NULL); if (sqlite3_step(statement) != SQLITE_DONE){//代表执行完成 NSAssert(NO, @"插入数据失败"); } } sqlite3_finalize(statement); sqlite3_close(db); }
删除数据 和修改数据类似,只是SQL语句不同
//修改数据 if (sqlite3_open(cpath, &db) != SQLITE_OK){ sqlite3_close(db); NSAssert(NO, @"数据库打开失败"); }else{ NSString *sql = @"DELETE FROM t_test WHERE NAME = ?"; const char *csql = [sql UTF8String]; sqlite3_stmt *statement; if (sqlite3_prepare_v2(db, csql, -1, &statement, NULL) == SQLITE_OK ){ const char *name = [@"jason" UTF8String]; const char *sex = [@"girl" UTF8String]; sqlite3_bind_text(statement, 1, name, -1, NULL); sqlite3_bind_text(statement, 2, sex, -1, NULL); if (sqlite3_step(statement) != SQLITE_DONE){//代表执行完成 NSAssert(NO, @"删除数据失败"); } } sqlite3_finalize(statement); sqlite3_close(db); }
demo地址
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 第三章 数据库备份和还原
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle数据库执行脚本常用命令小结
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马