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.rhkb.cn/news/181152.html

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

相关文章

Linux--jdk,tomca,mysql安装、后端项目搭建

一、JDK和Tomcat的安装 1.JDK安装 直接上传到Linux服务器的,上传jdk、tomcat安装包 解压JDK安装包 //解压jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 置环境变量(JAVA_HOME和PATH) vim /etc/profile 在文件末尾添加以下内容: //java environment expo…

python之range 函数

文章目录 range() 函数的语法参数说明range() 返回值使用示例:示例 1:简单使用示例 2:设置起始值、结束值和步长 注意事项: range() 是一个内置的 Python 函数,通常用于创建一个表示一系列数字的不可变的序列&#xff…

JAVA- 面向对象编程(上)

🌈个人主页: Aileen_0v0🔥系列专栏:PYTHON学习系列专栏💫个人格言:"没有罗马,那就自己创造罗马~" 目录 面向对象的特征及理解 new Static Summary: 面向对象的特征及理解 面试题:oop的三大特征是什么? ---> 封装,继承,…

「Verilog学习笔记」异步复位的串联T触发器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 分析 这道题目里我们有两个需要明确的点: 1. 什么是异步复位 2. 什么是串联的T触发器 关于第一个点,可以看我的这篇文章,已经整理好了&a…

【黑马程序员】SSM框架——SpringBoot

文章目录 前言一、SpringBoot 简介1. 入门案例1.1 入门程序① 创建新模块② 选择当前模块需要使用的技术集③ 开发控制类④ 运行自动生成的 Application 类 1.2 创建 SpringBoot 程序的两种方式1.2.1 最简 SpringBoot 程序所包含的基础文件1.2.2 基于 SpringBoot 官网创建项目 …

亚马逊 JDK下载地址

下载地址 https://docs.aws.amazon.com/corretto/选择版本 选择操作系统 比如 windows64 位 可以选择安装包或者解压版本 msi 的为安装版 zip 的为解压版

[动态规划] (七) 路径问题:LCR 166.剑指offer 47. 珠宝的最高价值

[动态规划] (七) 路径问题:LCR 166./剑指offer 47. 珠宝的最高价值 文章目录 [动态规划] (七) 路径问题:LCR 166./剑指offer 47. 珠宝的最高价值题目解析解题思路状态表示状态转移方程初始化和填表顺序 返回值代码实现总结 LCR 166. 珠宝的最高价值 题目…

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

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

GCN火车票识别项目 P1 火车票识别项目介绍 Pytorch LSTM/GCN

从本节开始,我将带大家完成一个深度学习项目:用图卷积神经网络(GCN),实现一个「火车票文字信息提取」的项目,由于火车票上每个节点文字不是等长的,所以还需要添加一个前置的 LSTM 来提取句子特征。 课前说明 1、这是…

invoke方法传参String数组问题——wrong number of arguments

invoke方法传参String数组问题——wrong number of arguments 问题描述一、案例准备二、错误反射调用实例三、正确反射调用实例 问题描述 今天笔者在使用invoke方法的时候,发现报了一个这样一个错:“wrong number of arguments”,在网上冲浪…

【LLM】大语言模型高效微调方案Lora||直击底层逻辑

大白话: DL的本质就是矩阵的乘法,就能实现LLM, 假设两个矩阵都很大,一个mxn,一个nxd的矩阵,m,n,d这几个数字可能几千甚至上万的场景,计算起来代价很大,如果我们可以small 这些数字,缩小到10甚至5这样的s…

51单片机电子钟闹钟温度LCD1602液晶显示设计( proteus仿真+程序+原理图+设计报告+讲解视频)

51单片机电子钟闹钟温度液晶显示设计( proteus仿真程序原理图设计报告讲解视频) 1.主要功能:2.仿真3. 程序代码4. 原理图5. 设计报告6. 设计资料内容清单&&下载链接资料下载链接(可点击): 🌟51单片…

基于.NET、Uni-App开发支持多平台的小程序商城系统 - CoreShop

前言 小程序商城系统是当前备受追捧的开发领域,它可以为用户提供一个更加便捷、流畅、直观的购物体验,无需下载和安装,随时随地轻松使用。今天给大家推荐一个基于.NET、Uni-App开发支持多平台的小程序商城系统(该商城系统完整开源…

【Web】TCP 和 UCP 的含义和区别

文章目录 一、两者含义二、两者区别 一、两者含义 TCP/IP 协议组为传输层指明了两个协议:TCP 和 UDP,他们都是作为应用程序和网络操作的中介物 TCP (传输控制协议):通过三次握手建立可靠的连接,发送端将数据…

yolov8+动物+姿态识别(训练教程+代码)

本文关键词: 关键点检测 关键点估计 姿态估计 YOLO 动物姿态估计是计算机视觉的一个研究领域,是人工智能的一个子领域,专注于自动检测和分析图像或视频片段中动物的姿势和位置。目标是确定一种或多种动物的身体部位(例如头部、四…

基于单片机的衣物消毒清洗机系统设计

收藏和点赞,您的关注是我创作的动力 文章目录 概要 一、系统总体设计2.2 功能分析2.3 系统框架设计 二、硬件电路设计3.1 电源模块的设计 三、 软件设计4.1 系统整体流程4.4 软件整体流程实物图 四、 结论五、 文章目录 概要 基于单片机的衣物消毒清洗机可以应用在…

PMIC、电源管理MAX77646ANP、MAX77647AANP、MAX77675AEWE、MAX77847AEWL DC-DC 开关稳压器

一、MAX77646ANP、MAX77647AANP 低IQ SIMO PMIC支持原电池应用的1.8V工作电压 MAX77646/MAX77647为尺寸和效率至关重要的低功耗应用提供电源解决方案。该IC集成单电感多输出(SIMO)降压/升压稳压器,可通过单个电感提供三个可独立编程的电源轨,尽可能地减…

Canvas 实现进度条展示统计数据示例

canvas可以画柱状图&#xff0c;如下就是一个例子&#xff0c;主要用到了lineWidth&#xff0c;beginPath&#xff0c;lineCap等知识点。 效果图 源代码 <!DOCTYPE Html> <html> <head><title>Line Chart Demo</title><meta http-equiv&quo…

前端框架Vue学习 ——(三)Vue生命周期

生命周期&#xff1a;指一个对象从创建到销毁的整个过程。 生命周期的八个阶段&#xff1a;每触发一个生命周期事件&#xff0c;会自动执行一个生命周期方法&#xff08;钩子&#xff09; mounted&#xff1a;挂载完成&#xff0c;Vue 初始化成功&#xff0c;HTML 页面渲染成功…

leetcode-887-鸡蛋掉落(包含最大值最小化,最小值最大化的二分优化+滚动数组的原理)

这里写目录标题 题意解题KNN复杂度DP解法思想&#xff08;超时&#xff09;上述方法的优化 &#xff08;最大值最小化二分优化&#xff09;完整代码 逆向思维的DP&#xff08;ksqrt(n)复杂度&#xff09;代码空间优化&#xff08;滚动数组&#xff09;代码 题意 链接&#xff…