Linux系统下安装MySQL及QT数据库编程
系统为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数据库编程相关推荐
- 在linux下怎么安装mysql,手把手教你在Linux系统下安装MySQL
在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB. 1. 下载并安装MySQL官方的 Yum R ...
- Windows系统和Linux系统下安装MySQL
Windows系统下安装MySQL: 一.获取MySql 1.获取下载地址进行下载 https://dev.mysql.com/downloads/mysql/浏览器访问下载 选择这一步可以不用注册登 ...
- Linux系统下安装Mysql数据库
大概就下面几个步骤: 1.挂载磁盘 mount /dev/cdrom /mnt 说明已经挂载了 2. 安装mysql yum install mysql-server -y 3. 启动mysql服务 ...
- Linux系统下授权MySQL账户访问指定数据库和数据库操作
Linux系统下授权MySQL账户访问指定数据库 需求: 1.在MySQL中创建数据库mydata 2.新建MySQL账户admin密码123456 3.赋予账户admin对数据库mydata具有完全 ...
- linux系统下的oracle数据库,在Linux系统下安装Oracle数据库
在Linux系统下安装Oracle数据库:1.约定:linux系统为Linux.5.4-server-x86_64,数据库为linux.x64_11gR1_database_1013 linux 在L ...
- linux系统下安装pfam数据库中hmmer软件以及python3非root用户的安装
linux系统下安装pfam数据库中hmmer软件以及python3非root用户的安装 http://hmmer.org/从该链接下载源,其中有Userguide.pdf 下载,解压缩并切换目录 之 ...
- 2.1.Linux系统下启动MySQL的命令及相关知识
2019独角兽企业重金招聘Python工程师标准>>> 一.总结一下: 1.Linux系统下启动MySQL的命令: /ect/init.d/mysql start ( ...
- Linux系统下启动MySQL的命令及相关知识
一.总结一下: 1.Linux系统下启动MySQL的命令: /ect/init.d/mysql start (前面为mysql的安装路径) 2.linux下重启mysql的命令: /ect/init. ...
- Linux环境下安装MySQL(源码安装)
Linux环境下安装MySQL(源码安装) 1.事先从官网/国内镜像站点中下载源码安装包,上传至服务器: 2.安装开发工具和开发包(从5.5开始使用cmake编译) 3.创建用户和组 4.编译安装My ...
最新文章
- server 2008 mysql 报错 0xc000007b_docker插件部署项目,volumes报错invalid volume specification...
- 〖Python〗-- 性能相关及深度优先与广度优先
- Makefile:160: recipe for target 'all' failed (Ubuntu 16.06 + Opencv3.2)解决办法
- ubuntu 14.04
- ASP.NET MVC 4 (一)路径映射
- 二叉树的层序遍历 IIPython解法
- pmd 设置默认规则,只要使用了该规则集就自动使用
- 数据库周刊 | DBA 核心技能
- frameset的一些操作
- Android SharedPreferences
- 电脑照片尺寸如何调整成自己想要的
- Activemq 下载地址
- 提高团队协作效率就靠它们了!
- 双重福利:计算机图书满100减50+满99 减10叠加券,更有抽奖送书活动,点击查看!...
- onedrive免费扩容10G
- 观测风如何变成10m风
- 电脑显示wifi连接但是不能上网(dns无法连接)
- cc1310实现wor接收发送低功耗模式
- 博客开张+第1个项目:云云图书馆
- Retrofit简介