使用Qt的数据库连接:失败?

时间:2013-02-09 11:57:47

标签: mysql qt qt-creator

我对Qt很新。我正在尝试使用Qt建立MySQL数据库连接并显示表信息QSqlTableModel。这是我的代码:

1).pro文件

QT       += core gui sql

TARGET = sri_qtdb
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

2).h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDebug>
#include <QtSql>
#include <QtGui>
#include <QtCore>


namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

protected:
    void changeEvent(QEvent *e);

private:
    Ui::MainWindow *ui;
    QSqlDatabase db;
    QSqlTableModel *model;
    //QTableWidget *table;
};

#endif // MAINWINDOW_H

3).cpp文件

a)main.cpp

#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

b)mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setCentralWidget(ui->tableView);
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("user");
    db.setUserName("root");
    db.setPassword("*********");
    if(!db.open()){ qDebug()<< "Failed"; }
    else
    {
       model = new QSqlTableModel(this);
       model->setTable("new_joiners");
       model->select();
       ui->tableView->setModel(model);
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

可用驱动程序:QSQLITE QMYSQL3 QMYSQL

我的输出始终为“失败”。我做错了什么?

1 个答案:

答案 0 :(得分:2)

首先,在localhost和所有参数上重新检查您的数据库。


检查您是否确实需要驱动程序:

QStringList driverList;
driverList = QSqlDatabase::drivers();

if (!driverList.contains("QMYSQL", Qt::CaseInsensitive))
    qDebug()<<"No QMYSQL support! Check all needed dll-files!";
else 
    qDebug()<<"QMYSQL support is avaiable.";

编写代码以使其具体并使用调试功能。例如,如果连接到DB时出错,则以这种方式输出上一个错误:

if(!db.open())
{
    qDebug()<<"Error while opening DB: " << db->databaseName()
            << db->lastError();
}

祝你好运!