Qt能够实现对不同数据的支持,例如常见的oracl、MySql、Sql

Server、Access等等。首先Qt是通过QSqlDabase来创建数据库的连接,下面是创建一个QSqlDabase的实例:

db.setHostName(“XXX”); //设置主机名

db.setDabaseName(“XXX”);//设置数据库名

db.setUserName(“XXX”);//设置用户名

db.setPassword(“XXX”);//设置密码

if(!db.open())//打开数据库连接

{

//error

}

上面的第一行中”QSQLITE”是对应数据库的驱动名称,也就说访问不同的数据库对应的驱动是不一样的。通常可以通过以下代码:

QStringList drivers = QSqlDabase::drivers();

Foreach(QString driver,drivers)

qDebug()<

这样就可以知道自己版本的qt有几种不同的驱动。我的版本是Qt5.3,下面是在帮助文档看到Qt支持的所有驱动。例如我们常见的access数据库对应的是QODBC,MySql的驱动是QMYSQL,Oracle数据的驱动是QOCI。

现在我们要了解一个数据库,就是上面例子”QSQLITE”所对应的数据库。它所连接的是SQLite数据库,是一种轻型的文件型数据库,主要应用于嵌入式领域而且支持跨平台,Qt的默认数据连接就是SQlite数据。SQlite没有对应的数据库系统,它通过我们写的代码直接编译可生成这样的一个数据库文件。例如上面的代码执行完后QSqlDabase

db = QSqlDabase::addDatabase(“QSQLITE”);

db.setHostName(“XXX”); //设置主机名

db.setDabaseName(“XXX”);//设置数据库名

db.setUserName(“my.db”);//设置用户名

db.setPassword(“XXX”);//设置密码

if(!db.open())//打开数据库连接

{

//error

}

就在我们编译生成Debug文件夹看到一个my.db的文件。

但实际上我们通常要访问一个比较常见的数据库,例如Access数据库。下面来介绍Qt怎么访问Access。

首先我们在要执行QSqlDabase db =

QSqlDabase::addDatabase(“QODBC”);这条语句,注意到此时的驱动已经换成了QODBC,接着关键的是db.setDabaseName(“XXX”);这条语句。可能刚开始天真的以为只要把驱动名称换成QODBC,然后我们新建一个access文件名称为命名为File.mdb,然后执行db.setDabaseName(“File.mdb”);这条语句就能访问access数据库文件了,但实际上是不行的。在帮助文档查看setDabaseName属性,你会发现这里有详细的说明如何访问access的例子。

For the QOCI (Oracle) driver, the database name is the TNS

Service Name.

For the QODBC driver,

the name can either be a

DSN, a DSN filename (in which case the file must have

a.dsnextension),

or a connection string.

For example, Microsoft

Access users can use the following connection string to open

an.mdbfile

directly, instead of having to create a DSN entry in the ODBC

manager:

...

