采用SQLite数据库来存储数据。SQLite作为一中小型数据库
第一步:需要添加SQLite相关的库以及头文件:在项目文件的Build Phases下,找到Link Binary Library(ies),添加libsqlite3.0.dylib(libsqlite3.dylib与前者的区别暂时不知,两者应该差不多);在项目文件中头文件或者源文件中添加头文件#import "/usr/include/sqlite3.h"
第二步:开始使用SQLite:
NSArray *documentsPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask , YES);
NSString *databaseFilePath=[[documentsPaths objectAtIndex:0] stringByAppendingPathComponent:@"mydb"];//上面两句已经比较熟悉了吧! //打开数据库if (sqlite3_open([databaseFilePath UTF8String], &database)==SQLITE_OK) { NSLog(@"sqlite dadabase is opened."); }else{ return;}//打开不成功就返回在打开了数据库的前提下,如果数据库没有表,那就开始建表了哦!
char *error; const char *createSql="create table(id integer primary key autoincrement, name text)";if (sqlite3_exec(database, createSql, NULL, NULL, &error)==SQLITE_OK) { NSLog(@"create table is ok."); }else{ NSLog(@"error: %s",error); sqlite3_free(error);//每次使用完毕清空error字符串,提供给下一次使用}建表完成之后,就开始插入记录:
const char *insertSql="insert into a person (name) values(‘gg’)"; if (sqlite3_exec(database, insertSql, NULL, NULL, &error)==SQLITE_OK) { NSLog(@"insert operation is ok."); }else{ NSLog(@"error: %s",error); sqlite3_free(error);//每次使用完毕清空error字符串,提供给下一次使用}下一步,查询记录:
const char *selectSql="select id,name from a person";
sqlite3_stmt *statement; if (sqlite3_prepare_v2(database,selectSql, -1, &statement, nil)==SQLITE_OK) { NSLog(@"select operation is ok."); }else{ NSLog(@"error: %s",error); sqlite3_free(error);} while(sqlite3_step(statement)==SQLITE_ROW) { int _id=sqlite3_column_int(statement, 0); NSString *name=(char*)sqlite3_column_text(statement, 1); NSLog(@"row>>id %i, name %s",_id,name); }sqlite3_finalize(statement);最后,关闭数据库:
sqlite3_close(database);
注意:写入数据库,字符串可以采用char方式,而从数据库中取出char类型,当char类型有表示中文字符时,会出现乱码。这是因为数据库默认使用ascII编码方式。所以要想正确从数据库中取出中文,需要用NSString来接收从数据库取出的字符串。