系统为Ubuntu16.04LTS,MySQL版本为5.7,QT版本为5.12.9

安装MySQL

sudo apt-get install mysql-server          //服务端
sudo apt-get install mysql-client          //客户端
sudo apt-get install libmysqlclient-dev    //程序编译时链接的库

安装过程中会弹出窗口,设置MySQL root密码,由于MySQL只有一个root用户,因此每次使用MySQL都需要输入这个root密码。
完成后dpkg -l | grep mysql查看安装状态

如果是这样的就是安装成功了

MySQL的一些基本操作

启动MySQL

service mysql start需要输入数据库root密码,MySQL只有一个用户root
启动后使用如下命令查看:sudo netstat -anp | grep mysql

使用命令行登录数据库

语法格式为
mysql -u用户名 -p密码 < 要导入的数据库数据(runoob.sql)
mysql -u root -p
需要输入root密码,启动成功后如下

查看SQL对应端口

show global variables like ‘port‘;

查看数据库

show databases;

创建一个新的库

CREATE DATABASE test_db;
创建一个名为test_db的库

MySQL 不允许在同一系统下创建两个相同名称的数据库。
可以加上IF NOT EXISTS从句,就可以避免类似错误,如下所示:
mysql> CREATE DATABASE IF NOT EXISTS test_db;

设置数据库编码格式

选中数据库mysql> test_db
设置编码格式为UTF-8mysql> set names utf8;

导入原有的数据库

方法一:
mysql>source /home/abc/abc.sql;
方法二:
mysql -u用户名 -p密码 数据库名 < 数据库名.sql
#mysql -uabc_f -p abc < abc.sql

往数据库中插入表格

语法格式:
CREATE TABLE table_name (column_name column_type);

CREATE TABLE temperatureHumidityRecord(createtime DATE,temprature DOUBLE,humidity DOUBLE)ENGINE=InnoDB DEFAULT CHARSET=utf8;

查看当前数据库所有表格

show tables;

往表格中插入数据

以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法:
INSERT INTO table_name ( field1, field2,…fieldN )
VALUES
( value1, value2,…valueN );
如果数据是字符型,必须使用单引号或者双引号,如:“value”。
例如:

 INSERT INTO temperatureHumidityRecord  (createtime,temprature,humidity) VALUES (NOW(),34.32,12.45);

读取表格内数据

例如:
select * from runoob_tbl;

修改某字段数据类型

语法格式:
“ALTER TABLE <表名> MODIFY <字段名> <新数据类型>”。

删除数据

语法格式:
DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]
语法说明如下:
<表名>:指定要删除数据的表名。
ORDER BY 子句:可选项。表示删除时,表中各行将按照子句中指定的顺序进行删除。
WHERE 子句:可选项。表示为删除操作限定删除条件,若省略该子句,则代表删除该表中的所有行。
LIMIT 子句:可选项。用于告知服务器在控制命令被返回到客户端前被删除行的最大值
删除所有:

退出MySQL

使用quit

停止SQL服务

service mysql stop

查看MySQL工作状态

service mysqld status
MySQL未工作

运行中

安装时未设置root无法登录SQL参考这篇博客
Linux下安装mysql及qt连接

MySQL数据类型

数值类型

日期和时间类型

字符串类型

QT中使用MySQL

Qt 支持很多种常见的数据库,如 MySQL、Oracle、MS SQL Server、SQLite 等。Qt SQL 模块里包含了很多个类,可以轻松实现数据库的连接、执行 SQL 语句,获取数据库里的数据与界面显示等功能,一般数据与界面之间会采用 Model/View架构,从而很方便的显示数据界面和操作数据库。
在 QSqlDatabase 连接数据库后,用 QSqlTableModel 从数据库里读取出表格模型,然后通过 Qt 的 QTableView 类显示数据库的内容在我们面前。需要对数据库的数据进行修改可以使用 QSqlQuery,或者直接修改QSqlTableModel 对象,修改里面的模型数据即可,流程如下:

连接测试程序

源代码如下,main.cpp

#include "mainwindow.h"#include <QApplication>void loadMySqlDriver();int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

mainwindows.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtSql>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);/**链接mysql数据库*/QSqlDatabase db(QSqlDatabase::addDatabase("QMYSQL"));db.setHostName("127.0.0.1");db.setDatabaseName("test");db.setUserName("root");db.setPassword("zjz123");db.setPort(3306);if(!db.open()){qDebug()<<db.lastError();}else{qDebug()<<"connect success";}
}MainWindow::~MainWindow()
{delete ui;
}

这个时候是无法连接的,会出现如下报错

Qt虽然支持直接连接MySQL,但是并没有将插件直接编译好,QT库对于MySQL的支持库的编译需要依赖MySQL安装时所生成的底层库,是因为MySQL版本不一样,安装时所产生的底层库也会有所区别,编译出来的插件也不一样,需要用户安装MySQL后手动编译。

编译依赖库

进入QT源码目录,找到mysql支持库源码

1、依赖包安装:

sudo apt-get install openssl
sudo apt-get install libssl-dev

