2013-06-06 3 views
0

Вот схема таблицы я работаю сКак я могу вставить много blobs с API sqlite3 C?

CREATE TABLE clauses(id INTEGER PRIMARY KEY, content BLOB) 

Я хочу, чтобы вставить огромное количество записей в этой таблице. Я думал о чем-то вроде

void insert_records(sqlite3* db) { 
    int clause[CLAUSE_SIZE]; 
    char sql[] = "INSERT INTO clauses(content) VALUES(?)"; 
    sqlite3_stmt* stmt = NULL; 

    if (sqlite3_prepare(db, sql, -1, &stmt, NULL) != SQLITE_OK) { 
     fprintf(stderr, "error in prepare : %s\n", sqlite3_errmsg(db)); 
     exit(1); 
    } 

    if (sqlite3_bind_blob(stmt, 1, clause, sizeof(clause), SQLITE_STATIC) != SQLITE_OK) { 
     fprintf(stderr, "error in bind : %s\n", sqlite3_errmsg(db)); 
     exit(1); 
    } 

    for (int i = 0 ; i < nb_clauses ; i++) { 
     gen_clause(clause); 

     if (sqlite3_step(stmt) != SQLITE_DONE) { 
      fprintf(stderr, "error in step : %s\n", sqlite3_errmsg(db)); 
      exit(1); 
     } 
    } 

    sqlite3_finalize(stmt); 
} 

, но это не работает: только первый элемент вставлен и, на второй итерации, программа завершается с «ошибкой в ​​шаге: неизвестная ошибка».

В чем проблема?

ответ

2

Прежде чем вы сможете повторно выполнить подготовленный оператор, вы должны позвонить sqlite3_reset.

+0

Это сработало. Благодаря ! – Fabien

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