ADO实战指南

这里写目录标题

  • 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.hqwc.cn/news/160139.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

回归预测 | Matlab实现MPA-BP海洋捕食者算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现MPA-BP海洋捕食者算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现MPA-BP海洋捕食者算法优化BP神经网络多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现MPA-BP海洋捕食者算法优化BP神经网络多变量回归预测&…

产品经理入门学习(三):产品解决方案

参考引用 黑马-产品经理入门基础课程 1. 需求分析 1.1 需求分析的目的 1.2 需求分析的方法 案例分析 福特公司的创始人亨利福特说:如果我当年去问顾客他们想要什么,他们肯定会告诉我:一匹更快的马 1.3 需求分析的实际应用 人性七宗罪&#…

“01”滴答“摩尔斯电码”加密解密单个字符

“01”替换滴嗒“.-”“摩尔斯电码”字符,加密解密键盘输入的单个字符。 (本笔记适合熟悉循环和列表的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》&a…

【LeetCode刷题-队列】--933.最近的请求次数

933.最近的请求次数 class RecentCounter {Queue<Integer> queue new LinkedList<>();public RecentCounter() {}public int ping(int t) {queue.offer(t);while(t - queue.peek() > 3000){queue.poll();}return queue.size();} }/*** Your RecentCounter obje…

STM32HAL-完全解耦面向对象思维的架构-时间轮片法使用(timeslice)

目录 概述 一、开发环境 二、STM32CubeMx配置 三、编码 四、运行结果 五、代码解释 六、总结 概述 timeslice是一个时间片轮询框架&#xff0c;完全解耦的时间片轮询框架&#xff0c;非常适合裸机单片机引用。接下来将该框架移植到stm32单片机运行&#xff0c;单片机…

QT 实现解密m3u8文件

文章目录 概要如何解密M3U8文件呢实现思路和代码序列图网络请求解密 结论 概要 视频文件很多已M3U8文件格式来提供&#xff0c;先复习下什么是M3U8文件&#xff01;用QT的 mutimedia框架来播放视频时&#xff0c;有的视频加载慢&#xff0c;有的视频加载快&#xff0c;为啥&am…

回归预测 | Matlab实现POA-CNN-SVM鹈鹕算法优化卷积神经网络-支持向量机多变量回归预测

Matlab实现POA-CNN-SVM鹈鹕算法优化卷积神经网络-支持向量机多变量回归预测 目录 Matlab实现POA-CNN-SVM鹈鹕算法优化卷积神经网络-支持向量机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.POA-CNN-SVM鹈鹕算法优化卷积神经网络-支持向量机的多变量回归…

Rust语言和curl库编写程序

这是一个使用Rust语言和curl库编写的爬虫程序&#xff0c;用于爬取视频。 use std::env; use std::net::TcpStream; use std::io::{BufReader, BufWriter}; ​ fn main() {// 获取命令行参数let args: Vec<String> env::args().collect();let proxy_host args[1].clon…

[双指针] (三) LeetCode LCR 179. 查找总价格为目标值的两个商品 和 15. 三数之和

[双指针] (三) LeetCode LCR 179. 查找总价格为目标值的两个商品 和 15. 三数之和 文章目录 [双指针] (三) LeetCode LCR 179. 查找总价格为目标值的两个商品 和 15. 三数之和查找总价格为目标值的两个商品题目分析解题思路代码实现总结 三数之和题目分析解题思路代码实现总结 …

陕西某小型水库雨水情测报及大坝安全监测项目案例

项目背景 根据《陕西省小型病险水库除险加固项目管理办法》、《陕西省小型水库雨水情测报和大坝安全监测设施建设与运行管理办法》的要求&#xff0c;为保障水库安全运行&#xff0c;对全省小型病险水库除险加固&#xff0c;建设完善雨水情测报、监测预警、防汛道路、通讯设备、…

android studio 字节码查看工具jclasslib bytecode viewer

jclasslib bytecode viewer 是一款非常好用的.class文件查看工具&#xff1b; jclasslib bytecode editor is a tool that visualizes all aspects of compiled Java class files and the contained bytecode. Many aspects of class files can be edited in the UI. In addit…

YOLOv8在前代的基础上有哪些改进?

YOLO系列又双叒更新&#xff01; 只能说&#xff0c;YOLO系列发展地真快&#xff0c;已经有点跟不上了&#xff01; YOLOv1-YOLOv8系列回顾 YOLOv1&#xff1a;2015年Joseph Redmon和Ali Farhadi等人&#xff08;华盛顿大学&#xff09; YOLOv2&#xff1a;2016年Joseph Re…