2、修改.pro文件,路径为
/opt/Qt5.12.9/5.12.9/Src/qtbase/src/plugins/sqldrivers/mysql
在QT安装目录下的Src/qtbase/src/plugins/sqldrivers/mysql
打开pro文件,将QMAKE_USE注释掉

TARGET = qsqlmysqlHEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp#QMAKE_USE += mysqlOTHER_FILES += mysql.jsonPLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)

3、返回上一层目录,找到qsqldriverbase.pri文件,打开
将·nclude($$shadowed($$PWD)/qtsqldrivers-config.pri)
注释掉并添加include($$shadowed($$PWD)/configure.pri)

include($$shadowed($$PWD)/configure.pri)
QT  = core core-private sql-private# For QMAKE_USE in the parent projects.
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include($$shadowed($$PWD)/configure.pri)PLUGIN_TYPE = sqldrivers
load(qt_plugin)DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

4、进行qmkae生成makefile
sudo /opt/Qt5.12.9/5.12.9/gcc_64/bin/qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/x86_64-linux-gnu/ -lmysqlclient" mysql.pro

5、编译依赖库
/opt/Qt5.12.9/5.12.9/Src/qtbase/src/plugins/sqldrivers/mysql$ sudo make
6、拷贝依赖库
编译完成后将生成的库重新拷贝覆盖原有的库:
/opt/Qt5.12.9/5.12.9/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers$ sudo cp * /opt/Qt5.12.9/5.12.9/gcc_64/plugins/sqldrivers/ -rf

这样就可以连接上MySQL了

支持库加载上了以后,如果出现了这个错误,是因为要连接的数据库不存在,需要先创建对应的数据库

如果连接成功,则会输出调试信息”connect success”
与MySQL的连接测试完成

数据添加、删除、修改功能实现

UI界面

完善代码,实现数据操作功能:添加、删除、修改

mainwindows.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QtSql>
#include <QDataWidgetMapper>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_add_clicked();void on_pushButton_actSubmit_clicked();void on_pushButton_actRevert_clicked();void on_pushButton_delete_clicked();private:Ui::MainWindow *ui;QSqlDatabase db;//数据库连接QSqlTableModel *tabModel;//数据模型QItemSelectionModel *theSelection; //选择模型QDataWidgetMapper *dataMapper;//数据映射private:void openDataBase();void openTable();
};
#endif // MAINWINDOW_H

mainwindows.cpp:
需要注意的是,程序中将数据的提交策略使用setSubmitPolicy()设置为ManualSubmit(手动提交),数据的修改会暂时缓存,等待用户调用submitAll()保存所有修改,或是调用revertAll()取消所有未保存修改

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QMessageBox>
#include <QDateTime>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);openDataBase();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::openDataBase()
{/*链接mysql数据库*///QSqlDatabase db(QSqlDatabase::addDatabase("QMYSQL"));db = QSqlDatabase::addDatabase("QMYSQL");db.setHostName("127.0.0.1");db.setDatabaseName("test_db");db.setUserName("root");db.setPassword("123456");db.setPort(3306);if(!db.open()){qDebug()<<QString("connect database error")<<db.lastError();}else{qDebug()<<"connect success";}openTable();
}void MainWindow::openTable()
{/*打开数据表*/tabModel = new QSqlTableModel(this,db);tabModel->setTable("temperatureHumidityRecord");tabModel->setSort(tabModel->fieldIndex("createtime"),Qt::AscendingOrder);tabModel->setEditStrategy(QSqlTableModel::OnManualSubmit);//所有修改暂时缓存,不立刻更新到数据库内if(!(tabModel->select())){qDebug()<<"open table error"<<tabModel->lastError();return;}else{qDebug()<<"open table success";}/*设置字段显示*/tabModel->setHeaderData(tabModel->fieldIndex("createtime"),Qt::Horizontal,"时间");tabModel->setHeaderData(tabModel->fieldIndex("temprature"),Qt::Horizontal,"温度");tabModel->setHeaderData(tabModel->fieldIndex("humidity"),Qt::Horizontal,"湿度");/*选择模型*/theSelection = new QItemSelectionModel(tabModel);/*tableView控件设置*/ui->tableView->setModel(tabModel);//设置数据模型ui->tableView->setSelectionModel(theSelection);//设置选择模型/*创建界面组件与数据模型字段之间的数据映射*/dataMapper = new QDataWidgetMapper();dataMapper->setModel(tabModel);dataMapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);
}
/** 添加
*/
void MainWindow::on_pushButton_add_clicked()
{tabModel->insertRows(tabModel->rowCount(),1);QModelIndex curIndex = tabModel->index(tabModel->rowCount()-1,1);theSelection->clear();theSelection->setCurrentIndex(curIndex,QItemSelectionModel::Select);int curRow = curIndex.row();if(ui->textEdit_humidity->toPlainText().isNull() ||ui->textEdit_temprature->toPlainText().isNull()){QMessageBox::information(this,"","添加失败");return;}//当前时间tabModel->setData(tabModel->index(curRow,tabModel->fieldIndex("createtime")),QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));tabModel->setData(tabModel->index(curRow,tabModel->fieldIndex("temprature")),ui->textEdit_temprature->toPlainText().toDouble());tabModel->setData(tabModel->index(curRow,tabModel->fieldIndex("humidity")),ui->textEdit_humidity->toPlainText().toDouble());
}
/** 确认修改
*/
void MainWindow::on_pushButton_actSubmit_clicked()
{bool res = tabModel->submitAll();if(!res){QMessageBox::information(this,"","修改失败");}
}
/** 取消修改
*/
void MainWindow::on_pushButton_actRevert_clicked()
{tabModel->revertAll();
}/** 删除
*/
void MainWindow::on_pushButton_delete_clicked()
{QModelIndex curIndex = theSelection->currentIndex();tabModel->removeRows(curIndex.row(),1);
}

