qt mysql数据库的第一次使用记录(ubuntu 和Windows)

ubuntu端:使用的是Qt5.10.0

sudo apt-get update    
sudo apt-get install mysql-server
sudo apt-get install libmysqlclient-dev

mysql可视化工具:
sudo apt-get install mysql-workbench

 用Qt打开 Qt5.10.0/5.10.0/Src/qtbase/src/plugins/sqldrivers/mysql/mysql.pro项目

修改mysql.pro文件:

修改qsqldriverbase.pri文件:

保存项目。

终端打开到Qt5.10.0/5.10.0/Src/qtbase/src/plugins/sqldrivers目录下,执行命令:

/home/ubuntu/Qt/Qt5.10.0/5.10.0/gcc_64/bin/qmake -- MYSQL_PREFIX=/home/ubuntu/Qt/Qt5.10.0/5.10.0/Src/qtbase/src/plugins/sqldrivers/mysql

cd mysql/

make

此时代表编译成功了。

cd  ../plugins/sqldrivers/

即可看到编译成功的qmysql使用的so文件(libqsqlmysql.so  libqsqlpsql.so)

将这两个文件拷贝到Qt5.10.0/5.10.0/gcc_64/plugins/sqldrivers目录下就可以用了。

 

Windows端:使用的是Qt5.13.2

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("root"); //这里输入你的密码



    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):

 

 

中文乱码问题解决: 在新建数据库时 字体选择为:utf8-utf8-general-ci

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值