刘庆
摘 要:移动互联网的发展成为当下越来越热门的话题,各类移动APP应用随着中国经济飞速发展而快速增长。移动APP应用离不开数据的存储,在IOS开发中,数据存储可以使用文件或数据库的方式。而一般的归档、plist文件、偏好设置都是存储为文件。本文主要论述了在IOS平台下,基于XCODE集成开发环境,Objective-c编程语言中,IOS应用开发中本地和远程数据库访问的方式和步骤,详细描述了SQLite关系关系型数据库的连接、数据读取操作的方法和功能函数的调用实现。同时以项目的登陆功能为例,通过对接口文件的使用,实现对于远程服务器数据库的访问与连接。
关键词:IOS 数据访问 APP
中图分类号:TP311 文献标识码:A 文章编号:1674-098X(2020)06(c)-0116-02
1 引言
当我们在做PC端的应用开发的时候,常见的数据库连接方式有:DAO、ADO、ODBC、JDBC等。通过服务器端的数据支持提供前端的数据应用,可以根据数据访问量的大小调整在线访问或是离线访问,可以设置访问的并发性等。但是移动设备硬件资源有限,移动APP通常会在设备本地存储一些数据,这可以为程序执行更良好的性能或离线访问提供支持。在iOS上,移动APP可以将信息输出或存储到Plist文件、SQLite数据库文件中。
属性列表(Plist,Property List)是一种结构化的二进制格式文件,包含了内嵌键值对的可执行bundle的基本配置信息。Plist文件主要用于存储App的用户设置及配置信息,例如,游戏类App经常会在Plist文件中存储游戏等级和分数信息。一般来说,App会将存储用户数据的Plist文件保存在“[App home目录]/documents/”目录下。Plist文件可以是XML格式或二进制格式。
SQLite是一种自包含、可嵌入、0配置的SQL数据库引擎的跨平台C库文件。它的表、触发器和视图整个数据库都包含在一个硬盘文件中。SQLite数据库提供了所有标准的SQL结构,包括select、insert、update和delete。APP一般会将其保存在“[App home目录]/documents/”目录下。由于SQLite的轻便、稳定和小巧,它已成为一个在iOS设备上存储数据的优秀解决方案。
下面我们将详细论述,在IOS中移动APP如何实现本地数据和远程数据的访问。
2 本地数据库的访问
在一些小程序中,需要保存程序运行中的数据,为了方便处理,在ios中一般会将数据库捆绑在程序中,我们称之为本地数据库访问。
为了更好的描述本地访问数据库的方式,我们以SQLite提供本地数据库为例,SQLite是一個小型的关系型数据库。当我们在本机创建好了数据库,并把数据库的文件保存为db_file.sqlite3。这时我们将在ios中实现对数据的读写存储,首先需要先在Xcode中将libsqlite3.dylib库文件添加到项目中,然后再将已创建好的db_file.sqlite3数据库文件引入到项目中。
不管是哪种平台,对数据库中的数据进行操作的方法思路都相似,具体方法步骤如下。
2.1 连接并打开数据库
在访问SQLite数据库文件,需要SQLite库中相应的方法支持,要添加导入语句:#import “sqlite3.h”
定义一个变量database变量,用来存放数据库连接。
@property(nonatomic) sqlite3 *database;
定义方法sqliteDBFilePath,获取数据库文件的路径。
- (NSString *) sqliteDBFilePath
{
return[[[NSBundle mainBundle]esourcePath]
stringByAppendingPathComponent :@" db_file.sqlite3"];
}
定义方法initDatabaseConnection,初始化数据库连接,打开连接,并返回数据库连接,存放在database中。
- (void) initDatabaseConnection
{
if (sqlite3_open([[self sqliteDBFilePath] UTF8String], &database) != SQLITE_OK)
{
sqlite3_close(database);
NSAssert1(0, @"Failed to open database with message '%s'.", sqlite3_errmsg(database));
}
}
2.2 读取操作数据
对数据表的数据进行读写,首先定义sql语句,例如从表中读取出所有的数据,可以定以定义字符串,然后将该sql语句编译为sqlite内部的一个结构体。
const char *sql = "SELECT * FROM tb_table1 ";
sqlite3_prepare_v2(kBookDatabase, sql, -1, &fetchBookIndexesStatement, NULL);
调用sqlite3_step方法执行sql语句,将结果进行相应的处理。
sqlite3_step(fetchBookIndexesStatement)
2.3 关闭数据库
当数据库访问结束后,及时的关闭数据库,释放数据库占用过的资源。
- (void) closeDatabase
{
if (sqlite3_close(database) != SQLITE_OK)
{
NSAssert1(0, @"Error: failed to close database with message '%s'.", sqlite3_errmsg(database));
}
}
3 远程数据库服务器的访问
本地数据库的访问仅供用户本机上的数据保存与访问,现在我们更多的是访问网络数据库实现数据的共享。一般来讲,我们的项目包含前台和后台部分。后台是数据库服务器,前台则是我们用户程序。我们通过前台的应用程序访问后台数据,实现用户交互、数据的共享。用户程序是如何访问远程服务器中的数据?
3.1 远程数据库服务器的接口信息
首先需知道服务器的网络地址,在此假定服务器地址为:server:http://182.114.11.2,我们以用户登录功能为例。从系统的数据库开发文档中,获取有关登陆功能需要访问的数据表接口文件。
接口文件详细列明了服务器访问的地址,访问时需要给出的参数,访问后的结果。
3.2 连接服务器
根据接口中的类型post定义一个方法,在项目开发中,定义文件都是分类存储,对于接口数据库的类,我们单独定义了一个RequestAPI类,其中的方法主要是用来访问和连接服务器。
+ (void)postURL:(NSString *)request withParameters:(NSDictionary *)parameter success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure {
NSString *server ="http://182.114.11.2";
NSString *url = [NSString stringWithFormat:@"%@%@", server, request];
NSString *decodedURL = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
[[AppAPIClient sharedJSONClient] POST:decodedURL parameters:parameter progress:nil success:^(NSURLSessionDataTask *operation, id responseObject) {
success(responseObject);
} failure: ^(NSURLSessionDataTask *operation, NSError *error) {
failure(error);
}];
}
3.3 數据访问结果
首先定义功能接口url。
NSString *request = @"/login";
其次定义接口中的入参。其中调用的[Utilities uniqueVendor]是用来获取手机的设备号。
NSDictionary *parameters = @{@"deviceId" : [Utilities uniqueVendor], @"deviceType" : @7001, @"userName" : _usernameTF.text, @"password" : encodedPwd};
调用RequestAPI类中的postURL方法连接数据库
[RequestAPI postURL:request withParameters:parameters success:^(id responseObject) {
//判断连接访问数据库后的结果。根据接口文件中列明的成功返回值为8001
if ([responseObject[@"resultFlag"] integerValue] == 8001) {
……
}
4 结语
在IOS中常见的数据存储形式有plist格式文件存储、沙盒存储、文件存储、数据库存储,在本文中,主要描述数据库存储中的本地和远程访问方式,对两者在数据库连接、数据读写操作等方法和函数的调用,功能的实现进行了描述。
参考文献
[1] 崔璨,王朋娇,段婷婷.基于iOS系统的MOOC学习APP优化策略研究[J].软件导刊,2017,16(9):10-13,18.
[2] 赵双久.数据库访问技术在VB编程开发中的应用[J].电脑知识与技术,2019,15(31):11-12.
[3] 段世娟.数据库访问技术在VB编程开发中的应用[J].电子技术与软件工程,2019(15):120-121.
[4] 李清平,孟祥芳,宋国顺.基于iOS系统的天气App程序开发与应用[J].软件工程,2017,20(11):41-43.
[5] 邱博. 面向iOS平台的多数据库访问模式研究[D]. 2014.
[6] 陈旭. 软件开发中数据库设计理论及设计方式研究[J]. 信息与电脑, 2016, 361(15):148-149.