【发布时间】:2013-06-18 15:12:55
【问题描述】:
我正在尝试创建与数据库的连接并对数据库进行插入/删除/查询。我对 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
任何想法我都会非常感激。
P.S.:我在 Linux Ubuntu 12.04 上使用 c++,并使用 LibreOffice Base 创建我的数据库。
【问题讨论】:
-
prepare()通常在您调用存储过程并希望稍后传递参数时使用。如果您删除带有prepare()语句的行并将最后一条语句更改为:db.exec("SELECT * FROM Members");,您会得到什么? -
db.open()是否返回 true,如果不是,则表明有错误,错误描述是什么(db.lastError().text()返回)?对于Sqlite,可以省略setHostName、setUserName和setPassword,这些函数什么都不做。 -
@RobbieE 我确实在程序中使用了参数。我只是为这个问题简化了它
-
@alexisdm 它说“驱动程序未加载”。驱动程序是什么,我应该使用哪一个?
-
这看起来可能是某种 Microsoft Access 或 OpenOffice/LibreOffice 数据库,而不是 SQLite。在此处查看更多信息:hsqldb.org。据我所知,这个数据库后端只有一个Java接口。