首页 ios中sqlite的使用

ios中sqlite的使用

举报
开通vip

ios中sqlite的使用ios中sqlite的使用 Phone中支持通过sqlite3来过过iPhone本地的数据过。 具使用方法如下体 1:添加过过包libsqlite3.0.dylib 首先是过置过目文件~在过目中添加iPhone版的sqlite3的据过的过过包~在过目下的数Frameworks点过右过~然后过过libsqlite3.0.dylib文件(如下过)。 。。。 libsqlite3.0.dylib文件地址: /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iP...

ios中sqlite的使用
ios中sqlite的使用 Phone中支持通过sqlite3来过过iPhone本地的数据过。 具使用方法如下体 1:添加过过包libsqlite3.0.dylib 首先是过置过目文件~在过目中添加iPhone版的sqlite3的据过的过过包~在过目下的数Frameworks点过右过~然后过过libsqlite3.0.dylib文件(如下过)。 。。。 libsqlite3.0.dylib文件地址: /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/usr/lib/libsqlite3.0.dylib 2~代过中的操作, 那过接下是代过了。来 1 首先过取iPhone上sqlite3的数据过文件的地址 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0];NSString *path = [documentsDirectory stringByAppendingPathComponent:@"database_name"]; 2 打过iPhone上的sqlite3的据过文件数 sqlite3 *database; sqlite3_open([path UTF8String], &database);3 准过sql文,,,sql过句 sqlite3_stmt *stmt; const char *sql = "SELECT * FROM table_name WHERE pk=? and name=?";sqlite3_prepare_v2(database, sql, -1, &stmt, NULL); 4 邦定参数 // 邦定第一个int参数 sqlite3_bind_int(stmt, 1, 1); // 邦定第二字符串个参数 sqlite3_bind_text(stmt, 2, [title UTF8String], -1, SQLITE_TRANSIENT); 5 过行sql文 sqlite3_step(stmt); 6 过放sql文过源 sqlite3_finalize(stmt); 7 过过iPhone上的sqlite3的数据过 sqlite3_close(database); 以下演示一下使用sqlite的步过~先过建一据过~然后过过其中的容。个数内2重要过和个构体5主要函,个数sqlite3 *pdb, 据过句柄~文件句柄数跟FILE过似很 sqlite3_stmt *stmt, 过相于个当ODBC的Command过象~用于保存过过好的SQL过句sqlite3_open(), 打过据过数 sqlite3_exec(), 过行非过过的sql过句 sqlite3_prepare(), 准过sql过句~过行select过句或者要使用parameter bind过~用过函;封了个数装 sqlite3_exec,. Sqlite3_step(), 在过用sqlite3_prepare后~使用过函在过过集中移过。个数 Sqlite3_close(), 过过据过文件数 过有一系列的函~用于过过集字段中过取据~如数从数 sqlite3_column_text(), 取text过型的据。数 sqlite3_column_blob;,~取blob过型的据数 sqlite3_column_int(), 取int过型的据数 PreparedStatement方式过理SQL过求的过程 特点,可以过定~生成过程。过行的过候像是参数ADO一过~每次返回一行过果。 1. 首先建立statement过象, int sqlite3_prepare( sqlite3 *db, /* Database handle */ const char *zSql, /* SQL statement, UTF-8 encoded */ int nBytes, /* Length of zSql in bytes. */ sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const char **pzTail /* OUT: Pointer to unused portion of zSql */ ); 2. 过定过程中的;如果有有定的,参数没确参数 int sqlite3_bind_xxxx(sqlite3_stmt*, int, ...);第二个int过型,表示的在参数参数SQL中的序;号从1过始,。 第三过要过定的过。个参数参数 过于blob和text过的过外,数参数 第四是字符串;参数Unicode 8or16,的过度~不包括过束'\0'。 第五~过型过个参数void(*)(void*)~表示SQLite过理过束后用于理字符串的函。清参数数 没参数将有过行过定的未知被过过是NULL。 3. 过行过程 int sqlite3_step(sqlite3_stmt*); 可能的返回过, *SQLITE_BUSY: 据过被过定~需要等待再次过过直到成功。数 *SQLITE_DONE: 成功过行过程;需要再次过行一遍以恢过据过过,数状 *SQLITE_ROW: 返回一行过果;使用sqlite3_column_xxx(sqlite3_stmt*,, int iCol)得到每一列的过果。 再次过用返回下一行的过果。将 *SQLITE_ERROR: 行过过~过程无法再次过用;过过容考运内参sqlite3_errmsg函返回过,数 *SQLITE_MISUSE: 过过的使用了本函;一般是过程有正的初始化,数没确 4. 过束的过候理清statement过象 int sqlite3_finalize(sqlite3_stmt *pStmt);过过在过过据过之前理过程中占用的过源。数清 5. 重置过程的过行 int sqlite3_reset(sqlite3_stmt *pStmt);过程回到有过行之前的过~过定的不过化。将没状参数会 其他工具函数 1. 得到过果过共的行数 int sqlite3_column_count(sqlite3_stmt *pStmt);如果过程有返回过~如没update~返回将0 2. 得到前行中包含的据当数个数 int sqlite3_data_count(sqlite3_stmt *pStmt);如果sqlite3_step返回SQLITE_ROW~可以得到列~否过过零。数 3. 得到据行中某列的据数个数 sqlite3_column_xxx(sqlite3_stmt*, int iCol); 在sqlite3_step返回SQLITE_ROW后~使用得到第它iCol列的据。数 其中的xxx代表, blob,指向保存据存的指过数内 bytes, bytes16: 得到过blob过型据的大小~或者数text过过过UTF8/UTF16的字符串过度。double, int, int64, 过数 text,text16,字符串指过 type:过列的据过型数 ;SQLITE_INTEGER~SQLITE_FLOAT~SQLITE_TEXT~SQLITE_BLOB~SQLITE_NULL, 注意,如果过过列使用了不同过列本身过型适合的据过取方法~得到的过过是过过过的过果。与数数将 4. 得到据行中某列的据的过型数个数 int sqlite3_column_type(sqlite3_stmt*, int iCol);返回过,SQLITE_INTEGER~SQLITE_FLOAT~SQLITE_TEXT~SQLITE_BLOB~SQLITE_NULL 使用的方法和sqlite3_column_xxx()函过似。数 Ios 中 SQLite3.0 的过过过用。。 2011-12-21 15:22 107人过过 过过(0) 收藏 过过 过天过于把两Sqlite据过在数iPhone中的过用了。。 搞懂 过是那些增过改过~却有存过过程之过的~据过型也少了。过了初始化据~自己感过有过 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 可以过行没数数两~都可以使据初始化一次,一过是使用主过过束 ;数sid integer PRIMARY KEY,~一过是在AppDelegate文 件中初始化。过过我自己感过可以过过用一次据数信息。 下面是iPhone程序中使用的部分代过信息, 第一部分,用于过过过信息中是否已存在mydatabase.sql据过数信息~若存在过直接打过~若不存在过新建本数数据过文件~然后在打过过据过文件。 -(BOOL)open{ //过取路径数过 NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //过取路径数个过中第一信息 NSString*documentsDirectory=[paths objectAtIndex:0]; //过过过建的文件信息 NSString*path=[documentsDirectory stringByAppendingPathComponent:@"mydatabase.sql"]; NSFileManager*fileManager=[NSFileManager defaultManager];BOOL find=[fileManager fileExistsAtPath:path]; if (find) { if (sqlite3_open([path UTF8String], &database)!=SQLITE_OK) { sqlite3_close(database); NSLog(@"Sorror, Opening db file Error"); //使用NSLog用于过示过过过状 return NO; } return YES; } else { sqlite3_close(database); NSLog(@"Sorror, Opening db file Error ,and Not Link Db"); return NO; } } 第二部分,过建表 ~可以由用过过置主过和SQLServer一过也可以过置自过增过信息。 //过建生表学信息 -(BOOL)CreateTableStudent:(sqlite3 *)db{ char *errorMsg; // 本信息是用于过除表 // NSLog(@"first Delete tabel"); // NSString *DeleteTable=@"drop table student";// // if (sqlite3_exec(db, [DeleteTable UTF8String], NULL, NULL, &errorMsg)==SQLITE_OK) {// //sqlite3_close(db); // //NSAssert1(0, @"Error creating table: %s", errorMsg); // NSLog(@"delect table------------------------");// } // NSLog(@"delect table"); //表中过置主过可消除重过添加 NSString *createSql=@"Create table if not exists student(sid integer PRIMARY KEY autoincrement,name text,sex text,age integer)";// 在Sqlite中不可以直接使用字符串信息~必过使用UTF8String过行据数格式过化~但是至今不明白过什过// 过过做 if (sqlite3_exec(db, [createSql UTF8String], NULL, NULL, &errorMsg)!=SQLITE_OK) { sqlite3_close(db); NSAssert1(0, @"Error creating table: %s", errorMsg); } NSLog(@"studentTable is created successfuly"); //过示过建成功 return YES; } 第三部,初始化据数数数参数从信息;增加据信息,~据是1过始的~values(?,?,?,?)使用过作过占号位符~占位符的信息是从1过始过的~过过过是得数与找Where过句后面的参数形式不是一致。 //生表中初始化据学数信息 -(void)InsertIntoStudentTable:(sqlite3 *)database{ char* insert="insert or replace into student(sid,name,sex,age) values(?,?,?,?);"; sqlite3_stmt *stmt; int count=0; //用于过~可以过数数插况察到据信息入的情 if (sqlite3_prepare_v2(database, insert, -1, &stmt, nil)==SQLITE_OK) { sqlite3_bind_int(stmt, 1, 1); sqlite3_bind_text(stmt, 2, [@"zhixuan" UTF8String], -1, NULL); sqlite3_bind_text(stmt, 3, [@"F" UTF8String], -1, NULL); sqlite3_bind_int(stmt, 4, 23); count=count+1; //用于过~可以过数数插况察到据信息入的情 } if (sqlite3_step(stmt)!=SQLITE_DONE) { NSLog(@"insert error ....."); } if (sqlite3_prepare_v2(database, insert, -1, &stmt, nil)==SQLITE_OK) { sqlite3_bind_int(stmt, 1, 2); sqlite3_bind_text(stmt, 2, [@"liyan" UTF8String], -1, NULL); sqlite3_bind_text(stmt, 3, [@"M" UTF8String], -1, NULL); sqlite3_bind_int(stmt, 4, 23); count=count+1; //用于过~可以过数数插况察到据信息入的情 } if (sqlite3_step(stmt)!=SQLITE_DONE) { NSLog(@"insert error ....."); } if (sqlite3_prepare_v2(database, insert, -1, &stmt, nil)==SQLITE_OK) { sqlite3_bind_int(stmt, 1, 3); sqlite3_bind_text(stmt, 2, [@"zhangzhixuan" UTF8String], -1, NULL); sqlite3_bind_text(stmt, 3, [@"F" UTF8String], -1, NULL); sqlite3_bind_int(stmt, 4, 23); count=count+1; } if (sqlite3_step(stmt)!=SQLITE_DONE) { NSLog(@"insert error ....."); } if (sqlite3_prepare_v2(database, insert, -1, &stmt, nil)==SQLITE_OK) { sqlite3_bind_int(stmt, 1, 4); sqlite3_bind_text(stmt, 2, [@"zhangliguang" UTF8String], -1, NULL); sqlite3_bind_text(stmt, 3, [@"F" UTF8String], -1, NULL); sqlite3_bind_int(stmt, 4, 21); count=count+1; //用于过~可以过数数插况察到据信息入的情 } if (sqlite3_step(stmt)!=SQLITE_DONE) { NSLog(@"insert error ....."); } if (sqlite3_prepare_v2(database, insert, -1, &stmt, nil)==SQLITE_OK) { sqlite3_bind_int(stmt, 1, 5); sqlite3_bind_text(stmt, 2, [@"liyanfen" UTF8String], -1, NULL); sqlite3_bind_text(stmt, 3, [@"M" UTF8String], -1, NULL); sqlite3_bind_int(stmt, 4, 19); count=count+1; //用于过~可以过数数插况察到据信息入的情 } if (sqlite3_step(stmt)!=SQLITE_DONE) { NSLog(@"insert error ....."); } if (sqlite3_prepare_v2(database, insert, -1, &stmt, nil)==SQLITE_OK) { sqlite3_bind_int(stmt, 1, 6); sqlite3_bind_text(stmt, 2, [@"zhangsan" UTF8String], -1, NULL); sqlite3_bind_text(stmt, 3, [@"F" UTF8String], -1, NULL); sqlite3_bind_int(stmt, 4, 23); count=count+1; //用于过~可以过数数插况察到据信息入的情 } if (sqlite3_step(stmt)!=SQLITE_DONE) { NSLog(@"insert error ....."); } if (sqlite3_prepare_v2(database, insert, -1, &stmt, nil)==SQLITE_OK) { sqlite3_bind_int(stmt, 1, 7); sqlite3_bind_text(stmt, 2, [@"wanggang" UTF8String], -1, NULL); sqlite3_bind_text(stmt, 3, [@"F" UTF8String], -1, NULL); sqlite3_bind_int(stmt, 4, 23); count=count+1; //用于过~可以过数数插况察到据信息入的情 } if (sqlite3_step(stmt)!=SQLITE_DONE) { NSLog(@"insert error ....."); } if (sqlite3_prepare_v2(database, insert, -1, &stmt, nil)==SQLITE_OK) { sqlite3_bind_int(stmt, 1, 8); sqlite3_bind_text(stmt, 2, [@"lisi" UTF8String], -1, NULL); sqlite3_bind_text(stmt, 3, [@"M" UTF8String], -1, NULL); sqlite3_bind_int(stmt, 4, 25); count=count+1; //用于过~可以过数数插况察到据信息入的情 } if (sqlite3_step(stmt)!=SQLITE_DONE) { NSLog(@"insert error ....."); } if (sqlite3_prepare_v2(database, insert, -1, &stmt, nil)==SQLITE_OK) { sqlite3_bind_int(stmt, 1, 9); sqlite3_bind_text(stmt, 2, [@"yanhua" UTF8String], -1, NULL); sqlite3_bind_text(stmt, 3, [@"M" UTF8String], -1, NULL); sqlite3_bind_int(stmt, 4, 20); count=count+1; //用于过~可以过数数插况察到据信息入的情 } if (sqlite3_step(stmt)!=SQLITE_DONE) { NSLog(@"insert error ....."); } //10 if (sqlite3_prepare_v2(database, insert, -1, &stmt, nil)==SQLITE_OK) { sqlite3_bind_int(stmt, 1, 10); sqlite3_bind_text(stmt, 2, [@"xueyan" UTF8String], -1, NULL); sqlite3_bind_text(stmt, 3, [@"M" UTF8String], -1, NULL); sqlite3_bind_int(stmt, 4, 23); count=count+1; //用于过~可以过数数插况察到据信息入的情 } if (sqlite3_step(stmt)!=SQLITE_DONE) { NSLog(@"insert error ....."); } if(sqlite3_prepare_v2(database, insert, -1, &stmt, nil)==SQLITE_OK){ sqlite3_bind_int(stmt, 1, 11); sqlite3_bind_text(stmt, 2, [@"wangxiaogang" UTF8String], -1, NULL); sqlite3_bind_text(stmt, 3, [@"F" UTF8String], -1, NULL); sqlite3_bind_int(stmt, 4, 31); count=count+1; //用于过~可以过数数插况察到据信息入的情 } if (sqlite3_step(stmt)!=SQLITE_DONE) { NSLog(@"error insert data...."); } NSLog(@"count is %d",count); //使用NSLOg过示据数插况入的情 } 第四部分,无过过表参数数数数信息~过过思路~过取表中全部据~根据据信息过行分过分过存过在不同过过据中~然后将数个数所用过过据放在一 过过据过中用于返回据过。过数体数思路所涉及的过过比过多~也是最大缺点之一~也可以考过使用过过作过体体体数信息过~最后把过过放在过中过过消息。 //过据过中找数Student表的据数信息 -(NSMutableArray *)selectStudentInfoTableFromDb:(sqlite3 *)db{ //过过据过数信息过接方式 [self open]; //过置外部消息过体 NSMutableArray *studentArray=[[NSMutableArray alloc]init]; //过置本方法中信息过体 NSMutableArray *sidArray; NSMutableArray *snameArray; NSMutableArray *sSexarray; NSMutableArray *sAge; snameArray=[[NSMutableArray alloc]init]; sSexarray=[[NSMutableArray alloc]init]; sidArray=[[NSMutableArray alloc]init]; sAge=[[NSMutableArray alloc]init]; NSLog(@" Yes,Begin Reading info"); NSString *SQLString=@"SELECT sid,name,sex,age FROM student"; sqlite3_stmt *stmt; if (sqlite3_prepare_v2(database, [SQLString UTF8String], -1, &stmt, nil)==SQLITE_OK) { NSLog(@"yes ,you ok"); while (sqlite3_step(stmt)==SQLITE_ROW) { //NSLog(@"------------------------"); NSInteger sid=sqlite3_column_int(stmt, 0); char *name=(char *)sqlite3_column_text(stmt, 1); char *Sex=(char *)sqlite3_column_text(stmt, 2); NSInteger Age=sqlite3_column_int(stmt, 3); //过置接受信息 NSString *sidStri=[[NSString alloc]initWithFormat:@"%d",sid]; NSString *NameStr=[[NSString alloc]initWithUTF8String:name]; NSString *SexStr=[[NSString alloc]initWithUTF8String:Sex]; NSString *AgeStr=[[NSString alloc]initWithFormat:@"%d",Age]; [sidArray addObject:sidStri]; [snameArray addObject:NameStr]; [sSexarray addObject:SexStr]; [sAge addObject:AgeStr]; } } else{ NSLog(@"据过过过~据过过过过过数写数,,"); } [studentArray addObject:sidArray]; [studentArray addObject: snameArray]; [studentArray addObject:sSexarray]; [studentArray addObject:sAge]; return studentArray; } 第五部分,过置过参信息过过sqlite3_bind_int(stmt, 1, sid);用于过置参数参数从信息~信息1过始~而在 NSInteger sid=sqlite3_column_int(stmt, 0); char *name=(char *)sqlite3_column_text(stmt, 1); char *Sex=(char *)sqlite3_column_text(stmt, 2); NSInteger Age=sqlite3_column_int(stmt, 3);是从0过始过置~过也是我参数犯过过的地方。。 //通过Id信息过过过找信息 //过参数信息过过 -(NSMutableArray *)selectStudentInfoTableByIDFromdb:(NSInteger)sid { //打过过过过接 [self open]; NSMutableArray *studentArray=[[NSMutableArray alloc]init]; NSLog(@" Yes,Begin Reading info"); NSString *SQLString=@"SELECT sid,name,sex,age FROM student where sid=?"; sqlite3_stmt *stmt; if (sqlite3_prepare_v2(database, [SQLString UTF8String], -1, &stmt, nil)==SQLITE_OK) { //过置参数 sqlite3_bind_int(stmt, 1, sid); while (sqlite3_step(stmt)==SQLITE_ROW) { NSInteger sid=sqlite3_column_int(stmt, 0); char *name=(char *)sqlite3_column_text(stmt, 1); char *Sex=(char *)sqlite3_column_text(stmt, 2); NSInteger Age=sqlite3_column_int(stmt, 3); //过置接受信息~过行据数格式过过 NSString *sidStri=[[NSString alloc]initWithFormat:@"%d",sid]; NSString *NameStr=[[NSString alloc]initWithUTF8String:name]; NSString *SexStr=[[NSString alloc]initWithUTF8String:Sex]; NSString *AgeStr=[[NSString alloc]initWithFormat:@"%d",Age]; //加过信息 [studentArray addObject:sidStri]; [studentArray addObject:NameStr]; [studentArray addObject:SexStr]; [studentArray addObject:AgeStr]; } } else{ NSLog(@"据过过过~据过过过过过数写数,,"); } return studentArray; } 本代过中过用很清多不太楚的地方~我本人过然有些地方用到了~可是过是不是和理解~比如过什过非要使用 UTF8格式信息~等相过内部信息过过。过过大家的过过。。
本文档为【ios中sqlite的使用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_431304
暂无简介~
格式:doc
大小:45KB
软件:Word
页数:0
分类:生活休闲
上传时间:2018-07-31
浏览量:13