JDBC底层原理

1、什么是JBDC?

JBDC(Java Database Connectivity),JDBC只是一套规范接口,真正实现的是各数据库厂商驱动。

 

2、JBDC的底层的主要接口对象是什么?

JBDC的底层主要是三个接口对象,Connection、Statement、ResultSet。Connection用于建立与数据库的连接,Statement用于向数据库发送sql语句,ResultSet用于封装sql查询语句的结果。

3、JDBC操作数据库的步骤有哪些?

1、注册驱动

使用 Class.forName() 方法加载数据库驱动程序类。

通过 DriverManager.registerDriver() 方法注册数据库驱动程序。


2、获取连接对象

JDBC的底层其实是使用Socket进行连接数据库的。注册完驱动程序后,可以通过 DriverManager.getConnection() 方法建立数据库连接。


3、执行SQL语句,返回执行结果

通过获取Statement实例执行SQL语句。


4、处理执行结果

最后返回的结果集是ResultSet。


5、释放资源

//  Worker method called by the public getConnection() methods.
private static Connection getConnection(
    //该方法是一个私有静态方法,用于获取数据库连接。方法接受三个参数:url 表示数据库连接 URL,info 表示连接所需的属性信息,caller 表示调用者的类。
        String url, java.util.Properties info, Class<?> caller) throws SQLException {
    //获取调用者的类加载器:根据传入的 caller 类,获取对应的类加载器 callerCL。如果 caller 不为 null,则通过 caller.getClassLoader() 获取其类加载器;如果 caller 为 null,则将 callerCL 设为 null。
  ClassLoader callerCL = caller != null ? caller.getClassLoader() : null;
  SQLException reason = null;
  //遍历注册的数据库驱动
  for(DriverInfo aDriver : registeredDrivers) {  
           try { 
                //获取连接
                Connection con = aDriver.driver.connect(url, info);
               //判断连接是否成功:如果连接对象 con 不为 null,表示连接成功,打印日志信息,并返回该连接对象。
                if (con != null) {
                    // Success!
                    println("getConnection returning " + aDriver.driver.getClass().getName());
                    return (con);
                }
               //当遍历完所有注册的驱动程序后,如果没有成功获取到连接,即所有驱动程序的 connect 方法都返回 null,则会抛出 SQLException 异常。
            } catch (SQLException ex) {
                if (reason == null) {
                    reason = ex;
                 }
            }  
    }
}

1、DriverManager(类):根据不同的数据库管理相应的JDBC驱动


2、Connection(接口):负责连接数据库


3、Statement(接口): 向数据库发送sql语句


4、ResultSet(接口):sql查询语句的执行结果会封装在ResultSet中

5、PreparedStatement:Statement 的子接口,负责发送SQL语句,但是优于Statement

4、Statement最为重要的方法是

(1)int executeUpdate(String sql):执行更新操作,即执行insert、update、delete语句,其实这个方法也可以执行create table、alter table,以及drop table等语句,但我们很少会使用JDBC来执行这些语句;

(2)ResultSet executeQuery(String sql):执行查询操作,执行查询操作会返回ResultSet,即结果集。

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

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

相关文章

C#实现二分查找算法

C#实现二分查找算法 以下是一个使用 C# 实现的二分查找算法示例&#xff1a; using System;class Program {static int BinarySearch(int[] arr, int target){int low 0;int high arr.Length - 1;while (low < high){int mid (low high) / 2;// 如果目标值等于中间元素…

javaEE6(网站第3章-jsp练习中三个例题动手做一遍;课后题2(1),(2))

两个数求和 用javascript实现。 输入、处理、输出用同一个页面(自己处理自己)。 输入1.jsp&#xff0c;处理和输出2.jsp。 &#xff08;4&#xff09;输入1.jsp&#xff0c;处理2.jsp&#xff0c;处理完转回1.jsp显示结果。 &#xff08;5&#xff09;输入1.jsp&#xff0c;处…

Python: 如何绘制核密度散点图和箱线图?

01 数据样式 这是数据样式&#xff1a; 要求&#xff08;我就懒得再复述一遍了&#xff0c;直接贴图&#xff09;&#xff1a; Note&#xff1a;数据中存在无效值NA&#xff08;包括后续的DEM&#xff09;&#xff0c;需要注意 02 提取DEM 这里我就使用gdal去提取一下DEM列…

Mixamo动画素材导入UE5的最简单方法

一、Mixamo素材 官网&#xff1a;https://www.mixamo.com/ Mixamo是Adobe公司出品的免费动画库&#xff0c;可商用。软件分为characters(角色&#xff09;、Animations&#xff08;动画)两个部分。 二、辅助工具MIXAMO CONVERTER 官网&#xff1a;https://terribilisstudio…

海外媒体发稿:新闻媒体发稿7种方法-华媒舍

新闻报道媒体发稿营销推广是当代企业形象宣传的重要手段之一&#xff0c;合理推广可以提升品牌知名度、吸引住潜在用户。在这篇文章中&#xff0c;我们将要详细介绍七种科学合理的形式&#xff0c;帮助你完全把握新闻报道媒体发稿营销推广。 1.明确目标群体明确目标群体是实现推…

阅读欣赏推荐之(三)——纪录片《地平线系列:大数据时代》

