数据操作之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;} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |