ADO实战指南

news2024/11/25 3:02:12

这里写目录标题

  • ADO概念
  • ADO主要对象
    • 对象间的相互联系
    • 对象模型示意图
  • 关键代码
  • 关于代码中的一些问题
    • 设置字符串连接对象
    • OLE DB是什么?与ADO的关系是什么?
    • 执行命令时,使用连接对象来访问数据库。
    • close与nothing做了什么事?
    • 连接对象为什么也要关闭?
    • 为什么command不需要关闭?
  • Java中用于访问和操作数据源对象的类和框架

ADO概念

    ADO(ActiveX Data Objects)是一组用于访问和处理数据的组件和对象模型。它是Microsoft提供的一种数据访问技术,用于在应用程序中连接到数据库、执行查询、检索和更新数据等操作。
在这里插入图片描述

ADO主要对象

  1. Connection对象:用于建立与数据源的连接,并管理连接的打开和关闭。

  2. Command对象:用于执行SQL语句或存储过程,并处理查询结果。

  3. Recordset对象:用于表示从数据源中检索的结果集,可以对结果集进行浏览、修改和更新。

    详细内容可参考我的另一篇博客: 数据库访问和组件技术相关概念

对象间的相互联系

  • Command对象和Recordset对象依赖于Connection对象的连接;
  • Command对象结合SQL命令可以取代Recordset对象,但远没有Recordset对象灵活、实用
  • Recordset对象它只能实现数据表内记录集操作.

在这里插入图片描述

对象模型示意图

    ADO提供了一系列的类和对象来完成各种操作。ADO对象模型定义了可编程的分层的对象集合,它支持部件对象模型(COM)和OLEDB数据源,与其它的数据访问对象相比,包含在ADO的对象少得多,也更加容易使用。

在这里插入图片描述

关键代码

    使用 ADO 对象模型时,先创建一个连接对象,然后使用该连接对象创建命令对象或记录集对象,在命令或记录集对象上执行相应的操作,最后关闭连接对象。通过 ADO 对象模型可以实现对数据源的查询、插入、更新和删除等操作。

创建连接对象

Dim conn As New ADODB.Connection
conn.ConnectionString = "Provider=SQLOLEDB;Data Source=myServerAddress;Initial Catalog=myDatabase;User ID=sa;Password=123456;"
conn.Open

执行查询语句

Dim cmd As New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandText = "SELECT * FROM Students"
Dim rs As ADODB.Recordset
Set rs = cmd.Execute

command的对象属性
在这里插入图片描述

关闭连接,释放资源

rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing

关于代码中的一些问题

设置字符串连接对象

要连接到SQL Server数据库

connStr = "Provider=MSOLEDBSQL;Data Source=.;Initial Catalog=student;User ID=sa;Password=123456;"

连接到一个Access数据库,使用Microsoft.Jet.OLEDB.4.0

connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\training program\student.mdb"

    Provider=MSOLEDBSQL 和 Provider=Microsoft.Jet.OLEDB.4.0 都是用于指定数据库引擎的连接字符串中的 Provider 参数的值。它们对应的是不同的 OLE DB 提供程序。

    Provider=MSOLEDBSQL,也称为 Microsoft OLE DB Driver for SQL Server,是用于与 Microsoft SQL Server 数据库进行通信的 OLE DB 提供程序。它是针对 SQL Server 2012 及更高版本的新型 OLE DB 提供程序。它具有更好的性能和功能支持,并与最新的 SQL Server 功能和特性保持兼容。这个提供程序适用于使用 SQL Server 2012、2014、2016、2017、2019 或 Azure SQL Database 的应用程序。

    Provider=Microsoft.Jet.OLEDB.4.0 是用于访问 Microsoft Access 数据库文件(.mdb 和 .accdb 文件)的 OLE DB 提供程序。它是旧版的 OLE DB 提供程序,适用于较旧的版本的 Microsoft Access(Access 2003 及之前的版本)。

OLE DB是什么?与ADO的关系是什么?

    上面提到的OLE DB 是一种通用的数据访问技术,是基于COM接口来进行数据库的访问工作,它为不同种类的数据源提供了统一接口,比如在与 SQL Server 进行交互时,OLE DB 可以被用作中间层,提供与 SQL Server 数据库的连接和数据操作。它有较高的访问速度和访问效率,但OLE DB属于底层接口,技术比较复杂,对设计人员要求较高。常见的数据库访问技术还有ODBC(Open Data Base Connectivity)、MFC ODBC(Microsoft Foundation Classes ODBC)、DAO(Data Access Object)、ADO (ActiveX Data Object)等。
