crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Работа с SQLite
DAVID
  опции профиля:
сообщение 3.4.2014, 9:33
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 9.3.2014
Пользователь №: 4075

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте!
Функция подключения к БД у меня выглядит следующим образом:
static bool createConnection ()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("SQLITE");
    if (!db.open()) return false;
    ....
    ....
}

Вопрос такой: если в программе потребуется задать новое имя для БД (QSqlDatabase::setDatabaseName())
правильно ли использовать следующий код:
static bool createConnection ()
{
    db.close();
    db.setDatabaseName("SQLITE_2");
    if (!db.open()) return false;
    ....
    ....
}

А можно ли написать так:
static bool createConnection ()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("SQLITE");
    db.setDatabaseName("SQLITE_2");
    db.setDatabaseName("SQLITE_3");
    if (!db.open()) return false;
    ....
    ....
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 3.4.2014, 10:24
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Непонятно, что предполагалось в 3-м примере. Переписывание имени базы в классе три раза не имеет никакого смысла.

Ещё есть особенность SQLite c открытием базы. В самом SQLIte в некоторых функциях открытия если базы не существует, SQLite её просто создаст. А есть и функция с явными флагами. Тут я флагов не вижу, поэтому подозреваю, что база будет просто создана. Это лучше проверить на практике.

Сообщение отредактировал Iron Bug - 3.4.2014, 10:24
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DAVID
  опции профиля:
сообщение 3.4.2014, 10:38
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 9.3.2014
Пользователь №: 4075

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 3.4.2014, 11:24) *
Непонятно, что предполагалось в 3-м примере

Каждая БД имеет свои таблицы



Цитата(Iron Bug @ 3.4.2014, 11:24) *
подозреваю, что база будет просто создана

Так и должно быть, вопрос в том правильно ли написан код
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 3.4.2014, 12:33
Сообщение #4


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


в приведённом примере будет открыта последняя указанная база. зачем этот перебор имён - непонятно.
при открытии несуществующей базы она пуста. ну, может, Qt создаёт таблицы и т.д. в своих классах, нo сам SQLite их не создаёт.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DAVID
  опции профиля:
сообщение 3.4.2014, 13:13
Сообщение #5


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 9.3.2014
Пользователь №: 4075

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 3.4.2014, 13:33) *
зачем этот перебор имён - непонятно.

а мне не понятно как правильно открыть все три базы одновременно. Если есть предложения то пожалуйста. Уже посоветовали делать что то типо этого:
static bool createConnection ()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("one");
    if (!db.open()) return false;

    QSqlDatabase db2 = QSqlDatabase::addDatabase("QSQLITE");
    db2.setDatabaseName("two");
    if (!db2.open()) return false;

    QSqlDatabase db3 = QSqlDatabase::addDatabase("QSQLITE");
    db3.setDatabaseName("three");
    if (!db3.open()) return false;
    ....
    ....
}

Может у кого то еще идеи...

Цитата(Iron Bug @ 3.4.2014, 13:33) *
при открытии несуществующей базы она пуста

В отношении этого проблем нет. При открытии несуществующей БД она автоматически создается, это понятно

Вопрос в том как это правильно сделать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 3.4.2014, 16:44
Сообщение #6


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(DAVID @ 3.4.2014, 16:13) *
Уже посоветовали делать что то типо этого

И правильно посоветовали. В чём проблема? На один хэндлер открывается одна база. И других вариантов тут нет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 17:04