`
yangping_Account
  • 浏览: 192972 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

iPhone开发之SQLite的使用

 
阅读更多

SQLite确实是个好东西,不需要引擎,啥程序都可以使用,特别在嵌入式开发中使用得特别多。

记得刚开始在iPhone中使用SQLite的时候,琢磨了几天,才完成增删改查,费了九牛二虎之力呀。

iPhone中使用SQLite其实也不算简单,链接数据库、执行SQL,都感觉挺复杂的。经过多番研究,将iPhone中SQLite的使用方法封装到一个类中了,增删改查使用起来都极其方便,已经在多个项目中使用了我封装的这个类,目前还没发现有啥bug。

DataBaseVC.h

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

@interface DataBaseVC : NSObject {
    sqlite3 *database;
	NSString *path;
}

- (void)readyDatabse;
- (void)getPath;
- (NSMutableArray *)selectData:(NSString *)sql columns:(int)col;
- (BOOL)dealData:(NSString *)sql paramarray:(NSArray *)param;

@end

DataBaseVC.m

#import "DataBaseVC.h"

@implementation DataBaseVC

#pragma mark 准备数据库
- (void)readyDatabse {
    BOOL success;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"test.sqlite"];
    success = [fileManager fileExistsAtPath:writableDBPath];
	[self getPath];
    if (success) return;
    // The writable database does not exist, so copy the default to the appropriate location.
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"test.sqlite"];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
    if (!success) {
        NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    }
}

#pragma mark 路径
- (void)getPath{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    path = [documentsDirectory stringByAppendingPathComponent:@"test.sqlite"];
}

#pragma mark 查询数据库
/************
 sql:sql语句
 col:sql语句需要操作的表的所有字段数
 ***********/
- (NSMutableArray *)selectData:(NSString *)sql columns:(int)col {
	[self readyDatabse];
	NSMutableArray *returndata = [[NSMutableArray alloc] init];//所有记录
    if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {
        sqlite3_stmt *statement = nil;
        if (sqlite3_prepare_v2(database, [sql UTF8String], -1, &statement, NULL) == SQLITE_OK) {
            while (sqlite3_step(statement) == SQLITE_ROW) {
				NSMutableArray *row;//一条记录
				row = [[NSMutableArray alloc] init];
				//NSLog(@"=====%@",statement);
				for(int i=0; i<col; i++){
					[row addObject:[NSString stringWithFormat:@"%s", sqlite3_column_text(statement, i)]];
				}
				[returndata addObject:row];
				[row release];
            }//end while
        }else {
			NSLog(@"Error: failed to prepare");
			return NO;
		}//end if
		//NSLog(@"returndata:%@",returndata);
		return returndata;
        sqlite3_finalize(statement);
    } else {
        sqlite3_close(database);
        NSAssert1(0, @"Failed to open database with message '%s'.", sqlite3_errmsg(database));
    }//end if
	sqlite3_close(database);
	return [returndata autorelease];
}

#pragma mark 增,删,改数据库
/************
 sql:sql语句
 param:sql语句中?对应的值组成的数组
 ***********/
- (BOOL)dealData:(NSString *)sql paramarray:(NSArray *)param {
	[self readyDatabse];
    if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {
        sqlite3_stmt *statement = nil;
        int success = sqlite3_prepare_v2(database, [sql UTF8String], -1, &statement, NULL);
		if (success != SQLITE_OK) {
			NSLog(@"Error: failed to prepare");
			return NO;
		}
		//绑定参数
		for (int i=0; i<[param count]; i++) {
			NSString *temp = [param objectAtIndex:i];
			sqlite3_bind_text(statement, i+1, [temp UTF8String], -1, SQLITE_TRANSIENT);
			[temp release];
		}
		success = sqlite3_step(statement);
        sqlite3_finalize(statement);
		if (success == SQLITE_ERROR) {
			NSLog(@"Error: failed to insert into the database");
			return NO;
		}
    }
	sqlite3_close(database);
	NSLog(@"dealData 成功");
	return TRUE;
}

@end

在此类中将查询写成了一个方法,增、删、改写成了一个方法。
调用起来都灰常简单:

sqlparam = [NSMutableArray arrayWithObject:lineslastdatedate];
sqlstring = [NSMutableString stringWithFormat:@"UPDATE configuration SET LinesLastUpdateDate=?"];
 [self dealData:sqlstring paramarray:sqlparam];
 增
 NSArray *paramarray = [[NSArray alloc] initWithObjects:@"Miles", @"28", @"69", nil];
 NSString *sql = @"INSERT INTO t_test (name, age, score) VALUES (?, ?, ?)";
 [self dealData:sql paramarray:paramarray];
 
 删
 NSArray *paramarray = [[NSArray alloc] initWithObjects:@"2", nil];
 NSString *sql = @"DELETE FROM t_test WHERE id=?";
 [self dealData:sql paramarray:paramarray];

 改
 NSArray *paramarray = [[NSArray alloc] initWithObjects:@"Miles", @"30", @"2", nil];
 NSString *sql = @"UPDATE t_test SET name=?, age=? WHERE id=?";
 [self dealData:sql paramarray:paramarray];

 查
 NSString *sqls = [NSString stringWithFormat:@"SELECT * FROM t_test WHERE score>%i", 0];
 [self selectData:sqls columns:4];
分享到:
评论

相关推荐

    iPhone中Sqlite的使用

    在iOS开发中,SQLite是一个广泛使用的轻量级关系型数据库,尤其在iPhone应用程序中,它提供了数据持久化存储的能力。SQLite3.0是SQLite的其中一个版本,它支持多种数据库操作,如创建表、插入数据、查询数据等。下面...

    iphone开发SQLite数据库使用

    ### iPhone开发SQLite数据库使用 #### 一、引言 随着移动应用开发的不断发展,数据库管理成为了一项重要的技能。SQLite作为一种轻量级的关系型数据库,因其简单易用、占用资源少等特点,在iOS开发中得到了广泛的...

    iphone开发,sqlite数据库案例

    为了学习更多关于SQLite3在iPhone开发中的应用,可以参考压缩包中的"SQLiteBooks"资源,可能包含教程、示例代码和其他有用的文档,帮助你深入理解和实践SQLite3的使用。记得在实际项目中,要始终确保数据安全,处理...

    Iphone中的SQLite 可运行的实例

    "Iphone Persistence SQLite"这个压缩包文件可能包含了实现上述功能的源代码,你可以通过阅读和运行这些代码来加深对SQLite在iOS应用中使用方法的理解。同时,这也是一个实践的好机会,你可以根据自己的需求修改和...

    FMDBdemo (使用FMDB 开发iphone SQLite)

    标题 "FMDBdemo (使用FMDB 开发iPhone SQLite)" 提及的是在iOS平台上使用FMDB库进行SQLite数据库开发的应用示例。FMDB是Objective-C的一个SQLite封装库,它为iOS开发者提供了一种简单而强大的方式来操作SQLite...

    iphone 开发 xcode 源代码 数据库 database sqlite3 的使用封装函数.

    本文将详细介绍如何在Xcode中使用SQLite3进行iPhone开发,并提供一个封装好的源代码示例。 首先,我们需要了解SQLite3的基本概念。SQLite3是一个关系型数据库管理系统,它的数据以表格的形式存储,表格之间可以通过...

    iphone数据库sqlite3的使用基础操作

    通过上述知识点的介绍,我们了解了 SQLite3 在 iPhone 数据库应用中的基本使用方法,包括如何打开和关闭数据库、执行 SQL 语句、准备和执行预编译语句以及如何获取查询结果等。这些基础知识对于在 iOS 平台上开发...

    ios SQLite语句整理大全

    首先是设置项目文件,在项目中添加iPhone版本的sqlite3的数据库的开发包,在项目下的Frameworks点击右键,然后选择libsqlite3.0.dylib文件。 2. 代码中的操作 那么接下来是代码了。 首先获取iPhone上的sqlite3的...

    最新的iphone sqlite小程序

    "最新的iPhone SQLite小程序"可能是一个示例项目或者教程,旨在帮助开发者了解如何在iOS平台上集成和使用SQLite。 在iOS开发中,SQLite通常通过Objective-C或Swift的API来操作。Foundation框架中的`NSFileManager`...

    iPhone开发之数据库使用

    本教程主要关注"iPhone开发之数据库使用",特别强调了使用SQLite3数据库。SQLite3是一个轻量级、开源的关系型数据库,它被广泛用于iOS应用程序,因为它不需要独立的服务器进程,可以直接嵌入到应用程序中。以下是...

    iphone SQLite3进行数据持久化实例

    本实例将聚焦于如何在iPhone应用中使用SQLite3进行数据持久化操作。 SQLite3是一个嵌入式的SQL数据库引擎,它不需要独立的服务进程,可以直接集成到应用程序中。与Core Data相比,SQLite3提供了更直接的SQL语句操作...

    iphone sqlite

    学习和理解如何在iPhone应用中使用SQLite是iOS开发中的基本技能,这有助于开发出功能丰富的、能够离线存储数据的应用。通过这样的练习,开发者可以更好地掌握数据库操作,提高应用的性能和用户体验。在实际项目中,...

    列车时刻查询-基于SQLite数据库-iPhone版

    本项目“列车时刻查询-基于SQLite数据库-iPhone版”是一个初学者友好的实践案例,旨在帮助那些刚接触iPhone开发的新手理解如何利用SQLite进行数据存储和检索。该项目是用Xcode 4.1构建的,虽然简单,但足以展示基本...

    iPhone3开发基础教程

    - **数据管理**:介绍了如何在应用中管理和存储数据,包括使用Core Data框架进行持久化存储,以及如何使用SQLite数据库。 #### 3. 高级特性 - **多线程与后台任务**:教授如何实现多线程编程,处理后台任务,如下载...

    pc6-SQLite Database Browser IPHONE

    由于其小巧、高效、无需服务器进程的特性,SQLite成为iPhone应用开发中常用的数据库解决方案。 在使用SQLite Database Browser时,首先需要了解SQLite的基本概念,如数据库(Database)、表(Table)、列(Column)...

    轻松学iPhone开发

    《轻松学iPhone开发》这本书是为想要进入iOS应用开发领域的初学者精心编写的。它旨在以轻松易懂的方式,引导读者逐步了解并掌握iPhone应用程序的开发技能。书中的内容主要分为三部分,每一部分都围绕着不同的学习...

    IOS 开发中用到的数据库SQLite管理软件 Base

    “Iphone开发”进一步强调了Base在iPhone应用程序开发中的应用。 关于“Base.app”,这是Mac OS中应用程序的标准打包格式,表示Base这个软件已经打包成了一个可执行的应用程序文件,用户可以直接双击运行,无需额外...

    深入浅出iPhone开发

    《深入浅出iPhone开发》是一本专为iPhone应用程序开发初学者编写的指南,旨在通过实际应用案例,系统地介绍iOS开发的各项技术。本书的核心目标是让读者能够从零基础逐步掌握开发iPhone应用所需的知识和技能。 在iOS...

Global site tag (gtag.js) - Google Analytics