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

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

Войти
Регистрация
Восстановить пароль
 
madonzy
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 65
#1

Vector и Select SQLite - C++

25.05.2014, 00:21. Просмотров 405. Ответов 7
Метки нет (Все метки)

Здравствуйте.
Столкнулся с двумя проблемами и не знаю в чём дело.

Есть метод класса:
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
 std::vector< std::vector<char*> > preSelect() {
 
            try {
 
                sqlite3_stmt *stmt;
                const char *query = "SELECT id, title FROM films";
                
                if(sqlite3_prepare(_db, query, -1, &stmt, 0 ) == SQLITE_OK) {
 
                    int colQ = sqlite3_column_count(stmt);
                    int execCode = 0;
 
                    std::vector< std::vector<char*> > data(20, std::vector<char*>(colQ));
 
                    int i = 0;
                    while (true) {
                        
                        execCode = sqlite3_step(stmt);
                        
                        if(execCode == SQLITE_ROW)
                            for (int j = 0; j < colQ; j++)
                                data[i][j] = (char*)sqlite3_column_text(stmt, j);
                        else
                            if(execCode == SQLITE_DONE) return data;
                            else if(execCode == SQLITE_ERROR) throw new LogException("Can't select data.", __LINE__, __FILE__);
                                 else throw new LogException("Unknown error in select statement.", __LINE__, __FILE__);
                        ++i;
                    }
 
                }else throw new LogException("Can't prepare select query.", __LINE__, __FILE__);
 
            }catch(LogException* log) {
                log->write();
 
                std::vector< std::vector<char*> > EmptySet(0, std::vector<char*>(0));
                return EmptySet;
            }
                    
        }
Первая проблема:
Когда я пытаюсь в main вывести:
C++
1
cout << test->preSelect()[0][0];
то получаю вот что: "X%N" (последний символ всегда меняется)
Когда:
C++
1
cout << test->preSelect()[0][1];
то получаю : "X§j" (последний символ всегда меняется)
А когда пытаюсь печатать в цикле for (прямо внутри метода) содержимое data[i][j] то всё прекрасно печатается.
Но опять же таки, стоит напечатать вне цикла for cout << data[0][0] тоже выдает те кракозяблы.

Вторая проблема в что в деструкторе:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
~DB() {
            try {
                
                if(sqlite3Err) sqlite3_free(sqlite3Err);
                if(_isOpenDB)
                    if(sqlite3_close(_db) != SQLITE_OK)
                        throw new LogException("Can't close database.", __LINE__, __FILE__);
 
                if(!deleteInstance())
                    throw new LogException("Can't remove singleton variable.", __LINE__, __FILE__);
 
            }catch(LogException* log) {
                log->write();
            }
        }
при вызове метода preSelect возбуждается исключение что не может зарыть файл.
Помогите пожалуйста, уже вожусь с этим 3й час...
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2014, 00:21     Vector и Select SQLite
Посмотрите здесь:

Vector allocator SQLite - C++
Гуру, помогите новичку! Столкнулся с проблемой, и даже не понимаю в чем она... Надо: сделать список(вектор) для хранения ссылок...

Vector - C++
Помогите пожалуйста понять как обращатся к переменным членам класса через vector пример: #include&lt;iostream&gt; #include&lt;vector&gt; ...

Vector - C++
Помогите написать класс vector по типу шаблона vector

Vector - C++
Доброго времени суток!:) У меня возник такой вопрос, допустим, имеется следующий код: #include &lt;iostream&gt; #include &lt;vector&gt; using...

[B]Vector C++[/B] - C++
Только начал изучать вектор в C++, но возникла проблема в коде, хотя переписал прямо из учебника. Сама ошибка: &quot;vector: необъявленный...

