Примите во внимание, что с вашим текущим подходом вставка 1 миллиона строк потребует выполнения 1 миллиона отдельных вставок туда и обратно в SQLite.Вместо этого вы можете попробовать использовать один из следующих двух подходов.Для более поздних версий SQLite:
INSERT INTO myTable (id, format, size)
VALUES
(%d, '%s', %d),
(%d, '%s', %d),
(%d, '%s', %d),
... (more rows)
Для более ранних версий SQLite вы можете использовать конструкцию INSERT INTO ... SELECT
:
INSERT INTO myTable (id, format, size)
SELECT %d, '%s', %d UNION ALL
SELECT %d, '%s', %d UNION ALL
... (more rows)
Основная идея здесь заключается в том, что вы можете попробовать просто одиночный вызов вставки для SQLite со всеми вашими данными вместо вставки по одной строке за раз.
Не C-человек, но вот как вы можете построить строку вставки изВаш код C:
const int MAX_BUF = 1000; // make this as large as is needed
char* sql_buffer = malloc(MAX_BUF * sizeof(char));
int length = 0;
length += snprintf(sql_buffer+length, MAX_BUF-length, "INSERT INTO myTable (id, format, size) VALUES");
for (int i=0; item=row[i]; i++) {
length += snprintf(sql_buffer+length, MAX_BUF-length, " (%d, '%s', %d)", item.id, item.format, item.size);
}
rc = sqlite3_exec(db, sql_buffer, NULL, NULL, NULL);