在这里插入图片描述

    其中ODBC简单易用,但访问数据库速度较慢,且ODBC的使用需要配置数据源,同时依赖于很多相应部件的支持,不利于数据库的移植。MFC ODBC的本质是ODBC,只是对ODBC API进行了封装,简化ODBC数据库开发的程序编制。DAO基于Microsoft Jet数据库引擎来访问数据库,它克服了ODBC的一些缺陷,但它仍存在着MFC DAO与Jet数据库引擎之间的兼容问题。

    ADO技术是建立在OLE DB底层技术之上的高级编程接口,它对OLE DB接口进行了封装,在继承OLE DB优点的同时很大程度上简化了访问操作。使用ADO不仅与使用ODBC一样简单、方便,而且ADO具有更为强大的数据处理能力,可以处理不同类型的数据源。

     使用ADO进行数据库的访问需要用到上面提到的ADO的对象模型。

执行命令时,使用连接对象来访问数据库。

cmd.ActiveConnection = cn

    这句代码 表示将命令对象 cmd 的 ActiveConnection 属性设置为指向已经建立的数据库连接对象 cn。这意味着执行命令时,将使用该连接对象来访问数据库。

    在 ADO 中,连接对象和命令对象是不同的对象类型,但是命令对象需要与连接对象关联才能够执行数据库操作。因此,在创建命令对象后,需要设置其 ActiveConnection 属性为一个有效的连接对象,即可使用该命令对象执行 SQL 语句并返回记录集。

close与nothing做了什么事?

    以recordset为例来看一下

    rs.Close() 是用于关闭记录集对象(ADODB.Recordset)的方法,它会释放记录集对象所占用的系统资源并将其从内存中清除,具体执行:

    释放记录集缓存:当调用 rs.Close() 方法时,ADO 会释放记录集缓存,这样可以释放所占用的系统资源,并将缓存中的数据清除。
在这里插入图片描述

    关闭相关的驱动程序和网络连接:在打开记录集时,ADO 使用 OLE DB 驱动程序建立与数据源之间的通信。通过调用 rs.Close() 方法,ADO 会关闭与数据源的网络连接,并释放相关的驱动程序资源。

    清除记录集对象本身:rs.Close() 方法会将记录集对象从内存中清除,以便给其他对象或程序腾出空间。

    而 rs = Nothing 则是将记录集对象变量 rs 指向 Nothing,这样做的目的是显式地释放对象并通知垃圾回收器进行内存回收,它可以帮助进一步释放资源和垃圾回收。通过将对象变量设置为 Nothing,可以确保对象所占用的内存空间被及时释放,从而避免内存泄漏和资源占用过高。

    在某些情况下,尤其是在长时间运行或在循环中使用记录集对象时,如果不将对象变量设置为 Nothing,可能会导致内存泄漏或资源占用过高。通过将对象变量设置为 Nothing,可以确保该对象的内存资源被及时回收和释放,从而提高应用程序的性能和资源利用率。

    因此,在关闭记录集后,将记录集对象变量 rs 设置为 Nothing 是一种良好的编程习惯,以确保资源的彻底释放和内存的有效管理。

    可以将记录集对象理解为在内存中的表格,它占用系统资源。记录集对象保存了从数据库中获取的数据,并提供了对这些数据进行操作和访问的方法。

连接对象为什么也要关闭?

    连接对象(ADODB.Connection)是用于与数据库建立连接并执行数据库操作的对象。连接对象不仅包含连接字符串(连接语句),还维护了与数据库服务器之间的通信和状态信息。连接对象需要在内存中保存这些信息,并且在连接期间维持与数据库的网络连接。因此,连接对象也会占用系统资源。

    关闭连接是为了释放连接所占用的系统资源,并通知数据库服务器断开与客户端的连接。数据库服务器的连接数是有限的,如果不及时关闭连接,可能会导致连接池的资源耗尽,从而无法建立新的连接。

    同时,关闭连接也是为了避免资源浪费。在某些情况下,数据库服务器会限制每个用户或每个应用程序可以打开的最大连接数。如果不关闭连接,那么连接将一直保持打开状态,即使不再使用。这样会占用宝贵的数据库资源,影响其他用户或应用程序的连接能力。

    因此,在使用完毕后,关闭连接可以释放系统资源,避免连接数超限,以及优化数据库资源的使用。当然,关闭连接并不意味着关闭数据库的物理连接,而是断开客户端和数据库服务器之间的逻辑连接。

