Я пытаюсь создать соединение с базой данных и вставить / удалить / сделать запросы к базе данных. Я относительно хорошо знаю 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
Любые идеи будут мне высоко оценены.
П.С .: Я использую c ++ в Linux Ubuntu 12.04 и использую LibreOffice Base для создания своей базы данных.
После небольшого google-ing — внутренняя база данных 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, которые предложат вам графический интерфейс к базе данных.
Драйвер не загружен
вам нужен драйвер QSQLITE.
db.drivers () возвращает список всех доступных драйверов базы данных.
В Ubuntu 12.04 драйвер для sqlite находится в пакете с именем libqt4-SQL-SQLite.
Но это odb
база данных sqlite ??
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
установить, какой файл вы хотите открыть.