第三方SQLITE封装库pldatabase的介绍

    技术2022-05-20  40

    源自:http://aminby.net/2010/08/iphone-sqlite-pldatabase-introduce/

    引文

    花了三周时间,把原来使用原生SqliteAPI写的代码都改成了PLSqliteDatabase的操作.下载解压后把framework导入到项目中. 项目中需要sqlite.dylib,不然无法链接成功.

    pldatabase的网站地址:http://plsqlite.narod.ru/http://code.google.com/p/pldatabase/ 在这里可以下载和查看文档和代码.

    下面我翻译一下其最简单的入门知识,在项目过程中, 发现这些其实也够用, 但异常处理这些我还没引进来使用.

    基本使用指南

    创建一个链接

    为存在数据库文件打开一个链接:

    view plain copy to clipboard print ? PLSqliteDatabase *db = [[PLSqliteDatabase alloc] initWithPath:  @"/path/to/database"];  if (![db open])      NSLog(@"Could not open database");  

    更新操作(即没有返回记录集)

    更新操作可以使用 -[PLDatabase executeUpdate:]

    view plain copy to clipboard print ? 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");  

    查询操作

    执行查询操作可以使用 -[PLDatabase executeQuery:]. 该操作返回结果集是一个对象为PLResult的NSObject实例.使用方法如下

    view plain copy to clipboard print ? 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];  

    执行准备

    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");

    基于命名参数的绑定

    当参数很多的时候, 能过命名参数绑定的可读性强很多用法如下:

    view plain copy to clipboard print ? // 准备  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");  


    最新回复(0)