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

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

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

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

24.11.2014, 14:37. Просмотров 177. Ответов 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, скомпилированная программа работает нормально.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2014, 14:37     Запрос к mysql выполняется через раз
Посмотрите здесь:

Цикл выполняется один раз - 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; ...

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

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

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

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

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

подключение к mysql через odbc на fedora - C++
Добрый день! Пытаюсь создать подключение к БД. Настроил odbc. При вызове соединения isql -v lcab-connector. Выдает: Connected! C c++...


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

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

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