Соединение QtSql
Я пытаюсь создать соединение с базой данных и вставить / удалить / сделать запросы к базе данных. Я относительно хорошо знаю SQL, но не могу обернуться вокруг него в Qt. Я привык программировать в Delphi.
Это мой код до сих пор:
QSqlDatabase db;
db.addDatabase("QSQLITE");
db.setHostName( "localhost" ); //I don't know if i should include this the database is in the same directory as my program
db.setDatabaseName( "Xmato.odb" );
db.setUserName( "" ); //There is no username
db.setPassword( "" ); //There is no password
db.open();
db.prepare("SELECT * FROM Members");
db.exec();
Я добавил это в мой файл.pro:
QT += sql;
Включенный QtSql в мой основной файл.
Когда я запускаю этот код, я получаю сообщение об ошибке:
QSqlQuery::prepare: database not open
Любые идеи будут мне высоко оценены.
PS: я использую C++ в Linux Ubuntu 12.04 и использовал LibreOffice Base для создания своей базы данных.
3 ответа
После небольшого количества попыток Google- внутренняя база данных openoffice libre использует HSQLDB (естественный выбор для Java). Вот небольшая дискуссия о HSQLDB.
Похоже, что некоторые версии базы openlibre также могут подключаться к внешним базам данных. Я бы порекомендовал установить что-то более доступное для C++, в частности Qt.
Только несколько драйверов, таких как ODBC и SQLite, включены по умолчанию.
Это означает, что в зависимости от используемой базы данных может потребоваться получить дополнительный исходный код (или пакеты) и скомпилировать плагин /dll/so. Библиотека загружается динамически (т.е. во время выполнения) модулем QtSql. Я столкнулся с этим для драйверов MySQL.
Когда вы получите все эти настройки, ваш вызов addDatabase должен соответствовать типу базы данных, которую вы используете.
QSqlDatabase::addDatabase( "QODBC" ); // For something like MSSQL
QSqlDatabase::addDatabase( "QSQLITE" ); // For SQLite
QSqlDatabase::addDatabase( "QMYSQL" ); // For MySQL
Лично, если вы просто делаете это для удовольствия, быстрой и простой базой данных является SQLITE. Вы даже можете загрузить плагины / расширения для Mozilla Firefox, которые предложат вам графический интерфейс для базы данных.
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName( "Xmato.odb" );
if (db.open())
{
QSqlQuery query(db); // if multiple connections used, without the `db` in constructor will cause the query to use the default database (first opened and available one)
query.exec("select * from members");
}
должен сделать то же самое. имя пользователя и пароль не нужны, и так как это файл, вам просто нужно использовать setDatabaseName
установить, какой файл вы хотите открыть.
Драйвер не загружен
вам нужен драйвер QSQLITE.
db.drivers () возвращает список всех доступных драйверов базы данных.
В Ubuntu 12.04 драйвер для sqlite находится в пакете с именем libqt4-sql-sqlite.
Но это odb
база данных sqlite??