`
zhengjj_2009
  • 浏览: 154610 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

OC的SQLite可参考的方法

 
阅读更多

看别人的代码,觉得有些代码封装得不错,所以保留下来,希望有帮助。

操作数据库的接口部分:

#import <Foundation/Foundation.h>
#import <sqlite3.h>

@interface BaseDB : NSObject
//创建表
- (void)createTable:(NSString *)sql;
/**
 * 接口描述:插入数据、删除数据、修改数据
 * 参数:  sql: SQL语句
 * 返回值:是否执行成功 *
 */
- (BOOL)dealData:(NSString *)sql paramsarray:(NSArray *)params;

/**
 *  接口描述:查询数据
 *  参数:  sql:SQL语句
 *  返回值:[
                [“字段值1”,“字段值2”,“字段值3”],
                [“字段值1”,“字段值2”,“字段值3”],
                [“字段值1”,“字段值2”,“字段值3”], 
           ]
 */
- (NSMutableArray *)selectData:(NSString *)sql columns:(int)number;
@end

 

每个接口的实现部分:

#import "BaseDB.h"
#define kFilename  @"data.sqlite"
@implementation BaseDB
- (NSString *)filePath {
    NSString *filePath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/%@",kFilename];
    return filePath;
}
- (void)createTable:(NSString *)sql {
    sqlite3 *sqlite = nil;
    //打开数据库
    if (sqlite3_open([self.filePath UTF8String], &sqlite) != SQLITE_OK) {
        NSLog(@"打开数据库失败");
        sqlite3_close(sqlite);
        return;
    }
    
    //执行创建表SQL语句
    char *errmsg = nil;
    if (sqlite3_exec(sqlite, [sql UTF8String], NULL, NULL, &errmsg) != SQLITE_OK) {
        NSLog(@"创建表失败:%s",errmsg);
        sqlite3_close(sqlite);
    }
    //关闭数据库
    sqlite3_close(sqlite);   
}

/**
 * 接口描述:插入数据、删除数据、修改数据
 * 参数:  sql: SQL语句
 * 返回值:是否执行成功 *
 */
// INSERT INTO User(username,password,email) values(?,?,?)
- (BOOL)dealData:(NSString *)sql paramsarray:(NSArray *)params {
    sqlite3 *sqlite = nil;
    sqlite3_stmt *stmt = nil;    
    //打开数据库
    if (sqlite3_open([self.filePath UTF8String], &sqlite) != SQLITE_OK) {
        NSLog(@"打开数据库失败");
        sqlite3_close(sqlite);
        return NO;
    }
    
    //编译SQL语句
    if (sqlite3_prepare_v2(sqlite, [sql UTF8String], -1, &stmt, NULL) != SQLITE_OK) {
        NSLog(@"SQL语句编译失败");
        sqlite3_close(sqlite);
        return NO;
    }
    
    //绑定数据
    for (int i=0; i<params.count; i++) {
        NSString *value = [params objectAtIndex:i];
        sqlite3_bind_text(stmt, i+1, [value UTF8String], -1, NULL);
    }

    //执行SQL语句
    if(sqlite3_step(stmt) == SQLITE_ERROR) {
        NSLog(@"SQL语句执行失败");
        sqlite3_close(sqlite);
        return NO;        
    }

    //关闭数据库
    sqlite3_finalize(stmt);
    sqlite3_close(sqlite);
    return YES;
}

/**
 *  接口描述:查询数据
 *  参数:  sql:SQL语句
 *  返回值:[
    [“字段值1”,“字段值2”,“字段值3”],
    [“字段值1”,“字段值2”,“字段值3”],
    [“字段值1”,“字段值2”,“字段值3”],
  ]
 */
//SELECT username,password,email FROM User
- (NSMutableArray *)selectData:(NSString *)sql columns:(int)number {
    sqlite3 *sqlite = nil;
    sqlite3_stmt *stmt = nil;
    
    //打开数据库
    if (sqlite3_open([self.filePath UTF8String], &sqlite) != SQLITE_OK) {
        NSLog(@"打开数据库失败");
        sqlite3_close(sqlite);
        return NO;
    }
    
    //编译SQL语句
    if (sqlite3_prepare_v2(sqlite, [sql UTF8String], -1, &stmt, NULL) != SQLITE_OK) {
        NSLog(@"SQL语句编译失败");
        sqlite3_close(sqlite);
        return NO;
    }
    
    //查询数据
    int result = sqlite3_step(stmt);
    NSMutableArray *data = [NSMutableArray array];
    while (result == SQLITE_ROW) {
        NSMutableArray *row = [NSMutableArray arrayWithCapacity:3];
        for (int i=0; i<number; i++) {
            char *columnText = (char *)sqlite3_column_text(stmt, i);
            NSString *string = [NSString stringWithCString:columnText encoding:NSUTF8StringEncoding];
            [row addObject:string];
        }
        [data addObject:row];        
        result = sqlite3_step(stmt);
    }

    //关闭数据库
    sqlite3_finalize(stmt);
    sqlite3_close(sqlite);
    return data;
}
@end 

 

 如何使用这些接口呢?

具体例子:

#import "UserDB.h"
static UserDB *instnce;
@implementation UserDB
+ (id)shareInstance {/*单例模式*/
    if (instnce == nil) {
        instnce = [[[self class] alloc] init];
    }
    return instnce;
}

- (void)createTable {
    NSString *sql = @"CREATE TABLE IF NOT EXISTS User (username TEXT primary key,password TEXT,age TEXT);";
    [self createTable:sql];
}

- (BOOL)addUser:(UserModel *)userModel {
    NSString *sql = @"INSERT OR REPLACE INTO User (username,password,age) VALUES (?,?,?)";
    NSArray *params = [NSArray arrayWithObjects:userModel.username,
                                                userModel.password,
                                                userModel.age, nil];    
    return [self dealData:sql paramsarray:params];
}

- (NSArray *)findUsers {
    NSString *sql = @"SELECT username,password,age FROM User";
    NSArray *data = [self selectData:sql columns:3];
    NSMutableArray *users = [NSMutableArray array];
    for (NSArray *row in data) {
        NSString *username = [row objectAtIndex:0];
        NSString *password = [row objectAtIndex:1];
        NSString *age = [row objectAtIndex:2];        
        UserModel *user = [[UserModel alloc] init];
        user.username = username;
        user.password = password;
        user.age = age;
        [users addObject:user];
        [user release];
    }    
    return users;
}

@end

 

 

 

分享到:
评论

相关推荐

    iOS源生SQLite3基本操作(OC版)

    以上就是iOS开发中使用Objective-C进行SQLite3基本操作的方法。理解并掌握这些知识点,能够帮助开发者有效地管理和操作应用程序中的数据。在实际开发中,还应注意数据安全、线程同步等问题,确保程序的稳定性和可靠...

    SQLite3参考手册

    通过`Class.forName("org.sqlite.JDBC")`加载驱动,然后使用`Connection conn = DriverManager.getConnection("jdbc:sqlite:/path/to/database")`建立连接,之后可以使用标准的JDBC方法执行SQL操作。 在PHP中,可以...

    SQLite参考手册

    SQLite参考手册 SQLite参考手册 SQLite参考手册 SQLite参考手册 SQLite参考手册 SQLite参考手册 SQLite参考手册

    SQLite3.6 参考手册 chm版

    我将sqlite3.6的在线帮助,做成了chm文件。 希望大家喜欢。 本人也发起了翻译项目,有兴趣可以使用gmail邮箱报名。 http://groups.google.com/group/sqlite-zh-doc

    SQLite参考手册(chm格式).7z

    这份"SQLite参考手册(chm格式)"是学习和使用SQLite的重要参考资料,包含了对SQLite数据库系统的详细描述和技术指导。 SQLite支持标准的SQL语法,包括数据定义语言(DDL)用于创建和修改数据库结构,数据操纵语言...

    英文版SQLite数据的参考资料

    这份"英文版SQLite数据的参考资料"提供了全面深入的SQLite知识,适合对SQLite感兴趣的开发者或者需要深入理解SQLite内部机制的技术人员。 首先,SQLite的核心特性在于它的嵌入式设计。它不需要单独的服务器进程,...

    SQLITE资料(SQLite3.0,SQLite语法,SQLite参考手册)

    在本资料包中,你将找到关于SQLite 3.0版本的详细信息,包括其基本语法和参考手册,这对于理解和操作SQLite数据库至关重要。 首先,`sqlite.chm`文件是SQLite的帮助文件,通常包含了全面的API参考、错误代码、函数...

    中文SQLite参考书册

    这本书册“中文SQLite参考书册”是一个宝贵的资源,它涵盖了SQLite的基础知识到高级特性,为开发者提供了全面的指导。以下是一些主要的知识点: 1. **SQLite架构**:SQLite作为一个嵌入式数据库,不依赖于单独的...

    SQLite数据库安装方法

    ### SQLite数据库安装与基本操作详解 ...此外,还提到了安装SQLiteBrowser可视化工具的方法,进一步提高了SQLite数据库的易用性。通过这些基本操作的学习,开发者可以更加高效地利用SQLite来构建自己的应用程序。

    js+html5操作sqlite数据库的方法.docx

    在上面的代码中,我们使用 `openDatabase` 方法创建了一个 SQLite 数据库对象,然后返回一个对象,该对象包含了对 SQLite 数据库的基本操作。 使用示例 以下是一个使用 `lanxDB` 类的示例代码: ``` var db = new ...

    iOS源生SQLite3基本操作(Swift-OC混编)

    在Swift中定义一个Cocoa Touch Class或Category,然后在Objective-C代码中实现SQLite操作,再在Swift中调用这些方法。确保你的Swift类或Category遵循`@objc`规则以便暴露给Objective-C。 总之,SQLite3是iOS开发中...

    Sqlite3重编译版本,支持Sqlite3_key和Sqlite3_rekey方法.rar

    这个压缩包文件提供了一个特别的SQLite3版本,它经过了重编译,增加了对`Sqlite3_key`和`Sqlite3_rekey`方法的支持。这两个方法是关于数据库加密的关键功能,对于那些需要增强数据安全性的应用来说尤为重要。 `...

    SQLite3.0参考教程

    SQLite库可以解析大部分标准SQL语言。但它也省去了一些特性 并且加入了一些自己的新特性

    sqlite源码和编译方法

    6. 安装(可选):`sudo make install`,这将把SQLite库和命令行工具安装到系统默认路径。 三、编译选项 SQLite提供了一些编译选项来定制其功能和性能,例如: - `--disable-float`:禁用浮点数支持,使SQLite更加...

    C#解决SQlite并发异常问题的方法(使用读写锁)

    本文实例讲述了C#解决SQlite并发异常问题的方法。分享给大家供大家参考,具体如下: 使用C#访问sqlite时,常会遇到多线程并发导致SQLITE数据库损坏的问题。 SQLite是文件级别的数据库,其锁也是文件级别的:多个线程...

    C#实现Excel导入sqlite的方法

    此外,注意在实际项目中,为了提高代码的可维护性和灵活性,可以考虑以下几点优化: - 使用配置文件存储数据库连接字符串,而不是硬编码在代码中。 - 对于大量数据的导入,可以使用批处理或事务来提高性能和保证数据...

    Windows下SQLite创建数据库的方法

    下载完成后,解压缩得到的文件夹中会包含一个名为`sqlite3.exe`的可执行文件,这是SQLite的核心工具,用于创建和管理数据库。为了方便使用,建议将包含`sqlite3.exe`的目录添加到系统的环境变量中,这样可以在任意...

    SQLite3 API编程手册.pdf

    SQLite3 API 编程手册 SQLite3 是一个小巧的关系数据库管理系统,它提供了一个轻量级的数据库解决方案。下面是 SQLite3 API 编程手册的相关知识点: 版本 SQLite3 的最新代码和编译版本可以从 www.sqlite.org ...

    VS2010连接SQLite数据库的方法与组件

    VS2010连接SQLite数据库的方法与组件,主要使用System.Data.SQLite提供的组件

    C#操作SQLite数据库之读写数据库的方法

    本文实例讲述了C#操作SQLite数据库之读写数据库的方法。分享给大家供大家参考,具体如下: 这里演示读写数据库并在窗体(Form)中显示其数据,其方式为: 读: Database(SQLite) -&gt; DataAdapter -&gt; DataSet -&gt; ...

Global site tag (gtag.js) - Google Analytics