首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSqlDatabase::open()总是返回true

QSqlDatabase::open()总是返回true
EN

Stack Overflow用户
提问于 2015-05-09 10:59:29
回答 2查看 1.5K关注 0票数 4

我正在尝试用连接到sql数据库。

不幸的是,db.open()总是返回true (您可以设置任何密码、主机名等),尽管没有建立连接(?)。这是从对数据库没有任何影响的查询中得出的。

我在Ubuntu 14.04上使用LAMPP。

我有以下代码:

代码语言:javascript
复制
#include "mainwindow.h"
#include "ui_mainwindow.h" 
#include <QApplication>
#include <QSql>
#include <QSqlDatabase>
#include <QMessageBox>
#include <QSqlQuery>


void MainWindow::on_ButtonSQL_clicked()
{

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "con1");
    db.setHostName("localhost");
    db.setDatabaseName("kinectshop2015");
    db.setUserName("root");
    db.setPassword("");

    QMessageBox msgBox;

    if (db.open()) {
        msgBox.setText("Yay! Your database host is "+db.hostName()+" .\n"+" The name of the database is "+db.databaseName()+".");
        msgBox.exec();
    }

    QSqlQuery query;
    query.exec("INSERT INTO users (id, username, balance, isAdmin)" "VALUES(3, 'somebody', 10000, 1)");
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-09 15:45:32

这就是解决我问题的办法。我使用的是驱动程序QMYSQL而不是QSQLITE。我只使用了后者,因为第一个不能装载。在Ubuntu & QT5上,只需输入sudo安装libqt5sql5-mysql即可解决问题。

票数 0
EN

Stack Overflow用户

发布于 2015-05-09 11:57:04

一个问题是,您正在指定一个connectionName。

QSqlDatabase QSqlDatabase::addDatabase(const QString & type, const QString & connectionName = QLatin1String( defaultConnection ))

如果未指定connectionName,则新连接将成为默认连接。

考虑到db连接不是默认连接,您需要告诉QSqlQuery要使用哪个db,即

代码语言:javascript
复制
  QSqlQuery query(db);
  query.exec("INSERT INTO users (id, username, balance, isAdmin)" "VALUES(3, 'somebody', 10000, 1)");

另一个‘问题’是,使用sqlite,您总是通过调用创建一个新的数据库,因此问题不是DB没有打开,而是它的内容不正确(因为如果指定一个不存在的文件名,它将是空的)。如果我取了你的代码

代码语言:javascript
复制
   qDebug() << query.lastError();

query.exec之后,它理所当然地抱怨

QSqlError(1,“无法执行语句”,“没有这样的表:用户”)

如果我在insert查询之前包含一条创建表的语句

代码语言:javascript
复制
QSqlQuery createTable("create table users ( id INTEGER, username TEXT, balance REAL, isAdmin INTEGER)",db);
createTable.exec();

我在新创建的db文件中正确地获得了表,并且它有您要插入的条目。

这个有用吗?

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

https://stackoverflow.com/questions/30139103

复制
相关文章

相似问题

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