iOS 數據存儲

1、屬性列表

路徑:

NSArray * testPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *filePath = [paths objectAtIndex:0];
    NSString *fileName = [fileName stringByAppendingPathComponent:@"test.plist"];

寫:

NSArray *writtenList = [[NSArray alloc] init];
[writtenList writeToFile:fileName atomically:YES];

讀:

[writtenList writeToFile:fileName atomically:YES];
NSArray *readList = [[NSArray alloc] initWithContentsOfFile:fileName];


2、歸檔

讀:

NSData *data = [[NSMutableData alloc] initWithContentsOfFile:fileName];
     NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
     
     TestObj *tObj = [unarchiver decodeObjectForKey:@"testKey"];
     [unarchiver finishDecoding];

寫:

//overwrite
- (void)encodeWithCoder:(NSCoder *)aCoder {
}

-(id) initWithCoder:(NSCoder *)aDecoder { 
}

NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:tObj forKey:@"testKey"];
[archiver finishEncoding];
[data writeToFile:fileName atomically:YES];

3、數據庫sql

//數據庫操作
sqlite3 *database;
// const NSString * dbname = @"mydb"
int result;
//打開一個指定路徑的現有的數據庫,如果沒有則會新建一個db庫
result =  sqlite3_open([myFile UTF8String], &database);
if (result != SQLITE_OK) {
    sqlite3_close(database);
}
    
//創建一個db表
char *errorMsg;
NSString *sql_create_table = @"CREATE TABLE IF NOT EXISTS NONOTABLE 省略~~~~~~~~~~~~~";
int result1 ;
//sqlite_exec用了針對sqlite3運行任何不要返回數據的命令,它用於執行更新,插入和刪除。簡單來說,這個方法執行的都是一些無需返回數據(雖然我們可能獲取一個狀態值。)。
result1 = sqlite3_exec(database, [sql_create_table UTF8String], NULL, NULL, &errorMsg);
    
//檢索查詢操作
int result2 ;
sqlite3_stmt *statment;
NSString *sql_selected = @"查詢語句";
result2 = sqlite3_prepare_v2(database, [sql_selected UTF8String], -1, &statment, nil);
if(result2 == SQLITE_OK){
    //單步操作
    while (sqlite3_step(statment) == SQLITE_ROW) {
    int row = sqlite3_column_int(statment, 0);
    char * rpwData = sqlite3_column_text(statment, 1);  
    }
    sqlite3_finalize(statment);
}
    
//綁定變量,既就是插入操作的一種變種,比如我麼那上面提到sqlite_exec可以執行插入操作,插入內容直接是寫在sql字竄裏,但是考慮到字竄涉及到無效的符號以及會一些嚴重的注入漏洞(比如以前聽過的引號符號)。
NSString *sql_bind = @"insert into foo value(?,?)";
result2 = sqlite3_prepare_v2(database, [sql_selected UTF8String], -1, &statment, nil);
if(result2 == SQLITE_OK){
    sqlite3_bind_int(statment, 1, 235);
    sqlite3_bind_text(statment, 2, "test", -1, nil);
    sqlite3_finalize(statment);
}
if (sqlite3_step(statment) != SQLITE_DONE)
NSLog(@"error");
sqlite3_finalize(statment);

sqlite3_close(database);

4、coreData


發佈了19 篇原創文章 · 獲贊 6 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章