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):
中文亂碼問題暫不知道怎麼解決,有知道的可留言告知