第三方SQLITE打包库pldatabase的介绍

1. 怎么导入PlausibleDatabase.framework框架

先下载PlausibleDatabase.framework框架包,然后把该包直接加入到库中,然后再加入#import <PlausibleDatabase/PlausibleDatabase.h>头文件


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

第三方SQLITE封装库Pldatabase


基本使用指南

创建一个链接

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

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

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

更新操作可以使用 -[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");  
 

查询操作

执行查询操作可以使用 -[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];  
 

执行准备

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

基于命名参数的绑定

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

// 准备  
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");  
 

连接sqlite数据库的代码  

下面的代码其实满简单的,简单介绍一下怎么样在iphone代码中连接sqlite数据库。在此之前,要引入PlausibleDatabase.frameworklibsqlite3.dylib文件。

下面的是database.h头文件:


#import <Foundation/Foundation.h>

#import <PlausibleDatabase/PlausibleDatabase.h>


@interface DataBase : NSObject {


}


+ (PLSqliteDatabase *) setup;


+ (void) close;


@end


下面为database.m文件: 

#import "DataBase.h"

#import <PlausibleDatabase/PlausibleDatabase.h>


static PLSqliteDatabase * dbPointer;



@implementation DataBase


//单例


+ (PLSqliteDatabase *) setup{

    

if (dbPointer) {

return dbPointer;

}

NSLog(@"%@",NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES));

    

NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

NSString *realPath = [documentPath stringByAppendingPathComponent:@"book.sqlite"];

NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"Book" ofType:@"sqlite"];

NSFileManager *fileManager = [NSFileManager defaultManager];

    

if (![fileManager fileExistsAtPath:realPath]) {

NSError *error;

if (![fileManager copyItemAtPath:sourcePath toPath:realPath error:&error]) {

NSLog(@"%@",[error localizedDescription]);

}

}

NSLog(@"复制sqlite到路径:%@成功。",realPath);

//dbpointer地址修改为可修改的realPath

dbPointer = [[PLSqliteDatabase alloc] initWithPath:realPath];

[dbPointer open];

return dbPointer;

}


+ (void) close{

if (dbPointer) {

[dbPointer close];

dbPointer = NULL;

}

}

@end


代码的调用如下的例子:
+ (NSArray *) findAll{
    PLSqliteDatabase *dataBase = [DataBase setup];
    
    id<PLResultSet>rs;
    rs = [dataBase executeQuery:@"SELECT *FROM Book"];

    
    //定义一个数组存放所有书籍的信息
    NSMutableArray *books = [[NSMutableArray alloc]init];
    
    //把rs中的数据库信息遍历到books数组中
    while ([rs next]) {
        NSString *ID = [rs objectForColumn:@"ID"];
        NSString *name = [rs objectForColumn:@"Name"];
        NSString *author = [rs objectForColumn:@"Author"];
        NSString *publishHouse = [rs objectForColumn:@"PublishHouse"];
        NSString *date = [rs objectForColumn:@"Date"];
        NSString *briefIntroducation = [rs objectForColumn:@"BriefIntroducation"];
        
        //初始化book存放到books里面
        Book *book = [[Book alloc]initWithID:ID name:name publishHouse:publishHouse author:author briefIntroducation:briefIntroducation date:date];
        
        [books addObject:book];
    }
    [rs close];
    return books;
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值