Linux系统下安装MySQL及QT数据库编程相关推荐

  1. 在linux下怎么安装mysql,手把手教你在Linux系统下安装MySQL

    在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB. 1. 下载并安装MySQL官方的 Yum R ...

  2. Windows系统和Linux系统下安装MySQL

    Windows系统下安装MySQL: 一.获取MySql 1.获取下载地址进行下载 https://dev.mysql.com/downloads/mysql/浏览器访问下载 选择这一步可以不用注册登 ...

  3. Linux系统下安装Mysql数据库

    大概就下面几个步骤: 1.挂载磁盘 mount /dev/cdrom /mnt 说明已经挂载了 2. 安装mysql yum install mysql-server -y 3. 启动mysql服务 ...

  4. Linux系统下授权MySQL账户访问指定数据库和数据库操作

    Linux系统下授权MySQL账户访问指定数据库 需求: 1.在MySQL中创建数据库mydata 2.新建MySQL账户admin密码123456 3.赋予账户admin对数据库mydata具有完全 ...

  5. linux系统下的oracle数据库,在Linux系统下安装Oracle数据库

    在Linux系统下安装Oracle数据库:1.约定:linux系统为Linux.5.4-server-x86_64,数据库为linux.x64_11gR1_database_1013 linux 在L ...

  6. linux系统下安装pfam数据库中hmmer软件以及python3非root用户的安装

    linux系统下安装pfam数据库中hmmer软件以及python3非root用户的安装 http://hmmer.org/从该链接下载源,其中有Userguide.pdf 下载,解压缩并切换目录 之 ...

  7. 2.1.Linux系统下启动MySQL的命令及相关知识

    2019独角兽企业重金招聘Python工程师标准>>> 一.总结一下:     1.Linux系统下启动MySQL的命令:     /ect/init.d/mysql start ( ...

  8. Linux系统下启动MySQL的命令及相关知识

    一.总结一下: 1.Linux系统下启动MySQL的命令: /ect/init.d/mysql start (前面为mysql的安装路径) 2.linux下重启mysql的命令: /ect/init. ...

  9. Linux环境下安装MySQL(源码安装)

    Linux环境下安装MySQL(源码安装) 1.事先从官网/国内镜像站点中下载源码安装包,上传至服务器: 2.安装开发工具和开发包(从5.5开始使用cmake编译) 3.创建用户和组 4.编译安装My ...

最新文章

  1. server 2008 mysql 报错 0xc000007b_docker插件部署项目,volumes报错invalid volume specification...
  2. 〖Python〗-- 性能相关及深度优先与广度优先
  3. Makefile:160: recipe for target 'all' failed (Ubuntu 16.06 + Opencv3.2)解决办法
  4. ubuntu 14.04
  5. ASP.NET MVC 4 (一)路径映射
  6. 二叉树的层序遍历 IIPython解法
  7. pmd 设置默认规则,只要使用了该规则集就自动使用
  8. 数据库周刊 | DBA 核心技能
  9. frameset的一些操作
  10. Android SharedPreferences
  11. 电脑照片尺寸如何调整成自己想要的
  12. Activemq 下载地址
  13. 提高团队协作效率就靠它们了!
  14. 双重福利:计算机图书满100减50+满99 减10叠加券,更有抽奖送书活动,点击查看!...
  15. onedrive免费扩容10G
  16. 观测风如何变成10m风
  17. 电脑显示wifi连接但是不能上网(dns无法连接)
  18. cc1310实现wor接收发送低功耗模式
  19. 博客开张+第1个项目:云云图书馆
  20. Retrofit简介

热门文章

  1. 美团笔试——空间回廊(c++)
  2. 鸿蒙手机拍摄,华为10月17日发布鸿蒙手机?假的
  3. python3中到底有几类数据类型?
  4. IDEA(idea)添加类注释和方法注释
  5. 古诗词取名小工具2.0-已开源
  6. 两天一种设计模式之——适配器模式
  7. JAVA实现石头剪刀布的游戏
  8. Mybatis查询到多条记录但是映射到list集合只有一条或者条数不对
  9. 爬虫入门经典(十七) | 图形验证码识别
  10. 数据口径_如何使用口径在Kindle上获取免费杂志