现今的我们正处于一个时代转型中&#xff0c;因为科技的发展与互联网的日益强大&#xff0c;数据将逐步取代旧事物&#xff0c;创造出新事物。当今社会以一种前所未有的方式&#xff0c;通过对海量数据进行分析&#xff0c;获得巨大价值的产品和服务&#xff0c;或深刻的洞见。…

SSM整合项目(显示+添加+修改家居)

文章目录 1.显示全部家居1.需求分析2.思路分析3.编写Service层1.FurnService.java 添加方法2.FurnServiceImpl.java 实现方法3.单元测试 4.编写Controller层1.FurnController.java 添加方法2.postman完成测试 5.前端展示家居1.HomeView.vue 修改el-table使其prop跟Furn的属性名…

PLC远程故障诊断

随着工业自动化水平的不断提升&#xff0c;可编程逻辑控制器&#xff08;PLC&#xff09;在生产线控制、设备自动化等领域发挥着越来越重要的作用。然而&#xff0c;PLC在运行过程中难免会出现故障&#xff0c;影响生产线的稳定运行。因此&#xff0c;如何迅速、准确地诊断并解…

有c语言基础,如何快速学会C++核心知识?

有c语言基础&#xff0c;如何快速学会C核心知识&#xff1f; 在开始前我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些 电气工程师学习方法和资料&#xff0c;让我不断提…

Python deepFM推荐系统,推荐算法,deepFM源码实战,deepFM代码模板

1.DeepFM介绍&#xff1a; DeepFM&#xff08;Deep Factorization Machine&#xff09;是一种结合了深度学习和因子分解机的推荐模型。它在CTR&#xff08;点击率&#xff09;预测任务中表现出色&#xff0c;并能够有效地处理稀疏特征。 DeepFM模型由两个部分组成&#xff1a;因…

截断表

oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 截断表 事务处理本身是保护数据完整性的一个手段&#xff0c;但是在使用事务处理的过程之中需要注意一点 在用户更新数据后还未进行事务提交时&#xff0c;如果发生了 DDL…

1688 API接口在数据分析与营销决策中的应用探索

在当今数字化快速发展的时代&#xff0c;数据分析与营销决策已成为企业运营中不可或缺的重要环节。而1688 API接口&#xff0c;作为阿里巴巴旗下的一个强大的数据交互平台&#xff0c;为企业在数据分析与营销决策方面提供了丰富的数据源和灵活的操作方式。本文将深入探讨1688 A…

https代理相对socks5代理有什么优势?

随着互联网的快速发展&#xff0c;代理服务已成为许多人在访问敏感或地理位置受限的网站时所依赖的工具。其中&#xff0c;HTTPS代理和SOCKS5代理是两种最常用的代理服务类型。本文将探讨HTTPS代理相对SOCKS5代理的优势。 1、安全性 HTTPS代理使用SSL/TLS协议对客户端和代理服…

RabbitMQ - 01 - 快速入门

目录 界面总览 创建队列 选择默认交换机 发布消息 查看消息 通过实现以下目标快速入门 界面总览 RabbitMQ Management 界面总览 通道: 传输消息的通道 路由: 接收和路由(分发)消息 队列: 存储消息 消息队列的流程: 生产者将消息发送给路由,路由分发消息到各个队列存储…

Android Kotlin知识汇总(四)Kotlin 协程实践

Kotlin的重要优势及特点之——结构化并发 Kotlin 协程是一种并发设计模式&#xff0c;可以在 Android 平台上让异步代码像阻塞代码一样易于使用。协程可大幅简化后台任务管理&#xff0c;例如网络调用、本地数据访问等任务的管理。 简单来说&#xff0c;协程就是一种轻量级的非…

Windows从0到1部署项目

文章目录 1.创建虚拟机2.文件的传输--共享文件夹共享文件夹的访问 3.安装jdk&#xff0c;Tomcat3.1jdk的安装与配置配置环境变量 3.2Tomcat的安装与配置 4.安装mysql数据库5.下载nginx6.虚拟域名 因为Windows项目部署有很多操作都是博主之前做过的了&#xff0c;所及就只放了博…

何恺明教授在MIT的第一课,双语字幕1080P看resnet作者亲自讲解resnet

这几天AI圈最火的话题莫过于何恺明大神在MIT的首场教学了 何恺明&#xff08;Kaiming He&#xff09;教授于3月7日走上讲台&#xff0c;完成了他在麻省理工学院的首场教学&#xff0c;这标志着他教学生涯中的一个重要时刻。作为麻省理工学院电气工程与计算机科学系&#xff08…

批处理自动找木马文件路径

背景&#xff1a;如果主机不多&#xff0c;应急有通报的木马病毒样本可能存在的路径&#xff0c;一个个翻就太累。 直接整成一个文档&#xff0c;如果存在那个可以着重主机了。当然木马查杀记录也不能忘记看下。 1. 双击打开 cmd.bat 2. 输入list.bat 3. 文件存在输出路径…

SQLiteC/C++接口详细介绍之sqlite3类(四)

上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;三&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;五&#xff09;&#xff08;暂未发表&#xff09; 编写不易&#xff0c;有用的朋友点个赞或加粉一下万分感谢&#xff01;300…

three.js 按键W前进、S退后、A左转、D右转运动

效果&#xff1a;W 键 前进&#xff1b;S 键后退&#xff1b;A 键左转&#xff1b;D 键右转&#xff1b;使用了 tween.js 动画库&#xff1b; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left">&…