鉴于很多同学对Qt编译myql总是不能成功。出现各种问题,今天特此写出本教程,希望可以帮到须要的同学。

       首先,须要明确编译的目的和原理。

目的:Qt 5.2版本号曾经都是不带mysql驱动的。所以须要进行编译mysql数据库驱动,仅仅有编译完毕后才干被Qt载入上。假设你安装的是Qt5.2以后版本号的,那就不须要了,由于在后来的版本号中,Qt官方添加这一模块。

能够在Qt的安装插件文件夹下查看自己的驱动是否已经存在。

比如我的在文件夹:

C:\Qt\4.8.2\plugins\sqldrivers。能够看到当前的数据库驱动

一般须要两个即可了。

原理:先看命令:qmake "INCLUDEPATH+=C:\mysql\include" "LIBS+=C:\mysql\lib\libmysql.lib" mysql.pro

解释:qmake---是Qt中国的一种编译命令,在linux下编程时常常会用到make命令。详情能够百度;INCLUDEPATH----后面的路径是数据库中"include"和"lib"的文件夹。

为什么要将这两个文件复制一份考到其它盘?那是由于mysql在安装的时候默认安装路径中有空格,这在编译过程中是无法通过的,不信的同学能够试一下,不行的话在考到其它盘里面;最后面的mysql.pro---这个是Qt的project文件,每一个Qtproject建立后都会生成一个以.pro结尾的文件,以后打开Qtproject的时候就双击你要打开的.pro结尾的哪个文件。整个project就打开了。

可能我上面的解释也没有解释清楚大概就是哪个意思。

以下说说详细的过程:

细心的同学就会发现,qmake.自己编译时会出现这个问题:

'qmake' 不是内部或外部命令,也不是可执行的程序或批处理文件

原因:没有给Qt配置环境变量

解决的方法:找到Qt的安装文件夹,我的文件夹在这儿:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzcwNDMzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

找到这个文件夹下的这个东西,看见了吧qmake

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzcwNDMzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

找不到的话能够这样做:单击桌面Qt程序右键,打开文件路径:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzcwNDMzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

右击打开我的电脑----点击属性---高级系统设置-----环境变量----找到path项---编辑

 

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzcwNDMzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" height="317" width="303" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzcwNDMzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

至此,其它的几个文件夹页这样配置。在此就不再反复了。

当然最简单最直接的是,不用配置。

直接用Qt自带的command进行编译。打开開始菜单,找到Qt comman窗口。

比方我的是这个:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzcwNDMzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">   

进入到Qt的源代码文件夹下的插件文件夹--驱动文件夹---数据库文件夹。注意这个编译的是源代码。然后输入開始介绍的哪一行文件夹---按回车。

之后非常多同学都说没有反应,那就对了,这一步的目的是为了下一步编译做准备,会生成makefile文件。

由于用的是mingw编译器,所以用mingw32-make命令编译,假设你用的是vs的,那就用nmake编译。

直接输入命令mingw32-make----回车。

假设没有错误。这个过程大概须要几十秒钟。接着进行安装:输入命令:mingw32-make install.能够将生成的插件考入相应Qt的文件夹。

你能够查看下驱动文件夹师是否存在qsqlmysql.dll和libqsqlmysql4.a这两个文件,一般编译成功后就会有的。

此时编敲代码会发现,还是没有发现mysql驱动。

缺少引导文件。在考一个文件

就是之前你复制的那两个文件。在lib下有个libmysql.dll文件

将其拷贝到Qt的启动文件夹。跟前面打开方法一样,在桌面鼠标右击Qt的图标,打开文件位置,然后粘贴进去进行。

至此。mysql编译任务完毕。

那怎么知道自己的配置是否成功了呢,最简单的就是写个简单的程序检測下。

建立一个QtGui Qpplicationproject。注意包括sql模块(假设没有包括,建完project后能够自project中加入,不用操心)。一下是一个简单的測试程序:

须要加入的头文件:#include
<QSqlDatabase>  
#include <QDebug>

    qDebug() << "Available drivers:";

    QStringList drivers = QSqlDatabase::drivers();

    foreach(QString driver, drivers)
qDebug() << "\t "<< driver; qDebug() << "End";

把上面的程序写到main函数中就可以。

若是配置成功,则在窗体以下会输出一下信息:

看见上面的QMYSQL了吧,说明已经检測到了mysql数据库驱动了。如今能够进行后面的操作了。

首先,为了进行连接数据库。必须创建数据库和数据表,怎么创建呢?这个原理还和大家熟知的sqlserver一样,仅仅只是,略微有点差别,可能是命令大家还不熟悉,随意新建一个文本文件,进行编辑:利用sql语句进行创建表,就创建一个简单的学生表吧。

输入一下sql语句:

注意输入完毕后保存文件。文件的后缀是.sql    !!!

。。

下一步是关键的时候,进行导入数据表。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzcwNDMzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

依照上面的命令:show databses;---回车。就可以看见当前的数据库名称。接下来创建数据库--这和我们在sqlserver中学的一样。

create databses  mydatabse;

运行导入命令。将之前写好的创建数据表导入数据库中---

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzcwNDMzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

此次,完毕了主要的任务,在这里仅仅是创建了简单的一张表,能够依据你的须要自行创建数据表。

注:在运行source命令之前不许使用数据库。也就是说,你必须指定你要为哪个数据库导入表。

完毕后,相同的方法,插入数据,也是在一个网文本文件里写好插入数据命令,然后运行导入命令.

以上步骤完毕后。可以进行一个简单的连接数据库測试,检測是否可以连接上。

#include <QApplication>
#include "widget.h"
#include <QMessageBox>
#include <QSqlError>
#include <QTextCodec> bool creatconnect()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setDatabaseName("student");
db.setUserName("root");
db.setPassword("123456"); bool ok = db.open();//建立数据库连接 if(!ok)
{
QMessageBox::critical(0,QObject::tr("连接数据库失败! ! ! "),db.lastError().text());
return false;
}
else
{
QMessageBox::information(0,QObject::tr("Tips"),QObject::tr("连接数据库成功。。! ")); return true;
} } int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec *codec = QTextCodec::codecForName("GB2312"); QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec); if(!creatconnect())
{
return 1;
} Widget w;
w.show();
return a.exec();
}

点击Run(执行)能够看见:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzcwNDMzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">     

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzcwNDMzNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

能够看见查询的数据。

至此,全部简单的编译測试工作已经完毕了。

小伙伴们,快去试试你们的Qt和mysql吧。

測试project文件我已经上传了,大家能够下载源代码。

http://download.csdn.net/detail/u013704336/8278693

以上内容。纯属个人理解,若有不论什么问题,欢迎大家指出,共同学习。(creaazylq@163.com)

