0

我正在尝试创建与数据库的连接并对数据库进行插入/删除/查询。我对 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:我在 Linux Ubuntu 12.04 上使用 c++ 并使用 LibreOffice Base 创建我的数据库。

4

3 回答 3

2

经过一番 google-ing - openoffice libre 的内部数据库正在使用HSQLDB(Java 的自然选择)。 这是一个关于 HSQLDB 的小讨论

似乎某些版本的 openlibre base 也能够连接到外部数据库。 我建议设置一些 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 的插件/扩展,它们将为您提供数据库的 GUI。

于 2013-06-21T16:14:37.057 回答
0

未加载驱动程序

您需要 QSQLITE 驱动程序。

db.drivers() 返回所有可用数据库驱动程序的列表。

在 Ubuntu 12.04 中,sqlite 的驱动程序位于名为libqt4-sql-sqlite的包中。

但是:是odb一个sqlite数据库吗?

于 2013-06-21T15:12:18.700 回答
0
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来设置你要打开的文件。

于 2013-06-21T21:11:00.307 回答