db.setDatabaseName("DRIVER={Microsoft Access Driver

(*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb");

if (db.open()) {

//

success!

}

...

上面就是说如果采用QOCI驱动,那么database的name要使用TNS服务的名称。而如果采用QODBC驱动,那么database的name就要采用DNS名称或者连接字符串这两种方式。这里的name就是指void

QSqlDatabase::setDatabaseName(const QString &

name)里面这个name参数。然后它给出了采用连接字符串这种方法的例子就是上面那段代码,其中最关键的就是这句:

db.setDatabaseName("DRIVER={Microsoft Access Driver

(*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb");

如果你本地的access文件是file.mdb,那么只要把上面DBQ=后面的这个换成你自己的文件,

DBQ = file.mdb,其他都相同,这样就能成功连接你本地的access数据库了。到这里虽然能实现预期的目的,但总感觉一头雾水,我本身对数据库的了解也仅次于那些sql语句,上面连接字符串的其他部分代表什么含义,ODBC是什么东西,还有另外一种方法中提到的DSN是什么东西都不知道,所以花了一段时间在网上查找相关资料,终于大致了解ODBC,DNS还有应用程序连接数据库之间的过程原理等。

在百科上ODBC是这样定义的:开放数据库互连(Open

Database Connectivity,ODBC)是微软公司开放服务结构(WOSA,Windows

Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这样讲很抽象,为了弄懂它来看这张在网上找的图,如下图中应用层就是指我们的应用程序,数据层就是我们要访问的数据库了,所以你可以简单把ODBC当作桥梁。ODBC管理器是关键的组成,ODBC管理器不是属于应用层,也不是属于数据层,也就是说这个ODBC管理器不属于Qt的范畴,也不属于Access,它是基于windows系统的一个ODBC部分。它是用来管理不同的数据源,应用程序要访问数据库,首先必须在ODBC管理器创建一个数据源。

也就是我们在ODBC管理器设置一些内容后,ODBC管理器就会帮我们把应用层和数据库之间的道路打通,至于它是怎么打通的,那就是微软提供的ODBC中的内容,我们不必知道也没办法知道,那么ODBC管理器应该设置一些什么东西呢?其实就是设置数据源。

在上面我们曾遇到过DSN,DSN是Data Source Name的缩写,也就是DSN就是数据源的名称,那么什么是数据源呢?数据源顾名思义就是数据的来源,它包含数据库存储位置、类型及ODBC驱动程序信息等等。我们把这么一个数据的来源用一个名字命名,这个名字就是DSN了。例如我接收到来自上海市XX区XX路XX号的一个快递,每个快递都对应一个快递号例如003945,那么这个数据源就是上面的那条地址,数据源名称就是快递号了,当然这是我比较粗的理解,也许很不恰当。

ODBC管理器的作用就是根据数据源提供的数据库存储位置、类型及ODBC驱动程序信息,建立起ODBC与一个特定数据库的联系,以后程序只需要提供数据源名称就可以直接访问数据库了。如果我们要访问一个在D:\mydata.mdb这个access数据库文件,那么你只需要告诉ODBC管理器这个是一个Access数据库文件,它在的位置是D:\mydata.mdb这个路径,采用的ODBC驱动,那么ODBC管理器就会自动帮你把你的应用程序和mudata.mdb连接了,而它在内部是怎么实现的我们不需要知道。ODBC管理器在计算机的位置是--控制面板\系统和安全\管理工具。

点击添加按钮,出现一个驱动对话框,选择access对应的驱动如图然后点击完成后出现一个对话框,看到了吗有一个光标处就是填写数据源名称也就是DSN,例如我填的是connectDatabase,然后点击数据库连接弹出一个选择数据库对话框,之后我们在目录选择我们要连接的数据库文件的路径,然后点击确定,那么ODBC管理器就帮助我们把应用程序和数据库连接了,此时记住这个数据源名connectDatabase,然后回到上面QSqlDatabase::setDatabaseName属性,大致代码如下:

QSqlDabase db =

QSqlDabase::addDatabase(“QODBC”);//选择QODBC驱动

db.setDabaseName(“connectDatabase”);//设置数据库名,我们自己起的数据源名

if(!db.open())//打开数据库连接

{

//error

}

这时在看参考文档的这句话:For

example, Microsoft Access users can use the following connection

string to open an.mdbfile

directly, instead of having to create a DSN entry in the ODBC

manager:你会豁然开朗了,要嘛用连接字符串,要嘛去ODBC

manager管理器去设置好数据源,这两种方法都可以帮助应用程序连接到Access数据库。通过比较显然连接字符串的方式要简单很多了,下面这张表是在网上找到不同数据库对应的连接字符串的书写格式,注意如果格式不正确是没办法连接到数据库的。

qt连接mdb_【原创】QT数据库学习和以连接Access为例相关推荐

  1. mysql连接方式左联_数据库中的左连接(left join)和右连接(right join)区别 | 改变自己...

    Left Join / Right Join /inner join相关 关于左连接和右连接总结性的一句话: 左连接where只影向右表,右连接where只影响左表. Left Join select ...

  2. python连接本机oracle数据库吗,用Python连接Oracle数据库容易吗?

    ello,大家好!本次介绍的内容是如何使用Python连接Oracle数据库!看起来很简单,但实际上就是这么简单.学习本节内容后,相信老铁们能用Python撸起你们那庞大的Oracle数据库了.Wel ...

  3. PHP同时连接多个mysql数据库_php如何同时连接多个数据库

    下面是一个函数能够保证连接多个数据库的下不同的表的函数,可以收藏一下,比较实用,测试过是有用的. function mysql_oper($oper,$db,$table,$where='1',$li ...

  4. linux连接本机mysql数据库,Linux中MySQL连接本机数据库客户端

    Linux中MySQL连接本机数据库客户端 Linux中MySQL连接本机数据库客户端 1.登入mysql数据库 2.找到要修改的位置 // 选定要用的数据库(用show databases;看完再u ...

  5. boot连接不上mysql数据库_【springboot连接 MYSQL数据库出问题_springboot】 | IT修真院·坑乎...

    Spring: datebase: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/spring-c ...

  6. 【数据库学习笔记】——cursor游标对象

    目录 1.创建cursor对象 2.cursor对象常用方法 3.操作数据库的常见流程(五部曲) 课程视频链接: 第14节 Python操作数据库_哔哩哔哩_bilibili666https://ww ...

  7. 【数据库学习笔记】——操作sqlite(增删改查)以及cursor的方法介绍

    目录 1.sqlite数据库介绍 1)常见的数据库操作 2)数据操作常见步骤 2.向数据表中增加数据(insert into) 1)向数据表中添加一条记录 2)向数据表中一次性添加多条记录 ​ 3.修 ...

  8. c access mysql数据库_基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo)...

    基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo) 一.三种数据库的主要对比 数据库类型 特点 Microsoft Access 桌面数据库.数据库载体是单个文件 ...

  9. QT五子棋游戏课设及源码(连接mysql数据库含打开并运行程序的教程)

    gdut大一下学期c++课设(得分:95) 实验报告及源码压缩包百度云下载: 链接:https://pan.baidu.com/s/1zO5ofMz09fiWihxCcZcFbg 提取码:ddav 首 ...

