草庐IT

QT 5.13 使用MySQL数据库,含MYSQL安装和QT驱动安装及错误讲解、以及QMYSQL和QODBC两种连接方式以及常用指令,(非常全面了)

骑着毛驴数星星 2024-01-28 原文

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拷贝到发布程序所在目录

 

 

有关QT 5.13 使用MySQL数据库,含MYSQL安装和QT驱动安装及错误讲解、以及QMYSQL和QODBC两种连接方式以及常用指令,(非常全面了)的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  3. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  4. ruby - 完全离线安装RVM - 2

    我打算为ruby​​脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn

  5. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  6. ruby - 如何为 emacs 安装 ruby​​-mode - 2

    我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby​​提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs

  7. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  8. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  9. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  10. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

随机推荐