Я хотел бы написать с несколькими процессами в базе данных SQLite. Вот мой код на C ++:
stringstream sstream << "BEGIN;" << query << "COMMIT;";
sqlite3_busy_timeout(databasePtr, 60000); // set timeout if sql busy
if((result = sqlite3_exec(databasePtr, (sstream.str()).c_str(), NULL, NULL, NULL)) != SQLITE_OK){
/** ERROR or SQLITE_BUSY **/
}
sqlite3_busy_timeout(databasePtr, 0); // reset sql_busy handler
Я думал, что sqlite3_busy_timeout приводит к успеху. Но я проверил результаты и обнаружил, что не все данные записываются в базу данных. Где моя ошибка?
Кто-нибудь знает, как часто вызывается sqlite3_exec, когда для sqlite3_busy_timeout установлено значение 60000 (мс)? Или после 60000 (мс) будет только один вызов, если первая попытка вернется с SQLITE_BUSY?
Я пытался исправить проблему с помощью следующего кода. Но похоже, что все время существует только один активный процесс. Другие процессы не будут завершены ...
do{
if((result = sqlite3_exec(databasePtr, (sstream.str()).c_str(), NULL, NULL, NULL)) != SQLITE_OK){
if(result == SQLITE_BUSY){
sleep(60000); // sleep 10 sec
}else{
/** ERROR **/
}
}
}while(result == SQLITE_BUSY);