iphone中数据库sqlite3的使用

xuejianyong 2012-03-17

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) {
						int index=0;
						NSString *columnName=[NSString stringWithUTF8String:
											  (const char *)sqlite3_column_name(stmt, index)];
						NSString *info=[NSString stringWithUTF8String:
										(const char*)sqlite3_column_text(stmt, index)];
						NSLog(@"%@=%@",columnName,info);
						
					}
				}				
			}
		}
		@catch (NSException * e) {
			NSLog(@"error:%@",[e reason]);
		}
		@finally {
			NSLog(@"finally");
			int dbResult;
			dbResult=sqlite3_finalize(stmt);
			if (dbResult==SQLITE_OK) {
				NSLog(@"stmt free successed");
			}else {
				NSLog(@"stmt free failed:%i",dbResult);
			}
			dbResult = sqlite3_close(db);
			if (dbResult==SQLITE_OK) {
				NSLog(@"db free successed");
			}else {
				NSLog(@"db free failed:%i",dbResult);
			}
		}
	}else {
		NSLog(@"db does not exists.");
	}
 

代码执行显示结果:

2012-03-16 16:21:59.449 DbDemo[39058:9203] dbFile=/Users/hanshu/Library/Application Support/iPhone Simulator/4.2/Applications/29FE1D23-CDFA-46FE-A82B-275679F7E365/Documents/stephen.db

2012-03-16 16:21:59.450 DbDemo[39058:9203] db exists.

2012-03-16 16:21:59.451 DbDemo[39058:9203] open db is OK.

2012-03-16 16:21:59.453 DbDemo[39058:9203] us_user=stephen

2012-03-16 16:21:59.454 DbDemo[39058:9203] us_user=jingle

2012-03-16 16:21:59.455 DbDemo[39058:9203] finally

2012-03-16 16:21:59.460 DbDemo[39058:9203] stmt free successed

2012-03-16 16:21:59.461 DbDemo[39058:9203] db free successed

相关推荐