劉慶

摘? ?要:移動互聯網的發展成為當下越來越熱門的話題,各類移動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.