博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLite3 嵌入式数据库
阅读量:7024 次
发布时间:2019-06-28

本文共 3830 字,大约阅读时间需要 12 分钟。

关于sqlite3数据库在iphone项目中的应用大体上有下面几个步骤:    1、 在新建的项目中右击Frameworks文件夹,添加libsqlit3.dylib库;   2、 在.h的头文件中声明一个类型为sqlite3的变量;// 这里要特别说明一下这个变量,开始的时候是为NULL的,数据库打开之后就不为空了,不知道sqlite3中对这中结构的设计是出于什么目的,暂且记住这么用吧,如何你对它有更好的理解不妨告诉我一下。         sqlite3 *_database;    3、 获取Documents文件夹的路径,这个其实就是数据库文件最终存在的目录,新建时也要建在这目录下;    - (NSString *)getDocuments{NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);NSString *documentsDirectory = [pathsobjectAtIndex:0];return [documentsDirectorystringByAppendingPathComponent:kFilename];// 这个kFilename 是你为数据库起的名字}   4、 创建并打开数据库 /*如果数据库存在,则用sqlite3_open直接打开(不要担心,如果数据库不存在sqlite3_open会自动创建)打开数据库,这里的[path UTF8String]是将NSString转换为C字符串,因为SQLite3是采用可移植的C(而不是Objective-C)编写的,它不知道什么是NSString.*/- (void)openDB {//获取数据库路径NSString *path = [selfgetDocuments];if(sqlite3_open([pathUTF8String], &_database) !=SQLITE_OK) {//如果打开数据库失败则关闭数据库sqlite3_close(self._database);}}   5、创建表//创建表- (BOOL) createTableMath:(sqlite3*)db {//这句是大家熟悉的SQL语句char *sql ="create table if not exists testTable(ID INTEGER PRIMARY KEY AUTOINCREMENT, testID int,testValue text)";sqlite3_stmt *statement;//sqlite3_prepare_v2接口把一条SQL语句解析到statement结构里去.使用该接口访问数据库是当前比较好的的一种方法//第三个参数我写的是-1,这个参数含义是前面 sql 语句的长度。如果小于0,sqlite会自动计算它的长度(把sql语句当成以\0结尾的字符串)。//第四个参数是sqlite3_stmt 的指针的指针。解析以后的sql语句就放在这个结构里。//第五个参数为nil就可以了。//如果这个函数执行成功(返回值是 SQLITE_OK 且 statement 不为NULL ),那么下面就可以开始插入二进制数据。//如果SQL语句解析出错的话程序返回NSInteger sqlReturn =sqlite3_prepare_v2(_database, sql, -1, &statement,nil);if(sqlReturn !=SQLITE_OK) {NSLog(@"Error: failed to prepare statement:create test table");returnNO;}NSLog(@"..create test table successful..>>");//执行statement语句int success =sqlite3_step(statement);//释放sqlite3_stmt sqlite3_finalize(statement);//执行SQL语句失败if ( success !=SQLITE_DONE) {NSLog(@"Error: failed to dehydrate:create table test");returnNO;}NSLog(@"Create table 'testTable' successed.");returnYES;}  6、 插入数据//  插入数据 方式一-(BOOL)insertRecord1{if ([selfopenDB]) {sqlite3_stmt *statement;staticchar *sql="insert into testTable(testID,testValue) values(?,?);";// ?表示未定的值,它的值等下才会插入int success2=sqlite3_prepare_v2(_database, sql, -1, &statement, NULL);if (success2!=SQLITE_OK) {sqlite3_close(_database);returnNO}//这里的1,2代表第几个问号sqlite3_bind_int(statement,1, @"1");sqlite3_bind_text(statement,2, @"test value", -1,SQLITE_TRANSIENT);success2=sqlite3_step(statement);sqlite3_finalize(statement);if (success2!=SQLITE_OK) {sqlite3_close(_database);returnNO;}sqlite3_close(_database);returnYES;}returnNO;}大多数情况下推荐这种方式 比较简洁 插入数据方式 二 -(void) insertRecord2:(NSString *)tableName withField1:(NSString*) field1 field1Value:(NSString*) field1Value withField2:(NSString*)field2 field2Value:(NSString*) field2Value{NSString *sql=[NSString stringWithFormat:@"insert or replace into '%@' ('%@' ,'%@') values ('%@','%@')",tableName,field1,field1Value,field2,field2Value];char *err;if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err)!=SQLITE_OK) {sqlite3_close(db);NSAssert(0,"插入记录失败");}}     7、 遍历数据// 查询记录-(NSMutableArray*)getResult:(int)searchID{NSMutableArray *array=[NSMutableArrayarrayWithArray:10];if ([selfopenDB]) {sqlite3_stmt *statement=nil;char *sql="select testID,testValue from testTable where testID=?";if (sqlite3_prepare_v2(_database, sql, -1, &statement, NULL)!=SQLITE_OK) {returnNO;}else {sqlite3_bind_int(statement,1, searchID);// 这里的1是代表的sql语句里面的那个问号while (sqlite3_step(statement)==SQLITE_ROW) {// 便利结果集,这都是sqlite3自己的方法。sqlTestList* sqlList=[[sqlTestList alloc ]init];sqlList.sqlID=sqlite3_column_int(statement,0);//取出相应字段的值,数据库中也是integer类型 char *strText=(char*)sqlite3_column_text(statement,1);//这里要转换一下格式sqlList.sqlText=[NSStringstringWithUTF8String:strText];[arrayaddObject:sqlList];[sqlListrelease];}}sqlite3_finalize(statement);sqlite3_close(_database);}return [arrayretain];}

  

转载于:https://www.cnblogs.com/deng37s/p/4600486.html

你可能感兴趣的文章
编写Chrome扩展程序
查看>>
RabbitMQ学习笔记4-使用fanout交换器
查看>>
一些组织和个人网站
查看>>
iOS开发小技巧 -- tableView-section圆角边框解决方案
查看>>
微服务Spring Cloud与Kubernetes比较
查看>>
MyBatis 源码分析——介绍
查看>>
关于iTerm2中颜色配置及快捷键使用技巧(亲测)
查看>>
tomcat启动报错 java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
查看>>
二叉树应用进阶之折纸(二叉树的右根左遍历)
查看>>
PSPP:顶替SPSS常用功能的优秀软件, Linux 下的经济学用软件
查看>>
逍遥安卓-完整命令行
查看>>
使用canvas制作的移动端color picker
查看>>
C#实现XML与DataTable互转
查看>>
运维相关开源项目
查看>>
Redis(二)-- 发布订阅、事务、安全、持久化
查看>>
[ffmpeg 扩展第三方库编译系列] frei0r mingw32 下编译问题
查看>>
Lua MD5加密字符串
查看>>
清浮动的几种方式
查看>>
我的开放代码
查看>>
javascript删除字符串最后一个字符
查看>>