数据库技术--数据库引擎,数据访问接口及其关系详解(附加形象的比喻)

目录

  • 背景
  • 数据库引擎
    • Jet数据库:
    • ISAM:
    • ODBC(Open Database Connectivity):
  • 数据访问接口
    • ADO(ActiveX Data Objects)
    • DAO(Data Access Objects)
    • RDO(Remote Data Objects):
  • 数据库引擎与数据访问接口的关系
  • 图示关系
  • 代码理解
  • 总结:

背景

    数据库技术在现代信息系统中扮演着重要的角色,vb书中有一章讲数据库技术的,里面涉及很多概念,针对这些概念进行一下学习。

数据库引擎

    数据库引擎是指负责管理和处理数据库的核心组件。它提供了对数据库的访问、查询、更新和维护等功能,就好比汽车的发动机。数据库引擎负责处理SQL语句,执行查询操作,并将结果返回给应用程序。常见的数据库引擎有MySQL、Oracle、SQL Server等。这里介绍几个书中提到的数据库引擎

Jet数据库:

    Jet数据库是一种轻量级数据库引擎,最初由微软开发用于Access数据库。Jet数据库提供了一种基于文件的数据库系统,支持多用户访问和事务处理。Microsoft Access和Visual Basic使用相同的Jet数据库引擎。Jet数据库类似于一个小型的数据库管理系统,适用于个人电脑和小型应用程序,提供了较好的性能和可靠性。

ISAM:

    ISAM(Indexed Sequential Access Method)是一种数据库管理系统,它使用索引和顺序访问方法来组织和管理数据。ISAM将数据存储在平面文件中,通过索引来加速数据的访问。ISAM适用于读取和写入频率相当的应用程序。ISAM数据库是一种早期的数据库引擎,类似于一个大型的文件柜,将数据按照索引顺序存储,但对于复杂的查询和并发处理支持较弱。

ODBC(Open Database Connectivity):

    ODBC是一种标准的数据库访问接口,它允许应用程序通过统一的方式访问各种数据库。ODBC提供了对数据库的连接、查询和更新等操作的API接口。通过ODBC,应用程序可以在不改变代码的情况下切换数据库。ODBC是跨平台的,支持多种编程语言。ODBC数据库类似于一个通用的翻译器,可以让不同的数据库引擎之间进行数据交流和共享。

数据访问接口

ADO(ActiveX Data Objects)

    ADO是一种高级的数据访问接口,采用了面向对象的编程模型,它提供了更强大和灵活的功能,支持多种数据源和编程语言。

DAO(Data Access Objects)

    DAO是一种较旧的数据访问接口,主要用于访问Access数据库。采用了传统的过程化编程模型,功能较为简单。

    ADO和DAO都提供了对数据库的连接、查询和更新等操作的方法和属性。都是是微软提供的数据访问接口。

RDO(Remote Data Objects):

    RDO是一种用于访问远程数据库的数据访问接口。它提供了对远程数据库的连接、查询和更新等操作的方法和属性。RDO可以通过网络连接到远程数据库服务器,并执行SQL语句。RDO适用于需要访问位于远程服务器上的数据库的应用程序。

    为什么在Visual Basic中有三种数据访问接口呢?因为数据访问技术总是在不断进步,而这三种接口的每一种都分别代表了该技术的不同发展阶段。最新的是ADO,它是比RDO和DAO更加简单而且更加灵活的对象模型。对于新工程,应该使用ADO作为数据访问接口。

数据库引擎与数据访问接口的关系

    数据库引擎,数据访问接口,数据库,应用程序它们之间有什么关系呢?
    当应用程序需要访问数据库时,需要通过数据库引擎来实际执行数据库操作,比如存储、检索和管理数据。数据库引擎负责处理底层的数据库操作。
    然而,应用程序和数据库引擎之间的交互需要一种统一的方式,这就是数据访问接口。数据访问接口充当了应用程序和数据库引擎之间的桥梁,它定义了一套规范和方法,使得应用程序可以方便地与不同的数据库引擎进行通信。
    以一个比喻来解释,数据库引擎就像是一辆汽车的发动机,负责提供动力和执行动作。而数据访问接口就像是汽车的方向盘和控制台,它提供了一种统一的方式,让驾驶员(应用程序)可以方便地操控汽车(数据库引擎)。
    在具体的数据库引擎中,比如ISAM、Jet和ODBC,它们都提供了自己的数据访问接口,用于连接应用程序和数据库引擎。
    总结起来,数据库引擎是实际执行数据库操作的软件组件,数据访问接口是应用程序与数据库引擎之间的桥梁,而ADO和DAO是两种具体的数据访问接口,用于在应用程序中访问和操作数据库。

