日期:2014-05-16 浏览次数:20639 次
iphone中数据库sqlite3的使用
?
?
第1步:检查数据库sqlite3是否安装。
?
打开1个终端,输入命令:
?
sqlite3
?
如果显示下面的信息,表示电脑上已经安装了sqlite3数据库了。
?
?
SQLite version 3.7.5
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>?
?
第2步:创建1个database。
例如,我们要创建一个名为stephen.db的database,则输入下面的命令:
?
sqlite3 stephen.db
?
如果,在当前目录下已经存在了stephen.db文件,则执行上面命令后就会打开stephen.db;如果原来不存在,则会新创建这个stephen.db文件。
?
执行下面命令,查看stephen.db是否创建成功。
?
.table
?
该命令正常执行后,会显示数据库中全部数据表的名称。
如果显示如下信息,表示stephen.db没有创建成功。
?
Error: unable to open database "stephen.db": unable to open database file
?
遇到该情况后,一般是当前终端用户权限导致的。你可以通过执行命令 whoami 来查看当前终端对应的账号(假设是tom),然后进入到tom用户主目录 /Users/tom ,然后执行 sqlite3 stephen.db 命令,就可以成功了。
?
?
第3步:创建1个表并增加表的记录。
?
在stephen.db中创建1个表,表名为 t1_user
?
create table t1_user(us_user,us_password,us_age);
增加表的记录:
?
insert into t1_user values('stephen','12345678',1); insert into t1_user values('jingle','hello',2);?
第4步:新建一个iphone项目。
(1)在项目的Resources中将上面创建的stephen.db导入进来。
鼠标右键点击Resources,然后选择Add/Existing Files...,找到并选择上面创建的stephen.db文件,然后点按钮[Add]
选中 Copy items into destination group's folder(if needed),然后再点按钮[Add]。
(2)在项目的Frameworks中引入sqlite3的数据库驱动lib库。
鼠标右键点击 Frameworks,然后选择Add/Existing Frameworks...,找到并选择libsqlite3.0.dylib, 然后点按钮[Add]。
(3)实例代码如下:
?
?
//database数据库文件名 NSString *databaseFileName=@"stephen.db"; //取得当前应用的主目录 //例如:/Users/tom/Library/Application Support/iPhone Simulator/4.2/Appli // cations/29FE1D23-CDFA-46FE-A82B-275679F7E365/Documents //其中的tom代表你的帐号目录 //其中的29FE1D23-CDFA-46FE-A82B-275679F7E365是当前应用对应的目录,不同应用该值是不同的 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory=[paths objectAtIndex:0]; //取得当前应用主目录数据库文件存储路径 NSString *dbFile=[documentsDirectory stringByAppendingPathComponent:databaseFileName]; NSLog(@"dbFile=%@",dbFile); //检查数据库文件是否存在 NSFileManager *fileManager=[NSFileManager defaultManager]; BOOL find=[fileManager fileExistsAtPath:dbFile]; BOOL copySuccessed = NO; if (!find) { //取得当前应用的Resources目录中的数据库文件路径 NSString *srcDbFile=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseFileName]; //将当前应用Resources目录中的数据库文件复制到应用的主目录下 copySuccessed=[fileManager copyItemAtPath:srcDbFile toPath:dbFile error:nil]; if (copySuccessed) { NSLog(@"copy successed."); }else { NSLog(@"copy failed."); } } if (find || copySuccessed) { NSLog(@"db exists."); sqlite3 *db; sqlite3_stmt *stmt; @try { //sqlite3_open :获得数据库连接(连接放入db中) if (sqlite3_open([dbFile UTF8String], &db)!=SQLITE_OK) { NSLog(@"Error:open db file"); }else { NSLog(@"open db is OK."); //start query NSString *sql=@"select * from t1_user"; //sqlite3_prepare_v2:执行数据库查询 if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, NULL)==SQLITE_OK) { //sqlite3_step:获取纪录 while(sqlite3_step(stmt)==SQLITE_ROW)