您的位置:首页 > 数据库

SQLite 基本使用

2014-05-14 11:26 127 查看
- (void)viewDidLoad

{

[super viewDidLoad];

[self openDB];

[self select];

}

#pragma mark 打开数据库

- (void)openDB

{

NSString *dbPath = [@"17houses.db" appendDocumentDir];

// 判断数据库文件是否在document目录,如果不在的话就拷贝过去

if (![[NSFileManager defaultManager] fileExistsAtPath:kDBName isDirectory:NO]) {

NSString *dbsource=[[NSBundle mainBundle]pathForResource:kDBName ofType:nil];

NSError *pathErr;

[[NSFileManager defaultManager]copyItemAtPath:dbsource toPath:dbPath error:&pathErr];

if (pathErr!=nil) {

NSAssert(pathErr!=nil, @"数据库拷贝发生错误%@",pathErr.localizedDescription);

}

}

_db = NULL;

if (SQLITE_OK == sqlite3_open([dbPath UTF8String], &_db)) {

NSLog(@"数据库打开成功");

} else {

NSLog(@"数据库打开失败");

}

}

#pragma mark 单步执行SQL

- (void)execSQL:(NSString *)sql message:(NSString *)message

{

char *errmsg = NULL;

if (SQLITE_OK == sqlite3_exec(_db, [sql UTF8String], NULL, NULL, &errmsg)) {

NSLog(@"%@成功!", message);

} else {

// C语言中字符串输出应该用%s

NSLog(@"%@失败 - %s", message, errmsg);

}

}

#pragma mark - 使用SQL查询菜谱结果集

- (NSArray *)select

{

NSString *sql = @"SELECT _id, subitem FROM userdata WHERE _id = 4";

// 1. 查询语句通常是使用字符串拼接出来的

// 因此,在正常使用查询语句之前,需要检查SQL语句的语法正确!

sqlite3_stmt *stmt = NULL;

NSMutableArray *List = nil;

if (SQLITE_OK == sqlite3_prepare_v2(_db, [sql UTF8String], -1, &stmt, NULL)) {

NSLog(@"语法正确");

List = [NSMutableArray array];

// 利用句柄,逐一查询符合条件的数据

// sqlite3_step 每次提取一条查询的记录行,不断重复,一直取到最后一条记录位置

while (SQLITE_ROW == sqlite3_step(stmt)) {

// 取到行信息,逐一获取每一列的内容

// iCol对应的就是SQL语句中字段的顺序,从0开始

// 根据实际查询字段的属性,使用sqlite3_column_xxx取得对应的内容即可

int ID = sqlite3_column_int(stmt, 0);

const unsigned char *name = sqlite3_column_text(stmt, 1);

// const unsigned char *直接输出看不出结果,需要转换

NSString *nameUTF8 = [NSString stringWithUTF8String:(const char *)name];

model *m = [model modelWithID:ID subitem:nameUTF8];

[List addObject:m];

}

} else {

NSLog(@"语法错误");

}

return List;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: