SQLite ([http://www.sqlite.org/docs.html](http://www.sqlite.org/docs.html)) 是一个轻量级的关系数据库。SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的内存就够了,目前应用于Android、iOS、Windows Phone等智能手机。iOS 使用时SQLite,只需要加入 libsqlite3.dylib 依赖以及引入 sqlite3.h 头文件即可。
数据库操作包含打开数据库、创建表,表的增、删、改、查。下面代码给出了数据库操作。
创建并打开数据库:
~~~
-(BOOL) openDB{
//获取数据库路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documents = [paths objectAtIndex:0];
NSString *database_path = [documents stringByAppendingPathComponent:DBNAME];
//如果数据库存在,则用sqlite3_open直接打开(不要担心,如果数据库不存在sqlite3_open会自动创建)
//打开数据库,这里的[path UTF8String]是将NSString转换为C字符串,因为SQLite3是采用可移植的C(而不是
//Objective-C)编写的,它不知道什么是NSString.
if (sqlite3_open([database_path UTF8String], &db) == SQLITE_OK) {
return YES;
}else{
return NO;
NSLog(@"数据库打开失败");
sqlite3_close(db);
}
}
~~~
iOS中没有提供创建数据库的命令,当使用sqlite3_open时,如果数据库文件不存在会自行创建数据库,如果存在会打开数据库。打开数据库后就可以创建表并操作表内容了,iOS中的sqlite3使用sqlite3_exec来创建表、插入表内容、修改表内容、删除表内容等操作,使用sqlite3_prepare_v2来查询表。下面给给出了sqlite3_exec的封装:
~~~
-(void)execSql:(NSString *)sql
{
if ([self openDB]) {
char *err;
if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
NSLog(@"数据库操作数据失败!");
}else{
NSLog(@"%@",sql);
}
sqlite3_close(db);
}
}
~~~
创建表:
~~~
NSString *sqlCreateTable = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@' ('%@' INTEGER PRIMARY KEY AUTOINCREMENT, '%@' TEXT, '%@' INTEGER, '%@' TEXT)",TABLENAME,ID,NAME,AGE,ADDRESS];
[self execSql:sqlCreateTable];
~~~
插入数据:
~~~
-(void) insertData{
NSString *insertSql1= [NSString stringWithFormat:
@"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
TABLENAME, NAME, AGE, ADDRESS, @"张三", @"13", @"济南"];
[self execSql:insertSql1];
NSString *insertSql2 = [NSString stringWithFormat:
@"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
TABLENAME, NAME, AGE, ADDRESS, @"李四", @"12", @"济南"];
[self execSql:insertSql2];
}
~~~
修改表:
~~~
-(void) updateData{
NSString *updateSql = [NSString stringWithFormat:
@"UPDATE '%@' SET '%@' = '%@' WHERE '%@' = '%@'",
TABLENAME, AGE, @"15" ,AGE, @"13"];
[self execSql:updateSql];
}
~~~
删除表内容:
~~~
-(void) deleteData{
NSString *sdeleteSql = [NSString stringWithFormat:
@"delete from %@ where %@ = '%@'",
TABLENAME, NAME, @"张三"];
[self execSql:sdeleteSql];
}
~~~
上面实现了表内容的增、改、删,下面实现表内容查询。
~~~
-(void) selectData{
[self openDB];
NSString *sqlQuery = [NSString stringWithFormat:
@"SELECT * FROM %@",TABLENAME];
sqlite3_stmt * statement;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {
//查询结果集中一条一条的遍历所有的记录,这里的数字对应的是列值,注意这里的列值
while (sqlite3_step(statement) == SQLITE_ROW) {
char *name = (char*)sqlite3_column_text(statement, 1);
NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
int age = sqlite3_column_int(statement, 2);
char *address = (char*)sqlite3_column_text(statement, 3);
NSString *nsAddressStr = [[NSString alloc]initWithUTF8String:address];
NSLog(@"name:%@ age:%d address:%@",nsNameStr,age, nsAddressStr);
}
}else{
NSLog(@"select error:%@",sqlQuery);
}
sqlite3_close(db);
}
~~~
好了,这就是全部了,iOS中数据库操作的类封装的并不太好用,希望大家尽量封装自己的类,。
[Demo下载](http://download.csdn.net/detail/xyz_lmn/5751891)
![](https://box.kancloud.cn/2016-01-14_569725c526ffc.jpg)
- 前言
- (一)——ios搭建开发环境
- (二)——Hello iOS
- (三)——iOS系统架构
- (四)——iOS应用程序生命周期
- (五)——UI基础UIWindow、UIView
- (六)——ViewController
- (七)——UI基础UIButton
- (八)——iOS网络通信http之NSURLConnection
- (九)—— xml数据解析
- (十)——iOS真机调试
- (十一)——JSON数据解析
- (十二)——iOS国际化
- (十三)——获取手机信息(UIDevice、NSBundle、NSLocale)
- (十四)——打电话、发短信
- (十五)——数据库操作(SQLite)
- (十六)——数据库操作(使用FMDB)
- (十七)——文件操作(NSFileManager)
- Swift初学习