vector - C++
Как я понял в С++ vector это замена динамическому массиву, как в Delphi ss : array of String; Только тут vector &lt;string&gt; ss; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max Dark
шКодер самоучка
1785 / 1586 / 577
Регистрация: 09.10.2013
Сообщений: 3,546
Записей в блоге: 6
Завершенные тесты: 2
25.05.2014, 02:06     Vector и Select SQLite #2
Вам скорее всего нужно копировать данные(вы копируете значение указателя), тк указатели становятся невалидными
А лучше, ИМХО, использовать std::string вместо char*
schdub
2940 / 1284 / 238
Регистрация: 19.01.2009
Сообщений: 3,360
Завершенные тесты: 1
25.05.2014, 02:11     Vector и Select SQLite #3
Цитата Сообщение от madonzy Посмотреть сообщение
Вторая проблема в что в деструкторе при вызове метода preSelect возбуждается исключение что не может зарыть файл.
Цитата Сообщение от madonzy Посмотреть сообщение
sqlite3_close(_db) != SQLITE_OK
в случае ошибки SQLITE API возвращает код ошибки, анализируя который, многие вопросы отпадут: могу предположить что она возвращает SQLITE_BUSY, потому что:

Цитата Сообщение от SQLite C Interface Closing A Database Connection
Applications must finalize all prepared statements and close all BLOB handles associated with the sqlite3 object prior to attempting to close the object. If sqlite3_close() is called on a database connection that still has outstanding prepared statements or BLOB handles, then it returns SQLITE_BUSY.
madonzy
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 65
25.05.2014, 02:27  [ТС]     Vector и Select SQLite #4
Цитата Сообщение от Cra3y Посмотреть сообщение
Вам скорее всего нужно копировать данные(вы копируете значение указателя), тк указатели становятся невалидными
А лучше, ИМХО, использовать std::string вместо char*
невероятно!! получилось!! спасибо Вам большое!!!! (а можно как-то без string)?? Может strcpy?
Цитата Сообщение от schdub Посмотреть сообщение
в случае ошибки SQLITE API возвращает код ошибки, анализируя который, многие вопросы отпадут: могу предположить что она возвращает SQLITE_BUSY, потому что:
как это проверить?
schdub
2940 / 1284 / 238
Регистрация: 19.01.2009
Сообщений: 3,360
Завершенные тесты: 1
25.05.2014, 02:36     Vector и Select SQLite #5
Цитата Сообщение от madonzy Посмотреть сообщение
как это проверить?
Вам нужно запомнить что вернула sqlite3_close(_db) и добавить к информации исключения для последующего анализа.
madonzy
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 65
25.05.2014, 02:37  [ТС]     Vector и Select SQLite #6
Цитата Сообщение от schdub Посмотреть сообщение
Вам нужно запомнить что вернула sqlite3_close(_db) и вернуть это с исключением.
ну я имею в виду как закрыть соединение что-бы исключение не возбуждалось?
schdub
2940 / 1284 / 238
Регистрация: 19.01.2009
Сообщений: 3,360
Завершенные тесты: 1
25.05.2014, 02:40     Vector и Select SQLite #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
вы вызываете sqlite3_finalize()?

http://www.sqlite.org/c3ref/stmt.html
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2014, 02:57     Vector и Select SQLite
Еще ссылки по теме:

vector - C++
vector &lt;int&gt; v; for (int i = 0; i &lt; 5; i++) { int temp; cin &gt;&gt; temp; v.push_back(temp); } можно как-нибудь по...

Vector - C++
Задача: удалит все 0 из вектора. Программа удаляет, но потом выкидывает ошибку... #include &lt;iostream&gt; #include &lt;vector&gt; #include...

Vector - C++
Помогите пожалуйста решить задачу при помощи STL. Дан вектор. Нужно найти максимальное количество подряд идущих нулей. без использования...

vector - C++
Объявляю двумерный массив следующим образом: vector&lt; vector &lt;int&gt; &gt; m_Mas; Как в таком случае нужно добавлять элементы и обращаться к...


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

Или воспользуйтесь поиском по форуму:
madonzy
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 65
25.05.2014, 02:57  [ТС]     Vector и Select SQLite #8
Цитата Сообщение от schdub Посмотреть сообщение
вы вызываете sqlite3_finalize()?
забыл) спасибо вам обоим огромное!!
Yandex
Объявления
25.05.2014, 02:57     Vector и Select SQLite
Ответ Создать тему
Опции темы

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