最新文章

  1. python中处理日期和时间的标准模块是-2019python常见的170道面试题解析
  2. 2017-7-6日记
  3. 学完可以解决90%以上的数据分析问题-利用python进行数据分析第二版(代码和中文笔记)...
  4. 【STM32】DMA详解
  5. mysql像plsql一样删除提交_MySQL学习-MySQL内置功能_事务操作
  6. window10 安装出现the error code is 2503错误的解决方法
  7. Find命令使用详解及实例分析
  8. MySQL数据库基础(三)——SQL语言
  9. android studio 登录与注册,Android Studio实现QQ的注册登录和好友列表跳转
  10. oracle startup open ora 03113,startup mount备库的时候报ORA-03113错误
  11. RAID1与RAID0的区别
  12. Multisim电路分析仿真-叠加原理
  13. [论文翻译]YOLOX: Exceeding YOLO Series in 2021
  14. 2022 ICPC Gran Premio de Mexico 1ra Fecha (B、D、E、F)
  15. 如何安装旧的nvidia显卡驱动程序
  16. CTE表--SQLSERVER2005看得见的性能提升
  17. 使用 Ceph 作为 OpenStack 的统一存储解决方案
  18. html 图片纵向拉伸,css如何让图片拉伸?
  19. debian9.6安装和卸载新立得软件包管理器
  20. C#获取本周,上周,下周信息

热门文章

  1. python 发送get 请求
  2. python爬取小说项目概述_Python爬虫实战——爬取《斗破苍穹》全文小说(基于re模块)...
  3. 业财一体化管理,简化财务复核流程,提高工作效率
  4. 实现微信app支付的springboot项目
  5. Java语音SDK接口开发经验及具体开发实现
  6. python中文分词,生成标签云,生成指定形状图片标签云
  7. mysql left join含义_left join是什么意思
  8. vue实现修改用户信息的全过程
  9. 一文了解如何使用移动应用安全组件Soot和Flowdroid
  10. 如何成为一个成熟男人