Objective-C学习笔记(5)----学习SQLite3

1.链接SQLite3库
通过一个过程API来访问SQLite3,该API提供对很多C函数调用的接口。要使用此API,我们需要将应用程序链接到一个名为libsqlite3.dylib的动态库。在Mac OS X和iOS上,该库位于/Xcode3.1.4/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.2.sdk/usr/lib/中。
将动态库链接到项目中的过程与在框架中的此链接完全相同。
右击Files&Groups窗格中的Frameworks文件夹。选择Add->Existing Framework。找到libsqlite3.dylib,选择它并单击Add。
注意:目录中可能存在多个以libsqlite3开头的其他文件。但必须选择libsqlite3.dylib,它始终指向最新版本的SQLite3库的别名。


2.导入sqlite3.h头文件
#import


3.设置数据库文件名
#define kFilename @"data.sqlite3"


4.获取数据库文件的地址
- (NSString *) dataFilePath {
NSArray *paths = NSSearchPathForDirectoriesInDomains ( NSDocumentDirectory, NSUserDomainMask, YES );
NSString *documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:kFilename];
}


5.打开数据库和关闭数据库
方法原型:int sqlite3_open(const char *zFilename, sqlite3 **ppDb)
第一个参数接收的是C字符串,可以调用NSString中的UTF8String方法将OC字符串转换成C字符串。
第二个参数接收的是一个指向指针的指针,对象前加&。
方法原型:int sqlite3_close(sqlite3 *db)

第一个参数接收sqlite3对象指针。如果用sqlite3_open开启了一个数据库,结尾时不要忘了用这个函数关闭数据库。
sqlite3 *database;
if (sqlite3_open( [[self dataFilePath] UTF8String], &database) != SQLITE_OK ) {
sqlite3_close(database);
}


6.创建表
方法原型:int sqlite3_exec(sqlite3 *db,const char *zSql,sqlite3_callback xCallback,void *pArg,char **pzErrMsg)
第1个参数不再说了,是前面open函数得到的指针。说了是关键数据结构。
第2个参数const char *sql是一条sql语句,以/0结尾。
第3个参数sqlite3_callback是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。
第4个参数void *pArg是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。等下我们再看回调函数的写法,以及这个参数的使用。
第5个参数char ** errmsg是错误信息。注意是指针的指针。sqlite3里面有很多固定的错误信息。执行sqlite3_exec之后,执行失败时可以查阅这个指针(直接printf(“%s/n”,errmsg))得到一串字符串信息,这串信息告诉你错在什么地方。sqlite3_exec函数通过修改你传入的指针的指针,把你提供的指针指向错误提示信息,这样sqlite3_exec函数外面就可以通过这个char*得到具体错误提示。

说明:通常,sqlite3_callback和它后面的void *这两个位置都可以填NULL。填NULL表示你不需要回调。比如你做insert操作,做delete操作,就没有必要使用回调。而当你做select时,就要使用回调,因为sqlite3把数据查出来,得通过回调告诉你查出了什么数据。

char *errorMsg;
const char *createsql = "create table if not exists info(id integer primary key, inf integer); ";
if ( sqlite3_exec(database, createsql, NULL, NULL, &errorMsg) != SQLITE_OK ) {
sqlite3_close(database);
}
【Objective-C学习笔记(5)----学习SQLite3】

    推荐阅读