Форум программистов, компьютерный форум CyberForum.ru

Запрос к mysql выполняется через раз - C++

Восстановить пароль Регистрация
 
Kapitan79
3 / 3 / 0
Регистрация: 13.10.2013
Сообщений: 145
24.11.2014, 14:37     Запрос к mysql выполняется через раз #1
Всем привет.

Вновь вынужден обратиться за помощью.

Я написал класс, выполняющий запрос к mysql и записывающий результат в вектор.
Но возник странный глюк - строка "res = stmt->executeQuery(query);" выполняется случайным образом. Иногда подряд несколько раз, иногда несколько раз не выполняется и результатов запроса я не вижу.
Бывает что результат запроса содержит только часть строк из базы данных.
В чём может быть дело?

Код ниже.

main

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "query_class.h"
 
using namespace std;
 
int main(void)
{
    query_class q;
    q.dicts.push_back("dict_rule");
    q.fields.push_back("id_rule") ;
    q.fields.push_back("description") ;
    q.fields.push_back("rule_text") ;
    string r = q.select();
    //cout << "Первый элемент массива " << q.result[0][1]<<endl;
    return 0;
}
query_class.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/* 
 * File:   query_class.h
 * Author: fedoseev
 *
 * Created on 22 Ноябрь 2014 г., 18:11
 */
 
#ifndef QUERY_CLASS_H
#define QUERY_CLASS_H
 
#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#include <mysql/mysql_connection.h>
#include <mysql/cppconn/driver.h>
#include <mysql/cppconn/exception.h>
#include <mysql/cppconn/resultset.h>
#include <mysql/cppconn/statement.h>
#include <string>
#include <vector>
 
using namespace std;
 
class query_class {
    
public:
    query_class();
    
    std::vector<std::string> dicts;
    std::vector<std::string> fields;
    string select()                    ;
    std::vector<std::vector<std::string> >  result;
private:
    
 
    
};
query_class.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* 
 * File:   query_class.cpp
 * Author: fedoseev
 * 
 * Created on 22 Ноябрь 2014 г., 18:11
 */
 
#include "query_class.h"
 
using namespace std;
 
query_class::query_class() 
{
    
}
 
string query_class::select()
{    
 
    sql::Driver     *driver ;
    sql::Connection *con    ;
    sql::Statement  *stmt   ;
    sql::ResultSet  *res    ;
    //query_class     q       ;
    string          field = ""  ;
    string          dict  = ""  ;
    string          select= "select ";
    string          from  = " from ";
    string          query ;      
    /* Создание соединения */
    driver = get_driver_instance();
    con = driver->connect("tcp://mysql_server:3306", "user", "pass");
    
    /* Подключение к базе данных mysql */
    con->setSchema("scada");
    
    /* Создание строки со списком полей для запроса */
    int num_field = sizeof(fields)/sizeof(string);
    //int num_field = q.fields.size();
    
    for (int i=0; i<num_field; i++)
    {
        if (field == "") {field = dicts[0]+"."+fields[i];}
        else if (field != "") {field += ", "+dicts[0]+"."+fields[i];}  
    }
    
    query = select + field + from + dicts[0];
    cout << "Запрос составлен" << endl;
    stmt = con->createStatement();
    cout << "Statement создан" << endl;
    res = stmt->executeQuery(query);    
    cout << "Запрос выполнен" << endl;
    int j = 0;
    while (res->next())
    {
        result.resize(j+1);
        cout << "Длина массива " << j << endl;
        result[j].resize(num_field);
        for (int i=0; i<num_field; i++)
            {
              cout << "Строка " << j << " Столбец " << i << endl;
              result[j][i] = res->getString(fields[i]);
            }
        j++;
    } 
    cout << result [45][1] << endl;
    delete res;
    delete stmt;
    delete con;
 
 
 
return "figa";
}
Добавлено через 2 часа 40 минут
Вопрос снимается.
Глюк проявляется только внутри IDE, скомпилированная программа работает нормально.

Добавлено через 28 секунд
Вопрос снимается.
Глюк проявляется только внутри IDE, скомпилированная программа работает нормально.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2014, 14:37     Запрос к mysql выполняется через раз
Посмотрите здесь:

C++ Замена значения в матрице. Работает через раз.
C++ cin.getline работает через раз
C++ Цикл выполняется только один раз.
C++ Цикл выполняется один раз
C++ Код не выполняется в одном месте, но выполняется в другом
C++ Определить, сколько раз разделится амёба через n часов
C++ Ошибка в коде(программа с вектором выполняется только если вызвать её второй раз)
Змейка, чтобы при поедании росла через раз C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 03:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru