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

本文记录了在Ubuntu 18.04上使用Qt 5.10.0连接MySQL的过程,包括安装MySQL服务器、编译Qt的MySQL驱动,并介绍了在Windows上使用Qt 5.13.2的类似步骤。此外,还展示了创建数据库连接和Qt界面的代码示例。
摘要由CSDN通过智能技术生成

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文件:

c6ef0904cc674fca976bf2c02eeb86b7.jpg

修改qsqldriverbase.pri文件:

fe4a8609566546eaa8db04343a0b31c6.jpg

保存项目。

终端打开到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

e0b6a80fe11d47558a50550fac1c4765.jpg

此时代表编译成功了。

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中修改如下:

a2452f45c366486c896460be7515e8f0.jpg

点击构建,即可在生成qsqlmysql库文件存放的位置里看到

9aff6a9cf2564c97b6304a7df51e3150.jpg

这几个文件,其中将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界面:

3fca9c65cdeb4f9a8fdc956adb990cd7.jpg

代码如下:

pro:QT += sql

connection.h

#ifndef CONNECTION_H

#define CONNECTION_H

#include #include #include 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 #include #include #include #include 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 #include "connection.h"

#include //修改风格1步

#include #include 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() <

3.mysql的可视化工具简单使用(mysql-workbench-gpl-5.2.40-win32.msi):

a747e41d06694000836ff56efbe00563.jpg

6fb14cbc3c944dc3bed19ce27b509495.jpg

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

67c737c5917b4de3b3dd403daa5036af.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值