QtSql connection

QtSql connection

本文关键字:connection QtSql      更新时间:2023-10-16

我正在尝试创建到数据库的连接,并插入/删除/查询数据库。我对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

任何想法我都将不胜感激。

附言:我在Linux Ubuntu 12.04上使用c++,并使用LibreOfficeBase创建我的数据库。

经过一番谷歌搜索后,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的插件/扩展,为您提供数据库的GUI。

驱动程序未加载

您需要QSQLITE驱动程序。

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

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

但是: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来设置要打开的文件。