图示关系

image.png

代码理解

    给大家一段熟悉的代码,来进一步理解上面的内容,这里使用ADO连接数据库、执行查询操作并遍历结果集。

Sub ConnectToDatabase()
    Dim conn As Object
    Dim cmd As Object
    Dim rs As Object
    
    ' 创建ADO连接对象
    Set conn = CreateObject("ADODB.Connection")
    
    ' 连接数据库
    conn.Open "Provider=SQLOLEDB;Data Source=服务器地址;Initial Catalog=数据库名;User ID=用户名;Password=密码"
    
    ' 创建ADO命令对象
    Set cmd = CreateObject("ADODB.Command")
    Set cmd.ActiveConnection = conn
    
    ' 执行查询操作
    cmd.CommandText = "SELECT * FROM 表名"
    Set rs = cmd.Execute
    
    ' 遍历结果集
    Do Until rs.EOF
        MsgBox rs.Fields("字段名").Value
        rs.MoveNext
    Loop
    
    ' 关闭连接
    rs.Close
    conn.Close
End Sub

    以上示例演示了使用ADO连接数据库、执行查询操作并遍历结果集的过程。

总结:

    数据库引擎以及数据访问接口是数据库技术中的重要概念。它们分别提供了不同级别和功能的数据库访问和管理方式。了解它们的概念和相互关系有助于选择合适的数据库技术和开发工具,并提高开发效率和应用程序的性能。
    希望我的文章对你有所帮助~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/72064.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】操作符详解

目录 一、算数操作符 二、移位操作符 1.左移操作符 2.右移操作符 (1) 逻辑右移 (2) 算术右移 (3)小总结 三、位操作符 四、赋值操作符 五、单目操作符 六、关系操作符 七、逻辑操作符 八、 条件操作符 九、逗号表达式 十、下标引用、函数调用和结构成员 1. [ ]下…

第一百二十八天学习记录:数据结构与算法基础:栈和队列(上)(王卓教学视频)

栈和队列的定义和特点 1、栈和队列是两种常用的、重要的数据结构 2、栈和队列是限定插入和删除只能在表的“端点”进行的线性表 线性表可以在任意一个位置插入和删除,栈只能在最后位置插入和删除 队列 只能删除第一个元素 栈和队列是线性表的子集&#xf…

LeetCode面向运气之Javascript—第27题-移除元素-98.93%

