Qt编译mysql以及创建表后进行导入操作

鉴于许多同学对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的工程文件,每个Qt工程建立后都会生成一个以.pro结尾的文件,以后打开Qt工程的时候就双击你要打开的.pro结尾的哪个文件,整个工程就打开了。

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

下面说说具体的过程:

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

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

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

解决办法:找到Qt的安装目录,我的目录在这儿:

找到这个目录下的这个东西,看见了吧qmake

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

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

 

至此,其他的几个目录页这样配置。在此就不再重复了。

当然最简单最直接的是,不用配置。直接用Qt自带的command进行编译。打开开始菜单,找到Qt comman窗体。比如我的是这个:

   

进入到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 Qpplication工程。注意包含sql模块(如果没有包含,建完工程后可以自工程中添加,不用担心)。一下是一个简单的测试程序:

需要添加的头文件:#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    !!!!!

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

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

create databses  mydatabse;

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

此次,完成了基本的任务,在这里只是创建了简单的一张表,可以根据你的需要自行创建数据表。

注:在执行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(运行)可以看见:

     

可以看见查询的数据。

至此,所有简单的编译测试工作已经完成了。小伙伴们,快去试试你们的Qt和mysql吧。

测试工程文件我已经上传了,大家可以下载源码。

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

以上内容,纯属个人理解,若有任何问题,欢迎大家指出,共同学习。([email protected])

时间: 2024-10-10 15:59:31

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

Qt编译mysql驱动

Qt连接MySQL 分类: Qt 数据库 2013-02-27 20:57 1452人阅读 评论(0) 收藏 举报 一般情况下,qt只带了qsqlite4和qodbc两种驱动,如果在安装qt时,你没有添加qt -mysq参数,那么意味着,在你的程序中不能直接使用mysql数据库. 那么你就需要安装这个插件. 感谢jpzjpz提供的详细安装过程! 网址为:http://dev.wo.com.cn/bbs/viewthread.jsp?tid=140945&extra=page%3D1 我这里还是在

MySql数据库创建表

3.3.MySql数据库创建表 创建5个表: UserInfo用户基础表 Role 角色表 MenuInfo 菜单即控制表 Relation_Role_Menu 角色对应菜单关系表 RelaTion_User_Role  用户角色关系表 Depart 部门信息表 表名:USERINFO 用户信息表 序号 列名 数据类型 长度 小数位 标识 主键 允许空 默认值 说明 1 ID INT 是 否 主键 2 USER_NAME VARCHAR 100 是 用户姓名 3 USER_ID VARCHAR

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

一步步在Window下开发Qt 今天开始安装MySQL,看了些关于MySQL安装的博文,方法大致相同,但是遇到的细节问题各有不同,或者没有讲全面,下面来说说个人的安装过程及遇到的问题. 1.首先下载,MySQL官网下载地址:http://www.mysql.com/downloads/installer/ 2.安装时,会提示安装.netFramework4环境,这里提供一个下载链接:http://dldx.csdn.net/fd.PHP?i=537939463366842&s=17682a852

MYSQL批量创建表的存储过程

因为业务需要,创建了100个表,但是这些表的结构都是一样的,作为程序员,就是要解决这种重复劳动.然而这种事情还要单独写个php脚本的话太麻烦了吧,所以就干脆学了一下直接用Mysql存储过程怎么实现: 首先是创建表的:( LPAD(`@i`, 2, '0')的作用 是将1,2,3这些数字转化为'01','02','03') DROP PROCEDURE IF EXISTS `create_tables`; CREATE PROCEDURE create_tables () BEGIN DECLAR

ORACLE的安装与网页版创建表空间的简单操作以及PLsql的简单操作

1.oracle的安装: 安装简单易学,在这里不做解释.下载看装包后耐心等待,注意安装目录不要有中文字符,尽量按照指定目录进行安装.安装完成后会占用有大约5g的内存. 如果要卸载oracle,需要用其自带的卸载工具进行卸载[universal installer],然后删除注册表项,删除环境变量,删除目录并且重新启动计算机. 2.在网页版进行创建表空间: 进入网页版: 在电脑的服务中我们可以看到一共有7个oracle的服务项目,其中只有三个是正在启动中.这三项中,只有当OracleDBConso

MySQL数据库(表)的导入导出(备份和还原)

一)在同一个数据库服务器上面进行数据表间的数据导入导出: 1. 如果表tb1和tb2的结构是完全一样的,则使用以下的命令就可以将表tb1中的数据导入到表tb2中: insert into db2.tb2 select * from  db1.tb1 2. 如果表tb1和tb2只有部分字段是相同的,要实现将tb1中的部分字段导入到tb2中相对应的相同字段中,则使用以下命令: insert into db2.tb2(字段1,字段2,字段3--) select  字段1',字段2',字段3',-- 

PostgreSQL连接python,postgresql在python 连接,创建表,创建表内容,插入操作,选择操作,更新操作,删除操作。

安装 PostgreSQL可以用Python psycopg2模块集成. sycopg2是Python编程语言的PostgreSQL数据库的适配器. 其程序代码少,速度快,稳定.不需要单独安装这个模块,因为它默认情况下被运往随着Python版本在2.5.x一起的.如果不把它安装在机器上,然后可以使用yum命令安装它,如下所示: $yum install python-psycopg2 要使用psycopg2的模块,首先必须创建一个Connection对象,它表示数据库然后再可以选择创建游标对象,

mysql,oracle表数据相互导入

mysql导入oracle: 例如mysql中有ts_user_info表,现在要导入到oracle中的user_info表 1:导出mysql表数据到data.txt文件 mysql> select * from ts_user_info into outfile 'data.txt' fields terminated by ','; Query OK, 2 rows affected (0.00 sec) 说明: fields terminated by ',':将数据字段中的,号去掉 2

hibernate4连接mysql自动创建表之错误

我在学习Hibernate的过程中,遇到了这样一个错误:JUnit测试通过,但是数据库中却没有创建一个表,控制台的错误信息如下: HHH000388: Unsuccessful: create table t_user (user_id bigint not null auto_increment, card_number varchar(30), card_type varchar(20), company_name varchar(200), email varchar(100), gend