我正在將一個NSMutableDictionary存儲到一個sqlite數據庫中。我成功地存儲了它。我的問題是檢索它。我想檢索NSMutableDictionary作爲一個整體,並將其分配給另一個NSMutableDictionary,以便我可以開始使用它。從iOS中的Sqlite中檢索字典
以下代碼允許我檢索文本數據類型並將其分配給addressField,但我無法弄清楚如何從數據庫中檢索帶有數據類型blob的NSMutableDictionary。
while (sqlite3_step(statement) == SQLITE_ROW){
NSString *addressField = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];
}
林不知道如何開始的NSMutableDictionary這樣我就可以使用sqlite3_column_blob 功能就可以了。
這是我的保存到數據庫代碼。
//This is the nsdictionary that Im going to save in the database
NSMutableDictionary *thisTicket = [[NSMutableDictionary alloc]init];
[thisTicket setValue:globalData.vehicleYear forKey:@"vehicleYear"];
[thisTicket setValue:globalData.vehicleMake forKey:@"vehicleMake"];
[thisTicket setValue:globalData.vehicleModel forKey:@"vehicleModel"];
[thisTicket setValue:globalData.ticket forKey:@"ticketNumber"];
//open database and save
sqlite3_stmt *statement;
const char *dbpath = [_databasePath UTF8String];
if (sqlite3_open(dbpath, &_ticketDB) == SQLITE_OK)
{
NSString *insertSQL = [NSString stringWithFormat:
@"INSERT INTO TICKETS (user, ticketnum, ticketinfo) VALUES (\"%@\", \"%@\", \"%@\")",
[[PFUser currentUser]objectId], globalData.ticket, thisTicket];
const char *insert_stmt = [insertSQL UTF8String];
sqlite3_prepare_v2(_ticketDB, insert_stmt,
-1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE)
{
NSLog(@"Added");
} else {
NSLog(@"Failed to add contact");
}
sqlite3_finalize(statement);
sqlite3_close(_ticketDB);
}
我保存後,這裏是我的數據庫看起來像(我使用SqliteManager來查看數據庫)。 Ticketinfo是具有我的NSMutableDictionary(在上面的代碼中命名爲thisTicket)的列。
我還沒有足夠的知名度,可以添加照片。我已經賺了一些,然後添加它
這是我的代碼來檢索NSDictionary。
NSString *docsDir;
NSArray *dirPaths;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = dirPaths[0];
_databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent:@"tickets.db"]];
NSFileManager *filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath: _databasePath ] == NO)
{
}else{
const char *dbpath = [_databasePath UTF8String];
sqlite3_stmt *statement;
if (sqlite3_open(dbpath, &_ticketDB) == SQLITE_OK)
{
NSString *querySQL = [NSString stringWithFormat:@"SELECT ticketinfo FROM tickets WHERE user=\"%@\"",
[[PFUser currentUser] objectId]];
const char *query_stmt = [querySQL UTF8String];
if (sqlite3_prepare_v2(_ticketDB,
query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSUInteger blobLength = sqlite3_column_bytes(statement, 5);
NSData *data = [NSData dataWithBytes:sqlite3_column_blob(statement, 5) length:blobLength];
NSDictionary *dict=[NSJSONSerialization
JSONObjectWithData: data
options:NSJSONReadingMutableLeaves
error:nil];
NSLog(@"%@",dict);
}
sqlite3_finalize(statement);
}
sqlite3_close(_ticketDB);
}
}
Im NS記錄字典作爲它循環通過行,所以我可以看到它,但它顯示爲空。
由於V-復刻。在沒有得到任何錯誤,但是當我NSLog字典查看它後面什麼,它的空。代碼中的8代表什麼意思? – adrian1kat
我編輯了我的問題。基本上第二個參數應該是你的列號。試試吧。 –
當我NSLog字典時仍然收到空。我會發布完整的保存代碼,保存後數據庫的外觀圖片,以及我的檢索代碼。我用這段代碼編輯我原來的問題。 – adrian1kat