Соединитель c ++ / sql хранит Connection в объекте и использует его несколько раз - PullRequest
0 голосов
/ 24 января 2019

У меня несколько запросов к базе данных sql.Я создал объект для хранения информации о моем соединении

ConObj() {
    //create connection
    driver = get_driver_instance();
    con = driver->connect(server_adress,USER_ID,passphrase);
    con->setSchema(dbName);
    stmt = con->createStatement();
}

первый вызов

res = -> executeQuery(SQLQUERY);

работает нормально, а циклы в такой функции как

for(std::string elem: queries){
    res = -> executeQuery(SQLQUERY);
    doSomething(res);
}

работают нормальнотакже.Но когда я вызываю новую функцию, которая создает новую функцию с другим допустимым оператором sql (который работает, если я ее сначала вызываю), я получаю следующее исключение:

ConObj obj;
obj.makeFirstRequests();
doSomething();
obj.makeSecondRequest();

прекращение вызова после броскаэкземпляр 'sql :: SQLException'
what (): команды не синхронизированы;Вы не можете запустить эту команду сейчас

код работает также, когда я устанавливаю соединение в каждой функции с

con = driver->connect(server_adress,USER_ID,passphrase);
    con->setSchema(dbName);
    stmt = con->createStatement();

, но из-за соображений производительности и большей комфортности яхочу сделать, удержал соединение открытым и просто сделать новый запрос.Есть ли способ сделать это или я должен инициализировать его в каждой новой функции?И я не понимаю, почему я должен делать это в новой функции, но не в цикле.(может быть, между звонками слишком много времени?)

спасибо за ваше время.

...