为什么command不需要关闭?

    对于命令对象.Command),在使用完毕后通常不需要显式地调用 Close 方法进行关闭。命令对象本身并不占用像记录集(Recordset)或连接对象(Connection)那样的系统资源。

    命令对象主要用于执行 SQL 语句或存储过程,并返回相应的记录集对象。当命令对象执行完成后,可以通过 Set rs = cmd.Execute 方法返回的记录集对象来获取结果集。

    关闭命令对象并不是必须的,因为它不会持有数据库连接或其他重要资源。一般情况下,最重要的是关闭记录集对象和连接对象,以释放相关资源。

    请注意,即使不显式关闭命令对象,它仍然会被垃圾回收器在合适的时机自动释放。但是,如果您在使用命令对象后确实想要立即释放它,可以将其设置为 Nothing,例如: Set cmd = Nothing。这样可以确保命令对象在内存中被完全清除。

    总之,在大多数情况下,只需关闭和释放记录集对象和连接对象,而不需要显式关闭命令对象。

Java中用于访问和操作数据源对象的类和框架

    JDBC(Java Database Connectivity):JDBC 是 Java 提供的标准 API,用于与关系型数据库进行交互。它提供了一组接口和类,用于连接数据库、执行 SQL 命令、处理结果集等操作。通过 JDBC,开发人员可以使用标准的 Java 代码来访问不同的数据库。
在这里插入图片描述

    JPA(Java Persistence API):JPA 是一种 Java 规范,用于对象关系映射(ORM)和持久化。它定义了一套 API,使得开发人员可以将 Java 对象映射到数据库表,并通过 API 对这些对象进行操作。JPA 可以通过各种 ORM 框架实现,如 Hibernate、EclipseLink 等。

    Spring JDBC:Spring JDBC 是 Spring 框架提供的模块,用于简化 JDBC 的使用。它提供了一组辅助类和模板,用于简化数据库连接、SQL 执行和结果集处理等操作。通过 Spring JDBC,开发人员可以更方便地使用 JDBC 进行数据库访问。

    这些对象和框架提供了在 Java 中访问和操作数据源的功能,并与 ADO 的目标相似。虽然它们不是直接的 ADO 对象,但它们可以实现类似的功能并提供相似的接口和方法。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Splunk 创建特色 dashboard 报表

1: 背景: 对原有的dashboard 进行增加点东西,特别是文字部分: 比如: 增加:“this is a guidline for how to use performance". 这段话,就不能写在title, 那样,这段文字,会出现在dashboard 的PDF 文件的分割线的上面,不符合要求。 2: 解决问题: 正确的做法是…

torch安装

https://download.pytorch.org/whl/torch_stable.html cp36 是python3.6的意思 python3.6对应torch1.8

外卖系统内部机理揭秘:了解更多

外卖系统是一个涉及多个环节和技术的复杂系统,包括前端用户交互、后端数据处理、订单管理和配送等多个方面。 技术架构概述: 前端应用程序: 包括用户界面和餐厅界面,常见的技术包括 HTML、CSS、JavaScript 和前端框架&#xff…

【入门Flink】- 06Flink作业提交流程【待完善】

Standalone 会话模式作业提交流程 代码生成任务的过程: 逻辑流图(StreamGraph)→ 作业图(JobGraph)→ 执行图(ExecutionGraph)→物理图(Physical Graph)。 作业图算子链…

【漏洞复现】Aapache_Tomcat_AJP协议_文件包含漏洞(CVE-2020-1938)

感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 说明内容漏洞编号CVE-2020-1938漏洞名称Aapache_Tomcat_AJP文件包含漏洞漏洞评级高…

el-select 搜索无选项时 请求接口添加输入的值

el-select 搜索无选项时 请求接口添加输入的值 <template><div class"flex"><el-select class"w250" v-model"state.brand.id" placeholder"请选择" clearable filterable :filter-method"handleQu…

关闭Dell xps 系列笔记本触控屏

【电脑】->【管理】->【设备管理器】 右键 禁用选择即可

怎么测量直线模组的精度?

直线模组是一款比较多变的一种产品&#xff0c;适合多种行业&#xff0c;同时它也适合比较多的环境&#xff0c;是一种比较全面的直线运动的装置。直线模组是非常精密的自动化机械设备&#xff0c;在实践中&#xff0c;应该要严格把握具体精度&#xff0c;并且在必要的时候&…