Qt编译mysql以及创建表后进行导入操作的更多相关文章

  1. MYSQL定时创建表分区

    MYSQL定时创建表分区 一.存储过程-表分区-----------------------------------------------------------------需求: 每月创建一个分区 ...

  2. mysql 在创建表或者插入时遇到关键字报错

    mysql 在创建表或者插入时遇到关键字:比如name,status等.都不报错 解决方法:在字段上加上` 上面这个符号是键盘ecs下面那个符号

  3. MySql数据库创建表

    3.3.MySql数据库创建表 创建5个表: UserInfo用户基础表 Role 角色表 MenuInfo 菜单即控制表 Relation_Role_Menu 角色对应菜单关系表 RelaTion_ ...

  4. QT编译Mysql驱动问题及解决方案

    默认情况下,qt 并没有自带mysql的数据库插件,需要自己编译先安装mysql server ,运行setup.exe时选择自定义安装,安装目录设为"D:\mysqldev"不要 ...

  5. Window下 Qt 编译MySQL驱动(居然用到了动态库格式转换工具)

    一步步在Window下开发Qt 今天开始安装MySQL,看了些关于MySQL安装的博文,方法大致相同,但是遇到的细节问题各有不同,或者没有讲全面,下面来说说个人的安装过程及遇到的问题. 1.首先下载, ...

  6. 为什么MySQL分库分表后总存储大小变大了?

    1.背景 在完成一个分表项目后,发现分表的数据迁移后,新库所需的存储容量远大于原本两张表的大小.在做了一番查询了解后,完成了优化. 回过头来,需要进一步了解下为什么会出现这样的情况. 与标题的问题的类 ...

  7. mysql中,创建表的时候指定if not exists参数的作用?

    需求说明: 在创建表的时候,如果指定if not exists语句,有什么作用,在此做个实验,并且官方手册, 理解下这个参数的作用. 操作过程: 1.创建测试表test01 mysql> cre ...

  8. Myecilpse web +tomcat 项目: JSP在mysql中创建表

    <%@ page language="java" import="java.util.*" import="com.mysql.jdbc.Dri ...

  9. shell mysql 直接创建表

    shell 直接创建表 #!/bin/bash mysql -hdatabases -uroot -p^xxxxasdasdadd <<EOF Create Database If Not ...

随机推荐

  1. 联想E490 加M.2固态硬盘 卡在第一画面不动解决办法

    电脑配置:  E490  500G机械硬盘,自己加M.2 NVMe 固态硬盘. 问题:启动时出现 2101:Detection error on SSD1(M.2),  无法识别到机械硬盘 (重新插拨 ...

  2. 学习jvm,关于MAT an internal error occurred during:"Parsing heap dump" from问题

    写了一个死循环不断的创建对象,模拟内存溢出 package com.zuo.test1; import java.util.ArrayList; import java.util.List; publ ...

  3. 关于数组array_diff(array1, array2)求差集来比较数组是否相等的问题细究

    无意中发现很多朋友都喜欢使用array_diff(array1, array2)来判断两个数组是否相等, 我自己也偶尔会这么使用 但是今天我在写代码的过程中无意发现这么做是不准确的. 首先我们来看一下 ...

  4. js 函数基础(方便复习使用)

    // 函数声明: function bbq(){ // ..... } // 函数表达式: // 1.命名函数表达式 var test = function abc(){ document.write ...

  5. Java基础学习总结(3)——抽象类

    一.抽象类介绍 下面通过一下的小程序深入理解抽象类 因此在类Animal里面只需要定义这个enjoy()方法就可以了,使用abstract关键字把enjoy()方法定义成一个抽象方法,定义如下:pub ...

  6. 洛谷 P1033 自由落体

    P1033 自由落体 题目描述 在高为 H 的天花板上有 n 个小球,体积不计,位置分别为 0,1,2,….n-1.在地面上有一个小车(长为 L,高为 K,距原点距离为 S1).已知小球下落距离计算公 ...

  7. Redis加入Centos Linux开机启动

    Redis加入Centos Linux开机启动 网上有很多redis在linux下自动启动的例子,实现的方式很多,很多都是参考一个老外流传出来启动的例子,其实直接使用是不行,而且有很多地方有一些语法错 ...

  8. [Javascript] String Padding in Javascript using padStart and padEnd functions

    ES2017 added two new string functions. They are padStart and padEndfunctions. In this lesson, we wil ...

  9. 【Android进阶篇】Fragment的两种载入方式

    一.概述 Fragment(碎片,片段)是在Android 3.0后才引入的,基本的目的是为了实如今大屏幕设备上的更加动态更加灵活的UI设计. 这是由于平板电脑的屏幕比手机大得多,所以屏幕上能够放很多 ...

  10. python批量下载色影无忌和蜂鸟的图片 爬虫小应用

    有些冗余信息.由于之前測试正則表達式.所以没有把它们给移走.只是不影响使用. # -*- coding:utf-8 -*- import re,urllib,sys,os,time def getAl ...