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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kapitan79
3 / 3 / 0
Регистрация: 13.10.2013
Сообщений: 157
#1

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

24.11.2014, 14:37. Просмотров 182. Ответов 0
Метки нет (Все метки)

Всем привет.

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

Я написал класс, выполняющий запрос к 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, скомпилированная программа работает нормально.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2014, 14:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запрос к mysql выполняется через раз (C++):

Цикл выполняется один раз - C++
Здравствуйте! Помогите, пожалуйста с задачей. Пусть а=а=1. а = а + а/2к-1 где к=2,3...Посчитать произведение а0*а1*…*а пока |ак|&lt;...

Цикл выполняется только один раз. - C++
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; using namespace std; struct kvartira { int kolichestvo; int etazh; float...

Ошибка в коде(программа с вектором выполняется только если вызвать её второй раз) - C++
Сабж: void vInit() { vInputing(); // Ввод вектора vector_Size = names.size(); cout &lt;&lt; &quot;Ваш вектор names: &quot;...

Код не выполняется в одном месте, но выполняется в другом - C++
Вот код процедуры: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; ...

Морской бой работает через раз - C++
Пишу консольный морской бой на с++ и столкнулся с проблемой на стадии расстановки кораблей. Программа строит корабли через раз, как...

cin.getline работает через раз - C++
вот этот код работает прекрасно #include &lt;iostream&gt; using namespace std; void Open_Directory() { char *directory= new char; ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2014, 14:37
Привет! Вот еще темы с ответами:

Замена значения в матрице. Работает через раз. - C++
Задание: Составить программу на языке С++.В матрице размерности 10 на 6 найти номер первого из столбцов, не содержащих ни одного из...

Через сколько лет первоначальная сумма увеличится в N раз - C++
Составить алгоритм по условию: Сумма S рублей положена в сбербанк, при этом ежегодный прирост составляет P% и считается непрерывно....

Определить, сколько раз разделится амёба через n часов - C++
Одноклеточная амёба каждые 1,5 часа делится на 2 клетки. Определить, сколько раз разделится амёба через n часов. При этом выводить на экран...

Змейка, чтобы при поедании росла через раз - C++
Всем привет, подскажите как сделать, чтобы при поедании фрукта змейка росла через раз. вот часть кода как сейчас, ест и растет void...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru