Я пытаюсь навалом написать массив словарей в SQLite db, используя SQLite Transaction для скорости, поскольку массив может стать довольно большим.Bulk NSArray write to SQLite
Код:
-(void)bulkCachetoSQLite:(NSArray *)dataToCache
{
//Logging Comment
NSLog(@"SQLiteClass - bulkCachetoSQLite");
sqlite3_stmt *statement;
const char *dbpath = [_filePath UTF8String];
char * sErrMsg = 0;
const char *tail = 0;
if(sqlite3_open(dbpath, &_DB) == SQLITE_OK){
char sSQL [BUFFER_SIZE] = "\0";
sprintf(sSQL, "INSERT INTO livedata (device,datatype,timestamp,rawdata)");
sqlite3_prepare_v2(_DB, sSQL, BUFFER_SIZE, &statement, &tail);
sqlite3_exec(_DB, "BEGIN TRANSACTION", NULL, NULL, &sErrMsg);
for (NSObject* data in dataToCache)
{
//NSLog(@"%@",data);
sqlite3_bind_text(statement, 1, [[data valueForKey:@"device"] UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 2, [[data valueForKey:@"type"] UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 3, [[data valueForKey:@"timestamp"] UTF8String], -1, SQLITE_TRANSIENT);
NSString *str = [[NSString alloc] initWithData:[data valueForKey:@"data"] encoding:NSUTF8StringEncoding];
sqlite3_bind_text(statement, 4, [str UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_step(statement);
sqlite3_clear_bindings(statement);
sqlite3_reset(statement);
}
sqlite3_exec(_DB, "END TRANSACTION", NULL, NULL, &sErrMsg);
NSLog(@"SQLiteClass - bulkCachetoSQLite - EorrorA is %s", sErrMsg);
}
else{
//db isn't open
}
NSLog(@"SQLiteClass - bulkCachetoSQLite - EorrorB is %s", sqlite3_errmsg(_DB));
sqlite3_finalize(statement);
sqlite3_close(_DB);
}
Все кажется окей ОШИБКИ вернуть Null, но ничего не записывается его к БД SQLite.
Структура таблицы дб:
CREATE TABLE `livedata` (
`ID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`device` TEXT,
`datatype` TEXT,
`timestamp` TEXT,
`rawdata` TEXT
);
Любые идеи?
Откуда вы знаете, нет ошибок, если вы не проверяете? Что такое код возврата из 'sqlite_step'? –
А что такое 'ERRORS'? Я не вижу этого в вашем коде. –
Вопросы поиска справки по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, * конкретную проблему или ошибку * и кратчайший код, необходимый для воспроизведения в самом вопросе. –