2013-04-24 2 views
0

Я создаю приложение iOS, в котором используется Sqlite DB. Я создал Table как:Как восстановить NSdata в NSdictionary из Sqlite в iOS

const char *sql_stmt = "CREATE TABLE IF NOT EXISTS ORDERTABLE (ID INTEGER PRIMARY KEY AUTOINCREMENT, ITEMDESC TEXT)"; 

, а затем я должен вставить self.selectedItemsDictnory словарь в ItemDESC я вставив как:

NSData *data = [NSJSONSerialization dataWithJSONObject:self.selectedItemsDictnory options:NSJSONWritingPrettyPrinted error:nil]; 
     NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO ORDERTABLE(ITEMDESC)VALUES(\"%@\");",data]; 

Upto этого успешно сделано.

Теперь я должен получить этот словарь в таком же формате

то, что я делаю это:

if (sqlite3_open(dbpath, &orderDB) == SQLITE_OK) 
    {    
     const char* sqlStatement = [[NSString stringWithFormat:@"SELECT * FROM ORDERTABLE WHERE (ID = '%d')",self.orderSelected]cStringUsingEncoding:NSUTF8StringEncoding]; 
     sqlite3_stmt* statement; 

      if (sqlite3_prepare_v2(orderDB, sqlStatement, -1, &statement, NULL) == SQLITE_OK) { 


       if(sqlite3_step(statement) == SQLITE_ROW) 
       { 

       NSData *retData = (__bridge NSData*) sqlite3_column_value(statement, 1); 
       NSDictionary *jsonObject=[NSJSONSerialization 
               JSONObjectWithData:retData 
               options:NSJSONReadingMutableLeaves 
               error:nil]; 
        NSLog(@"jsonObject is %@",jsonObject); 
        NSDictionary *dic = [NSDictionary dictionaryWithContentsOfData:retData]; 
        NSLog(@"dic is %@",dic); 

       } 
      } 

      sqlite3_finalize(statement); 
      sqlite3_close(orderDB); 
     } 

Но я получаю Bad Избыточный исключение. Пожалуйста, помогите мне в поиске данных

+0

Можете ли вы указать точную строку, где вы получаете исключение? –

+0

привет, я получаю исключение при NSDictionary * JSONObject = [NSJSONSerialization JSONObjectWithData: retData опции: NSJSONReadingMutableLeaves ошибка: ноль]; – Sulabh

+0

is retData - это нуль? – karthik

ответ

1

Возможно ли, что вы можете вставить JSON здесь. Тип возврата NSJSONSerialization может быть словарем или массивом, это зависит от объекта root json.

вместо

NSDictionary *jsonObject=[NSJSONSerialization 
              JSONObjectWithData:retData 
              options:NSJSONReadingMutableLeaves 
              error:nil]; 

Попробуйте

NSArray *jsonObject=[NSJSONSerialization 
              JSONObjectWithData:retData 
              options:NSJSONReadingMutableLeaves 
              error:nil]; 

а также его хорошую привычку использовать параметр ошибки для регистрации каких-либо исключений, так что вы можете использовать

NSError *logError = nil; 
NSArray *jsonObject=[NSJSONSerialization 
              JSONObjectWithData:retData 
              options:NSJSONReadingMutableLeaves 
              error:&error]; 
+0

на самом деле в моем выбранном словаре пункт есть пара ключ/значение как { Макаронные = 220; «блинчики» = 125; } это официант сдерживания App , в котором при принятии заказа я экономлю предметы по цене в словаре, а затем вставляя таблицу sqlite order с nsdata – Sulabh

+0

Я думаю, вы должен пройти этот учебник, надеясь, что это поможет http: //www.raywenderlich.ком/5492/рабочий-с JSON в КСН-5 –

0

Попробуйте ниже коды извлечение данных из sqlite

if (sqlite3_prepare_v2(_database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) 
{ 
    while (sqlite3_step(statement) == SQLITE_ROW) { 
     int uniqueId = sqlite3_column_int(statement, 0); 
     char * temp = (char *) sqlite3_column_text(statement, 1); 
     NSString *item_desc = [[NSString alloc] initWithUTF8String:temp];         
    } 
    sqlite3_finalize(statement); 
} 
+0

привет Karthik я получил в результате item_desc , как ро item_desc $ 1 = 0x0715c6f0 <7b0a2020 224d4f4d 4f277322 203a2022 31323522 2c0a2020 22537072 696e6720 526f6c6c 7322203a 20223132 35220a7d> так как я могу преобразовать это в мой словарь? – Sulabh

+0

Поскольку вам нужно вставить nsdata в столбец ITEMDESC, объявите тип ITEMDESC как BLOB, обратитесь к http://stackoverflow.com/questions/4724118/retrieve-nsdata-from-sqlite-stored-in-blob-data-type. -for-iphone-app, http: //stackoverflow.com/questions/4215505/sqlite3-insert-and-read-blob-data-in-database – karthik

+0

привет Картик, я объявляю тип данных ITEM_DESC как blob, сейчас как преобразовать строку item_desc в nsditionary снова – Sulabh

Смежные вопросы