qt mysql數據庫的第一次使用記錄

Windows端:

1.安裝mysql注意事項(mysql-installer-community-5.5.50.0.msi):

(1)注意qt編譯的是32位還是64位,需安裝對應位數的mysql,

(2)安裝目錄中不可以有空格,否則編譯qmysql時會報錯。

2. 安裝qt源碼,對於qt的版本。

(1)源碼目錄qt-everywhere-src-5.13.2\qtbase\src\plugins\sqldrivers\mysql,雙擊mysql.pro文件,進入qt,在mysql.pro中修改如下:

 

 

點擊構建,即可在生成qsqlmysql庫文件存放的位置裏看到

 

這幾個文件,其中將dll文件拷貝到Qt5.13.2\5.13.2\mingw73_32\plugins\sqldrivers目錄下;在將mysql安裝目錄lib下的libmysql.dll拷貝到\Qt5.13.2\5.13.2\mingw73_32\bin目錄下。

(2)編寫mysql測試程序,qt界面:

 

代碼如下:

pro:QT += sql

connection.h



#ifndef CONNECTION_H

#define CONNECTION_H



#include <QMessageBox>

#include <QSqlDatabase>

#include <QSqlQuery>



static bool createConnection()

{

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

    db.setHostName("localhost");

    db.setDatabaseName("mydata");  //這裏輸入你的數據庫名 必須在qmysql中存在的

    db.setUserName("root");

    db.setPassword("cnrobot"); //這裏輸入你的密碼



    if(!db.open()) {

        QMessageBox::critical(0, QObject::tr("無法打開數據庫"),

        "無法創建數據庫連接! ", QMessageBox::Cancel);

        return false;

    }



    //下面來創建表

    // 如果 MySQL 數據庫中已經存在同名的表, 那麼下面的代碼不會執行

    QSqlQuery query(db);

    //使數據庫支持中文

    query.exec("SET NAMES 'Latin1'");

    //創建 course 表

    query.exec("create table course(id int primary key, name varchar(20), teacher varchar(20))");

    query.exec("insert into course values(0, '數學', '劉老師')");

    query.exec("insert into course values(1, '英語', '張老師')");

    query.exec("insert into course values(2, '計算機', '李老師')");



    return true;

}



#endif // CONNECTION_H



Mainwindow.h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H



#include <QMainWindow>

#include <QSqlTableModel>

#include <QSqlQuery>

#include <QSqlError>

#include <QMessageBox>



class QSqlTableModel;



namespace Ui {

class MainWindow;

}



class MainWindow : public QMainWindow

{

    Q_OBJECT



public:

    explicit MainWindow(QWidget *parent = 0);

    ~MainWindow();



private slots:

    void on_submit_pushButton_clicked();



    void on_undo_pushButton_clicked();



    void on_find_pushButton_clicked();



    void on_show_pushButton_clicked();



    void on_idUp_pushButton_clicked();



    void on_idDown_pushButton_clicked();



    void on_del_pushButton_clicked();



    void on_add_pushButton_clicked();



private:

    Ui::MainWindow *ui;



    QSqlTableModel *model;

};



#endif // MAINWINDOW_H



Mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"



MainWindow::MainWindow(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::MainWindow)

{

    ui->setupUi(this);



    model = new QSqlTableModel(this);

    model->setTable("course");

    model->select();



    //設置編輯策略

    model->setEditStrategy(QSqlTableModel::OnManualSubmit);

    ui->tableView->setModel(model);

}



MainWindow::~MainWindow()

{

    delete ui;

}



//提交修改按鈕

void MainWindow::on_submit_pushButton_clicked()

{

    //開始事務操作

    model->database().transaction();

    if(model->submitAll()) {

        model->database().commit(); //提交

    } else {

        model->database().rollback(); //回滾



        QMessageBox::warning(this, tr("tableModel"), tr("數據庫錯誤: %1").arg(model->lastError().text()));

    }

}



//撤銷修改按鈕

void MainWindow::on_undo_pushButton_clicked()

{

    model->revertAll();

}



//查詢按鈕, 進行篩選

void MainWindow::on_find_pushButton_clicked()

{

    QString name = ui->name_lineEdit->text();

    if(name.length()){

    //根據姓名進行篩選, 一定要使用單引號

        model->setFilter(QString("teacher = '%1'").arg(name));

        model->select();

    }else{

        QMessageBox::warning(this, tr("Warning"),tr("姓名不能爲空") );

    }



}



//顯示全表按鈕

void MainWindow::on_show_pushButton_clicked()

{

    model->setTable("course");

    model->select();

}



//按 id 降序排列按鈕

void MainWindow::on_idUp_pushButton_clicked()

{

    //id 屬性, 即第 0 列, 升序排列

    model->setSort(0, Qt::AscendingOrder);

    model->select();

}



//按 id 降序排列按鈕

void MainWindow::on_idDown_pushButton_clicked()

{

    model->setSort(0, Qt::DescendingOrder);

    model->select();

}



//刪除選中行按鈕

void MainWindow::on_del_pushButton_clicked()

{

    // 獲取選中的行

    int curRow = ui->tableView->currentIndex().row();

    // 刪除該行

    model->removeRow(curRow);

    int ok = QMessageBox::warning(this,tr("刪除當前行!"), tr("你確定刪除當前行嗎? "),QMessageBox::Yes, QMessageBox::No);

    if(ok == QMessageBox::No)

    { // 如果不刪除, 則撤銷

        model->revertAll();

    } else { // 否則提交, 在數據庫中刪除該行

        model->submitAll();

    }

}



void MainWindow::on_add_pushButton_clicked()

{

    // 獲得表的行數

    int rowNum = model->rowCount();

    // 添加一行

    model->insertRow(rowNum);

    model->setData(model->index(rowNum,0),rowNum+1);

}



Main.cpp

#include "mainwindow.h"

#include <QApplication>

#include "connection.h"

#include <QStyleFactory>   //修改風格1步

#include <QPluginLoader>

#include <QDebug>



int main(int argc, char *argv[])

{

    QApplication a(argc, argv);



    a.setStyle(QStyleFactory::create("fusion"));



    if(!createConnection())

        return 1;



//    QPluginLoader loader;

//    // MySQL 驅動插件的路徑 絕對路徑

//    loader.setFileName("Qt5.10.0/5.10.0/gcc_64/plugins/sqldrivers/libqsqlmysql.so");

//    qDebug() << loader.load();

//    qDebug() << loader.errorString();



//    //顯示所有可用的數據庫名稱

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

//    foreach(QString driver, drivers)

//        qDebug() << "\t "<< driver;

//    qDebug() << "End";





    MainWindow w;

    w.show();



    return a.exec();

}

3.mysql的可視化工具簡單使用(mysql-workbench-gpl-5.2.40-win32.msi):

 

 

中文亂碼問題暫不知道怎麼解決,有知道的可留言告知

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章