CDN加速是否对SEO有正面影响

当谈到网站性能优化和SEO&#xff08;搜索引擎优化&#xff09;时&#xff0c;CDN&#xff08;内容分发网络&#xff09;加速无疑是一个重要的话题。CDN是一种分布式网络基础设施&#xff0c;它通过将网站内容分发到全球各地的边缘服务器&#xff0c;从而加速内容的传递。在这篇…

apb介绍

https://www.cnblogs.com/xianyuIC/p/17279209.html***带testbench https://zhuanlan.zhihu.com/p/623829190?utm_id0 https://zhuanlan.zhihu.com/p/607964532带testbench by四人独行 https://blog.csdn.net/weixin_40377195/article/details/124899571 APB是最简单的AMBA总…

链表详讲(附代码)

1.什么是链表 链表是一种非常常见的数据结构&#xff0c;在程序设计中经常被使用。它由一系列节点组成&#xff0c;每个节点都有用来存放数据的数据区以及存放下一个节点地址指针的地址区。跟顺序表不同的是&#xff0c;链表的节点之间的空间并非是连续的&#xff0c;依靠地址区…

最新waymo数据集 百度网盘

最新waymo数据集介绍 waymo数据集是有史以来最大&#xff0c;最多样化的自动驾驶数据集&#xff0c;包含 传感器数据边界框数据2D视频全景分割标签关键点标签3D语义分割标签2D和3D边界框的关联 是该领域质量最高、规模最大的数据集之一&#xff0c;用于帮助研究界在机器感知…

【Orangepi Zero2 全志H616】开发板资料(刷机、系统烧录)及环境搭建

一、资料文档 二、MobaXterm远程连接工具 三、修改登录密码 四、修改内核日志等级 五、配置网络 六、SSH 访问 OrangePi ZERO 2 七、配置 vim 八、基于官方外设开发SDK 一、资料文档 官网资料下载 GitHub&#xff1a;新版本的 orangepi-build 源码 环境搭建&#xff1a;新手配…

IP协议汇总

IP协议 1.基本概念 IP协议全称为“网际互连协议&#xff08;Internet Protocol&#xff09;” ,IP协议是TCP/IP体系中的网络层协议。 总的来说&#xff0c;IP协议的最重要功能是提供了一种标准化的方式来路由和传输数据包&#xff0c;以实现全球互联网上的通信。 &#xff…

YOLOv7独家原创改进:新颖自研设计的BSAM注意力,基于CBAM升级

💡💡💡本文全网首发独家改进:提出新颖的注意力BSAM(BiLevel Spatial Attention Module),创新度极佳,适合科研创新,效果秒杀CBAM,Channel Attention+Spartial Attention升级为新颖的 BiLevel Attention+Spartial Attention 1)作为注意力BSAM使用; 推荐指数:…

数据结构构之顺序表

1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线…

【halcon踩坑】区域为空但个数是1

背景 我在做瑕疵检测的时候&#xff0c;通过计算瑕疵区域的个数&#xff08;count_obj&#xff08;&#xff09;&#xff09;是否为0&#xff0c;来判断是否有瑕疵&#xff0c;如果不为0&#xff0c;那边我就会在图片上标记这个瑕疵的位置&#xff01; 但是有一次我发现明明没…

山西电力市场日前价格预测【2023-11-05】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-05&#xff09;山西电力市场全天平均日前电价为192.40元/MWh。其中&#xff0c;最高日前电价为374.84元/MWh&#xff0c;预计出现在04:15。最低日前电价为0.00元/MWh&#xff0c;预计出…

史上最详细的八大排序讲解(错过绝对后悔系列)建议先收藏再观看!—— 数据结构

&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️ &#x1f4a5;个人主页&#xff1a;&#x1f525;&#x1f525;&#x1f525;大魔王&#x1f525;&#x1f525;&#x1f525; &#x1f4a5;代码仓库&#xff1a;&#x1f525;&#x1f525;魔…

DB-GPT介绍

DB-GPT介绍 引言DB-GPT项目简介DB-GPT架构关键特性私域问答&数据处理多数据源&可视化自动化微调Multi-Agents&Plugins多模型支持与管理隐私安全支持数据源 子模块DB-GPT-Hub微调参考文献 引言 随着数据量的不断增长和数据分析的需求日益增多&#xff0c;将自然语言…