1.MySQL数据库的下载,这里只讲免安装的。
①.首先:要先进入mysql官网里MySQL :: MySQL Downloads。
②.向下拉,找到以下位置:
③.下载社区版的Server:
④.根据系统选择对应版本:
⑤.直接点击红框位置即可开始下载:
⑥.文件下载后解压到英文目录,我直接解压到D盘根目录:
⑦.在mysql目录下创建一个my.ini配置文件,里面写的代码是mysql的一些基本配置
[mysql]
default-character-set = utf8
[mysqld]
#跳过SSL
skip_ssl
#端口
port = 3306
#mysql安装目录
basedir = D:/mysql-8.0.31-winx64
#mysql数据存放目录
datadir = D:/mysql-8.0.31-winx64/data
#允许最大连接数
max_connections = 1024
#允许连接失败的次数
max_connect_errors=10
#服务端默认使用字符集
character-set-server = utf8
#默认存储引擎
default-storage-engine = INNODB
⑧.新建系统变量
为了方便登录操作mysql,在这里我们设置一个全局变量
点击"我的电脑"-->"属性"-->''高级系统设置''-->''环境变量'',接下来如下图所操作
把新建的mysql变量添加到Path路径变量中,点击确定,即完成:
配置完成之后,每当我们想要用命令行使用mysql时,只需要win+R,-->输入"cmd"打开命令行,之后输入登录sql语句即可
2.MySQL数据库的配置
①.以管理员身份打开命令行,并跳转到解压的文件夹中的bin文件夹内:
②.安装mysql的服务:mysqld --install
如果提示以下错误,则需要百度下载一个响应的dll文件,并将文件拷贝到D:\mysql-8.0.31-winx64\bin文件夹内。重新运行mysqld --install即可
③.初始化mysql : mysqld --initialize --console
注意,初始化的命令有很多,差别不大:
mysqld --initialize-insecure:自动生成无密码的root用户,
mysqld --initialize:自动生成带随机密码的root用户,
mysqld --initialize --user=mysql --console:生成随机密码并显示在控制台窗口,
在这里,初始化会产生一个随机密码,如下图框框所示,记住这个密码,后面会用到
④.开启mysql的服务(net start mysql)
⑤.登录验证,(mysql -u root -p)mysql是否安装成功!(要注意上面产生的随机密码,不包括前面符号前面的空格,否则会登陆失败),如果和下图所示一样,则说明你的mysql已经安装成功!注意,,一定要先开启服务,不然会登陆失败,出现拒绝访问的提示符!!!
⑥.修改密码
初始密码太复杂,不方便记忆,所以修改一下, alter user 'root'@'localhost' identified by 'root';
⑦.退出并重新登录
⑧.新建一个数据库
如: create database test; (不要忘记分号!!!!!!,数据库的名字就是test,可以改为其他)
新建完后可以查看当前数据库:show databases;
3. 常见问题处理
①.有时遇到服务无法开启的情况
这是因为my.ini文件指令不合法导致的。
可以先找合适的ini内容,上面的内容是我测试过的,然后把data文件夹删除
然后删除服务:使用命令sc delete mysql
再重新初始化mysql:mysqld --initialize --console,初始化成功可以看到提供的初始密码
再重新安装服务:mysqld --install mysql
再启动服务:net start mysql
再登录mysql:mysql -u root -p ,随后的密码输入上面提供的初始密码
再修改密码: alter user 'root'@'localhost' identified by '123456'; 这里修改为123456了
再退出: exit
再重新登录试试:mysql -u root -p ,随后的密码用新密码如123456
②.有时候登录时遇到ERROR 2061 (HY000): Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
这时候只需要把登录指令改为:mysql -u root -p --get-server-public-key
此时就可以登录成功,但是成功以后下次登录还会遇到这样的问题,并且QT等也会提示这个问题。
所以得用以下办法,分别复制下面命令并执行:
//修改加密规则(可以直接复制)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
//更新一下用户的密码(可以直接复制)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
//刷新权限(可以直接复制)
FLUSH PRIVILEGES;
//重置密码,注意里面的123456是我设置的密码。
alter user 'root'@'localhost' identified by '123456';
这样登录就不会再提示错误了,看截图:
4.QT 登录测试
新建一个工程,我用的QT版本是5.13.2。据说5.13之前的版本都自带MYSQL驱动,5.13及以后得自己编译安装。后面会讲。
①.文件代码添加
pro文件新增:QT +=sql
mainwindow.h中添加: #include <QSqlDatabase>
mainwindow.cpp中代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QDebug>
#include <QSqlError>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
qDebug() << QSqlDatabase::drivers() ;
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1"); //连接本地主机
db.setPort(3306);
db.setDatabaseName("test");
db.setUserName("root");
db.setPassword("123456");
bool ok = db.open();
if (ok){
QMessageBox::information(this, "infor", "link success");
}
else {
QMessageBox::information(this, "infor", "link failed");
qDebug()<<"error open database because"<<db.lastError().text();
}
}
MainWindow::~MainWindow()
{
delete ui;
}
②.运行
连接成功会得到如下提示,如果不是这样也不要急,后面接着讲。
下面红框里这一行是支持的数据库驱动,可以看到是支持QMYSQL的,所以才能连接成功,如果没有QMYSQL,就需要安装驱动,这个比较麻烦点,还得重装QT。
5.QT mysql驱动安装
①重装qt,注意选中sources,如果之前安装时已选的就不用重装了
②.去MySQL :: Download MySQL Connector/C (Archived Versions)下载mysql驱动包并解压。
只需要其中的libmysql.dll,应该这个文件跟前面下载的数据库软件中D:\mysql-8.0.31-winx64\lib的文件是一致的。我是单独下载的驱动,有兴趣的朋友可以直接使用数据库软件中的这个dll文件试一下。
③.用QT打开安装目录中的mysql.pro工程,
注意:我是直接安装到D盘Qt文件夹下的。
成功安装qt源码之后在D:\Qt\Qt5.13.2\5.13.2\Src\qtbase\src\plugins\sqldrivers\mysql 目录中找到mysql.pro 工程文件,打开之后进行编辑
打开qtsqldrivers.pri文件,注释掉相关语句
编译mysql工程,在以下目录复制4个生成的文件到下图目录。
复制到这里:
最后复制mysql目录(D:\Qt\mysql-connector-c-6.1.11-winx64\lib)下的libmysql.dll到 D:\Qt\Qt5.13.2\5.13.2\mingw73_64\bin目录。
如此即可完成QT的MYSQL驱动安装。
安装是否成功同样可以用前面新建的QT工程测试。
6. MYSQL 客户端软件安装
这里使用MYSQL官方提供的MySQL Workbench 8.0.31
下载地址:MySQL :: Download MySQL Workbench
下载完后安装时可能需要VC2019支持:
下载地址在这里:
Latest supported Visual C++ Redistributable downloads | Microsoft Learn
VC2019支持包安装完后,MySQL Workbench 8.0.31的安装就很简单了,一路NEXT就可以
安装完成后界面如下:
点击这里就可以进入数据库:
7.ODBC连接方式
QT与mysql除了可以通过QMYSQL驱动连接以外,还可以使用通用接口QODBC
我目前QT支持的驱动如下:"QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7"
要使用ODBC,首先需要去MYSQL官网下载ODBC的驱动:
MySQL :: Download Connector/ODBC
直接一路NEXT就可以
然后去控制面板/管理工具/ODBC数据源64位,双击打开数据源管理程序
点击Test,正常会弹出下面连接成功的提示消息。
测试程序跟QMYSQL差不多
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("mysql");
// QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
// //db.setHostName("127.0.0.1"); //连接本地主机
// db.setHostName("localhost"); //连接本地主机
// db.setDatabaseName("test");
db.setPort(3306);
db.setUserName("root");
db.setPassword("123456");
bool ok = db.open();
if (ok){
QMessageBox::information(this, "infor", "link success");
}
else {
QMessageBox::information(this, "infor", "link failed");
qDebug()<<"error open database because"<<db.lastError().text();
}
至此,连接成功了。
8.常用指令
包含新建表、单条插入,多条插入,修改、查询、删除表,关闭连接,懂这些就满足基本项目需求了。。这些对QMYSQL和QODBC都通用。
//创建表
QSqlQuery query(db);
ok = query.exec("create table student(id int primary key auto_increment, "
"name varchar(255), age int, score int)ENGINE=INNODB;");
if (!ok){
qDebug()<< "create table:" << query.lastError();
}
//单行插入
ok = query.exec("insert into student(id, name, age, score) values(1, '张三', 18, 80)");
if (!ok){
qDebug()<< "insert into error:" << query.lastError();
}
//多行插入
query.prepare("insert into student(name, age, score) values(?,?,?)"); //?是占位符
QVariantList name;
QVariantList age;
QVariantList score;
name << "李四" << "王五" << "赵六";
age << 19 << 20 << 21;
score << 85 << 90 << 95;
//按顺序给字段绑定相应的值
query.addBindValue(name);
query.addBindValue(age);
query.addBindValue(score);
//执行预处理命令
ok = query.execBatch();
if (!ok){
qDebug()<< "execBatch error:" << query.lastError();
}
//修改
ok = query.exec("update student set score=100 where name='张三'");
if (!ok){
qDebug()<< "update error:" << query.lastError();
}
//查询
query.exec(QString("select id from student where name='赵六'"));
if (!ok){
qDebug()<< "select *from error:" << query.lastError();
}
else{
query.next();
qDebug() << query.value(0).toInt();
}
//遍历
ok = query.exec("select *from student");
if (!ok){
qDebug()<< "select *from error:" << query.lastError();
}
else{
while(query.next()) //遍历完为false
{
//方式1:以下标
qDebug()<< query.value(0).toInt()<< query.value(1).toString()
<< query.value(2).toInt()<< query.value(3).toInt();
//方式2:以字段
//qDebug()<< query.value("id").toInt()<< query.value("name").toString()
//<< query.value("age").toInt()<< query.value("score").toInt();
}
}
//删除某一行
ok = query.exec("delete from student where name='张三'");
if (!ok){
qDebug()<< "delete error:" << query.lastError();
}
//删除整个表
ok = query.exec("drop table student");
if (!ok)
{
qDebug()<< "drop table error:" << query.lastError();
}
db.close();//关闭数据库
9.项目发布
常规的发布过程不再说,区别是需要把libmysql.dll拷贝到发布程序所在目录