簡體   English   中英

QSqlDatabase :: open()始終返回true

[英]QSqlDatabase::open() always returns true

我正在嘗試使用Qt-Framework連接到SQL數據庫。

不幸的是db.open()總是返回true(你可以設置任何密碼,主機名等等),盡管沒有建立連接(?)。 我從查詢中得出的結果對數據庫沒有任何影響。

我在Ubuntu 14.04上使用LAMPP。

我有以下代碼:

#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)");
}

一個問題是您正在指定connectionName。

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

如果未指定connectionName,則新連接將成為默認連接

鑒於您的數據庫連接不是默認連接,您需要告訴QSqlQuery使用哪個數據庫,即

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

另一個'問題'是,使用sqlite,你總是通過你正在進行的調用創建一個新的數據庫,因此問題不是數據庫沒有打開,而是它的內容不正確(因為如果你指定一個數據庫,它將是空的不存在的文件名)。 如果我拿你的代碼並添加

   qDebug() << query.lastError();

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

QSqlError(1,“無法執行語句”,“沒有這樣的表:用戶”)

如果我在插入查詢之前包含一個語句來創建表

QSqlQuery createTable("create table users ( id INTEGER, username TEXT, balance REAL, isAdmin INTEGER)",db);
createTable.exec();

我正確地在新創建的db文件中獲取該表,並且它具有您嘗試插入的條目。

這有幫助嗎?

這是解決我的問題的原因。 我使用驅動程序QMYSQL而不是QSQLITE。 我只使用了后者,因為第一個無法加載。 Ubuntu和QT5上只需鍵入sudo apt-get install libqt5sql5-mysql即可解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM