使用 SQLiteManager 操作 sqlite3 数据库

这篇博客介绍了如何使用SQLiteManager,一个轻量级的SQLite3数据库操作工具,适用于iOS开发。作者强调了避免直接使用面向过程的sqlite3 API的原因,并推荐了FMDB作为更优选择。虽然SQLiteManager存在一些限制,如在非ARC环境下可能导致内存泄露,但提供了基本的数据库操作功能,包括打开数据库、创建表、插入、查询、修改和删除。
摘要由CSDN通过智能技术生成

SQLiteManager  

https://github.com/misato/SQLiteManager4iOS

      本人以前从事过嵌入式开发,后来转职为iOS开发,即使如此,也绝不想去碰C语言级别的面向过程的 sqlite3 来操作数据库,做高级语言开发还去折腾面向过程的东西,一个小小的nil没判断好就导致程序崩溃, 这就是 sqlite3 APIs 给你带来的问题,只有封装成面向对象的接口才有可能会去用.有一个封装得挺好的 FMDB 是不二的选择,但这个 SQLiteManager 属于轻量级封装,满足了最最基本的需求,但是,他是在开了ARC的情形下使用的,也就是说,没开ARC后会各种泄露......

      上面的链接可以下载源码,我修改了源码,适用于我自己,提供如下:

SQLiteManager.h

复制代码
#import <Foundation/Foundation.h>
#import "sqlite3.h"


enum errorCodes {
    kDBNotExists,
    kDBFailAtOpen, 
    kDBFailAtCreate,
    kDBErrorQuery,
    kDBFailAtClose
};

@interface SQLiteManager : NSObject {

    sqlite3 *db; // The SQLite db reference
    NSString *databaseName; // The database name
}

- (id)initWithDatabaseNamed:(NSString *)name;

// SQLite Operations
- (NSError *) openDatabase;
- (NSError *) doQuery:(NSString *)sql;
- (NSError *)doUpdateQuery:(NSString *)sql withParams:(NSArray *)params;
- (NSArray *) getRowsForQuery:(NSString *)sql;
- (NSError *) closeDatabase;
- (NSInteger)getLastInsertRowID;

- (NSString *)getDatabaseDump;

@end
复制代码

SQLiteManager.m

复制代码
#import "SQLiteManager.h"


#define FOLDER_PATH   @"/Library/Caches/YOU_FOLDER_NAME"


// Private methods
@interface SQLiteManager (Private)

- (NSString *)getDatabasePath;
- (NSError *)createDBErrorWithDescription:(NSString*)description andCode:(int)code;

@end



@implementation SQLiteManager

#pragma mark Init & Dealloc

/**
 * Init method.
 * Use this method to initialise the object, instead of just "init".
 *
 * @param name the name of the database to manage.
 *
 * @return the SQLiteManager object initialised.
 */

- (id)initWithDatabaseNamed:(NSString *)name; {
    self = [super init];
    if (self != nil) {
        databaseName = [[NSString alloc] initWithString:name];
        db = nil;
    }
    return self;
}

#pragma mark SQLite Operations

/**
 * Open or create a SQLite3 database.
 *
 * If the db exists, then is opened and ready to use. If not exists then is created and opened.
 *
 * @return nil if everything was ok, an NSError in other case.
 *
 */

- (NSError *) openDatabase {
    
    NSError *error = nil;
    
    NSString *databasePath = [self getDatabasePath];
    NSLog(@"%@", databasePath);
    
    const char *dbpath = [databasePath UTF8String];
    int result = sqlite3_open(dbpath, &db);
    if (result != SQLITE_OK) {
        const char *errorMsg = sqlite3_errmsg(db);
        NSString *errorStr = [NSString stringWithFormat:@"The database could not be opened: %@",[NSString stringWithCString:errorMsg encoding:NSUTF8StringEncoding]];
        error = [self createDBErrorWithDescription:errorStr    andCode:kDBFailAtOpen];
    }
    
    return error;
}


/**
 * Does an SQL query.
 *
 * You should use this method for everything but SELECT statements.
 *
 * @param sql the sql statement.
 *
 * @return nil if everything was ok, NSError in other case.
 */

- (NSError *)doQuery:(NSString *)sql {
    
    NSError *openError = nil;
    NSError *errorQuery = nil;
    
    //Check if database is open and ready.
    if (db == nil) {
        openError = [self openDatabase];
    }
    
    if (openError == nil) {
        sqlite3_stmt *statement;
        const
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值