首页
学习
活动
专区
圈层
工具
发布

QtSql连接
EN

Stack Overflow用户
提问于 2013-06-21 21:09:17
回答 3查看 1.4K关注 0票数 0

我正在尝试创建到数据库的连接,并对数据库进行插入/删除/查询。我对SQL比较了解,但我似乎不能用Qt理解它。我以前用Delphi编程。

这是我到目前为止的代码:

代码语言:javascript
复制
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文件中:

代码语言:javascript
复制
QT += sql;

我的主文件的一个包含的QtSql。

当我运行这段代码时,我得到了错误:

代码语言:javascript
复制
QSqlQuery::prepare: database not open

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

附注:我在Linux Ubuntu12.04上使用c++,并使用LibreOffice Base创建我的数据库。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-22 00:14:37

在google-ing - openoffice之后,libre的内部数据库使用的是Java(的自然选择)。Here's a small discussion about HSQLDB

似乎openlibre base的一些版本也能够连接到external databases.,我建议设置一些对C++更容易访问的东西,特别是Qt。

Only a few drivers like ODBC & SQLite is included by default.

这意味着根据所使用的数据库,可能需要获取额外的源代码(或包)并编译一个插件/dll/so。该库由QtSql模块动态加载(即运行时)。我在mysql drivers上遇到过这样的情况。

完成所有设置后,对addDatabase的调用应该与您正在使用的数据库类型相匹配。

代码语言:javascript
复制
QSqlDatabase::addDatabase( "QODBC" );  // For something like MSSQL
QSqlDatabase::addDatabase( "QSQLITE" );  // For SQLite
QSqlDatabase::addDatabase( "QMYSQL" );  // For MySQL

就我个人而言,如果您这样做只是为了好玩,那么SQLITE是一个快速而简单的数据库。You can even download plugins/extensions for Mozilla Firefox that will offer you a GUI to the database.

票数 2
EN

Stack Overflow用户

发布于 2013-06-21 23:12:19

未加载

驱动程序

您需要QSQLITE驱动程序。

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2013-06-22 05:11:00

代码语言:javascript
复制
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来设置你想要打开的文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17236072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档