数据操作之sqlite3

前端之家收集整理的这篇文章主要介绍了数据操作之sqlite3前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在iOS中提供了sqlite的支持,这样可以通过对sqlite的使用,实现数据的存储和管理。处理数据库是常用操作,查找资料理解了一些对sqlite3的简单操作,记录下来,方便自己查看。首先要导入framework,最基本的,不过也容易忘记。初次尝试使用时,就是忘了导入,还调试了好长时间,汗。。。在AppDelegate中拷入sqlite文件:-(void)initSys{NSUserDefaults*udf=[NSUserDefaultsstandardUserDefaults];//只在程序首次运行时运行if(![udfboolForKey:@"hasdatabase"]){//拷贝sqlite文件....//记录文件已存在[udfsetBool:YESforKey:@"hasdatabase"];}}调用即可:-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOption:          (NSDictionary*)launchOptions{...[selfinitSys];...}简要说明一下sqlite数据库执行sql语句的过程**调用sqlite3_prepare()将sql语句编译为sqlite内部一个结构体(sqlite3_stmt).该结构体中包含了将要执行的的sql语句的信息.**如果需要传入参数,在sql语句中用’?'作为占位符,再调用sqlite3_bind_XXX()函数将对应的参数传入.**调用sqlite3_step(),这时候sql语句才真正执行.注意该函数的返回值,sqlITE_DONE和sqlITE_ROW都是表示执行成功,不同的是sqlITE_DONE表示没有查询结果,象UPDATE,INSERT这些sql语句都是返回sqlITE_DONE,SELECT查询语句在查询结果不为空的时候返回sqlITE_ROW,在查询结果为空的时候返回sqlITE_DONE.**每次调用sqlite3_step()的时候,只返回一行数据,使用sqlite3_column_XXX()函数来取出这些数据.要取出全部的数据需要反复调用sqlite3_step().(注意,在bind参数的时候,参数列表的index从1开始,而取出数据的时候,列的index是从0开始).**在sql语句使用完了之后要调用sqlite3_finalize()来释放stmt占用的内存.该内存是在sqlite3_prepare()时分配的.**如果sql语句要重复使用,可以调用sqlite3_reset()来清楚已经绑定的参数.在这一部分里,sqlite3_prepare不是很好理解,这里有部分资料。这里给个例子,加强理解:+(NSUInteger)getCount:(NSString*)sCategorystate:(int)iState{//DB_PATH为你的数据库文件路径NSString*sDBPath=DB_PATH;sqlite3*database;if(sqlite3_open([sDBPathUTF8String],&database)==sqlITE_OK){NSString*sSel=@"SELECTcount(*)FROMtable_nameWHEREsCategory=?             ANDiState=?ORDERBY_id";constchar*sql=[sSelUTF8String];NSUIntegeriCount=0;sqlite3_stmt*statement;if(sqlite3_prepare_v2(database,sql,-1,&statement,NULL)==sqlITE_OK){sqlite3_bind_text(statement,1,[sCategoryUTF8String],NULL);sqlite3_bind_int(statement,2,iState);while(sqlite3_step(statement)==sqlITE_ROW){iCount=(int)sqlite3_column_int(statement,0);}}sqlite3_finalize(statement);}else{sqlite3_close(database);database=NULL;NSAssert1(0,@"Failedtoopendatabasewithmessage'%s',sqlite3_errmsg(database));}returniCount;}

猜你在找的Sqlite相关文章