iPhone开发 第三方SQLITE封装库Pldatabase是本文要介绍的内容,不多说,我们先来看内容。花了三周时间,把原来使用原生SqliteAPI写的代码都改成了PLSqliteDatabase的操作,下载解压后把framework导入到项目中. 项目中需要sqlite.dylib,不然无法链接成功.。
pldatabase的网站地址:http://plsqlite.narod.ru/http://code.google.com/p/pldatabase/ 在这里可以下载和查看文档和代码.
下面我翻译一下其最简单的入门知识,在项目过程中, 发现这些其实也够用, 但异常处理这些我还没引进来使用.
基本使用指南
创建一个链接
为存在数据库文件打开一个链接:
PLSqliteDatabase *db = [[PLSqliteDatabase alloc] initWithPath: @"/path/to/database"];
if (![db open])
NSLog(@"Could not open database");
PLSqliteDatabase *db = [[PLSqliteDatabase alloc] initWithPath: @"/path/to/database"];
if (![db open])
NSLog(@"Could not open database");
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
更新操作(即没有返回记录集)
更新操作可以使用 -[PLDatabase executeUpdate:]
if (![db executeUpdate: @"CREATE TABLE example (id INTEGER)"])
NSLog(@"Table creation failed");
if (![db executeUpdate: @"INSERT INTO example (id) VALUES (?)", [NSNumber numberWithInteger: 42]])
NSLog(@"Data insert failed");
if (![db executeUpdate: @"CREATE TABLE example (id INTEGER)"])
NSLog(@"Table creation failed");
if (![db executeUpdate: @"INSERT INTO example (id) VALUES (?)", [NSNumber numberWithInteger: 42]])
NSLog(@"Data insert failed");
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
查询操作
执行查询操作可以使用 -[PLDatabase executeQuery:]. 该操作返回结果集是一个对象为PLResult的NSObject实例.使用方法如下
id<PLResultSet> results = [db executeQuery: @"SELECT id FROM example WHERE id = ?", [NSNumber numberWithInteger: 42]];
while ([results next]) {
NSLog(@"Value of column id is %d", [results intForColumn: @"id"]);
}
// 如果没有关闭结果集不会导致内存泄漏, 但会结果集会被保留直到下一次的查询
[results close];
id<PLResultSet> results = [db executeQuery: @"SELECT id FROM example WHERE id = ?", [NSNumber numberWithInteger: 42]];
while ([results next]) {
NSLog(@"Value of column id is %d", [results intForColumn: @"id"]);
}
// 如果没有关闭结果集不会导致内存泄漏, 但会结果集会被保留直到下一次的查询
[results close];
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
执行准备
PLPreparedStatement支持SQL操作的预编译和参数优先绑定. 执行准备的操作可以调用:-[PLDatabase prepareStatement:].
id<PLPreparedStatemet> stmt = [db prepareStatement: @"INSERT INTO example (name, color) VALUES (?, ?)"];
// 绑定参数 [stmt bindParameters: [NSArray arrayWithObjects: @"Widget", @"Blue", nil]];
// 执行插入 if ([stmt executeUpdate] == NO) NSLog(@"INSERT failed");
- 1.
- 2.
- 3.
基于命名参数的绑定
当参数很多的时候, 能过命名参数绑定的可读性强很多
用法如下:
// 准备
id<PLPreparedStatement> stmt = [db prepareStatement: @"INSERT INTO test (name, color) VALUES (:name, :color)"];
// 使用字典绑定参数
NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithCapacity: 2];
[parameters setObject: @"Widget" forKey: @"name"];
[parameters setObject: @"Blue" forKey: @"color"];
[stmt bindParameterDictionary: parameters];
// 执行插入
if ([stmt executeUpdate] == NO)
NSLog(@"INSERT failed");
// 准备
id<PLPreparedStatement> stmt = [db prepareStatement: @"INSERT INTO test (name, color) VALUES (:name, :color)"];
// 使用字典绑定参数
NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithCapacity: 2];
[parameters setObject: @"Widget" forKey: @"name"];
[parameters setObject: @"Blue" forKey: @"color"];
[stmt bindParameterDictionary: parameters];
// 执行插入
if ([stmt executeUpdate] == NO)
NSLog(@"INSERT failed");
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
小结:详解第三方SQLITE封装库Pldatabase的内容介绍完了,关于PLDatabase的基本操作也完了. 希望本文对你有所帮助。