LeetCode第27题-移除元素 题目要求 一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度 举例 输入:nums [3,2,2,3], val 3 输出:2, nums [2,2] 输入:nums [0,1,2,2,3,0,4,2…

Mac思维导图软件Xmind for Mac中文激活版

好的思维导图软件能帮助用户更好的发挥创作能力,XMind是一款流行的思维导图软件,可以帮助用户创建各种类型的思维导图和概念图。 多样化的导图类型:XMind提供了多种类型的导图,如鱼骨图、树形图、机构图等,可以满足不同…

Unity ML-Agent

介绍: 环境搭建 待为完序

温室花卉种植系统springboot框架jsp鲜花养殖智能管理java源代码

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于Git无线传感网络的温室花卉种植智能控制系统 系统…

【linux-keepalive】keepalive避免单点故障,高可用配置

keepalive: [rootproxy ~]# yum install -y keepalived [rootproxy ~]# vim /etc/keepalived/keepalived.conf global_defs {router_id proxy1 //设置路由ID号vrrp_iptables //不添加任何防火墙规则 } vrrp_instance V…

C++_模板初阶

在面向对象中,我们可以使用重载来实现多态。 但是问题在于,重载的函数仅仅是类型不同,代码复用率比较低,只要有新的类型出现时,就要增加对应的函数;另一方面它的代码可维护性比较低,一个出错可…

Android之消除APP图标的白色边框

有问题的效果: 解决方案: 第一步:app右键—>new—>Image Asset 第二步:上传Logo图标,选择每种分辨率,预览看效果,选择Resize,可以微调 第三步:点击 Next&#xff…

nbcio-boot升级到3.1后出现online表单新增报错

nbcio-boot升级springboot、mybatis-plus和JSQLParser后出现新增online表单的时候报错,如下: 2023-08-13 21:18:01.292 [http-nio-8080-exec-12] [1;31mERROR[0;39m [36mo.jeecg.common.exception.JeecgBootExceptionHandler:69[0;39m - Handler dispat…

【Bert101】最先进的 NLP 模型解释【01/4】

0 什么是伯特? BERT是来自【Bidirectional Encoder Representations from Transformers】变压器的双向编码器表示的缩写,是用于自然语言处理的机器学习(ML)模型。它由Google AI Language的研究人员于2018年开发,可作为…

免费实用的日记应用:Day One for Mac中文版

Day One for Mac是一款运行在Mac平台上的日记软件,你可以使用Day One for mac通过快速菜单栏条目、提醒系统和鼓舞人心的信息来编写更多内容,day one mac版还支持Dropbox同步功能,想要day one mac中文免费版的朋友赶紧来试试吧! …

力扣刷题(C++)知识点

一&#xff0c;找到数组的中间位置 这个是错的&#xff0c;不能分开来 C vector<int>& nums 用法 创建一维数组vector&#xff1a; vector<int> nums; //不指定长度vector<int> nums(n); //指定长度为n c &#xff1c;numeric&#xff1e; accumul…

C语言——指针进阶

本章重点 字符指针数组指针指针数组数组传参和指针传参函数指针函数指针数组指向函数指针数组的指针回调函数指针和数组面试题的解析 1. 字符指针 在指针的类型中我们知道有一种指针类型为字符指针 char* int main() { char ch w; char *pc &ch; *pc w; return 0; }…

Java+Excel+POI+testNG基于数据驱动做一个简单的接口测试【杭州多测师_王sir】

一、创建一个apicases.xlsx放入到eclipse的resource里面&#xff0c;然后refresh刷新一下 二、在pom.xml文件中加入poi和testng的mvn repository、然后在eclipse的对应目录下放入features和plugins&#xff0c;重启eclipse就可以看到testNG了 <!--poi excel解析 --><d…

IDEA项目实践——Spring当中的切面AOP

系列文章目录 IDEA创建项目的操作步骤以及在虚拟机里面创建Scala的项目简单介绍 IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介 IDEWA项目实践——mybatis的一些基本原理以及案例 IDEA项目实践——动态SQL、关系映射、注解开发 IDEA项…

Django实现音乐网站 ⑽

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是后台对歌曲类型、歌单功能原有功能进行部分功能实现和显示优化。 目录 歌曲类型功能优化 新增编辑 优化输入项标题显示 父类型显示改为下拉菜单 列表显示 父类型显示名称 过滤器增加父类型 歌单表功能优化…

从一到无穷大 #10 讨论 Apache IoTDB 大综述中看到的优劣势

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言问题定义新技术数据模型schemalessTsfile设计双MemTable高级可扩展查询其他 IotD…

【VSCode】报错:出现段错误解决办法 (Segmentation fault)

VScode报错&#xff1a;Segmentation fault (core dumped)的解决办法 解决Program received signal SIGSEGV, Segmentation fault.的辛酸 Linux环境下段错误的产生原因及调试方法小结 Linux下的段错误Segmentationfault产生的原因及调试方法经典.pdf 在程序中&#xff0c;TF…

Python-OpenCV中的图像处理-傅里叶变换

Python-OpenCV中的图像处理-傅里叶变换 傅里叶变换Numpy中的傅里叶变换Numpy中的傅里叶逆变换OpenCV中的傅里叶变换OpenCV中的傅里叶逆变换 DFT的性能优化不同滤波算子傅里叶变换对比 傅里叶变换 傅里叶变换经常被用来分析不同滤波器的频率特性。我们可以使用 2D 离散傅里叶变…