JDBC的原理及应用

2023-11-07

一、JDBC作用
JDBC(Java DataBase Connectivity)就是Java数据库连接,简单说就是封装了java语言操作不同据库(例如:mysql,oracle、sqlServer等数据库)的接口,各个数据库厂商实现这个接口。因此java语言可以通过JDBC操作各个数据库。

在这里插入图片描述

二、JDBC的工作原理

SUN提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准
各个数据库厂商会提供一套API用来访问自己公司的数据库服务器,且API遵循SUN的规范

JDBC是里面封装着操作各数据库的接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。

 三、JDBC API:
1.DriverManager类 作用:管理各种不同的JDBC驱动
2.Connection接口:负责连接数据库并担任传送数据的任务
3.Statement接口:由 Connection 产生、负责发送执行SQL语句
4.ResultSet接口:负责保存Statement执行后所产生的查询结果

四、JDBC 驱动

由数据库厂商提供

作用:负责连接各种不同的数据库

五、API与驱动作用:

与数据库建立连接、发送 操作数据库的语句并处理结果

六、使用JDBC连接数据库的步骤 

1、加载一个Driver驱动
  调用方法java.lang.Class.forName()加载驱动:
  以mysql为例:
  Class.forName(“com.mysql.JDBC.Driver”);//MySql的8.X版本以下的JDBC驱动程序
  Class.forName(“com.mysql.cj.JDBC.Driver”);//MySql的8.X版本以上的JDBC驱动程序
  其他数据库驱动:
  oracle.JDBC.driver.OracleDriver//Oracle的JDBC驱动程序
  com.microsoft.JDBC.sqlserver.SQLServerDriver//SQL Server的JDBC驱动程序
  com.ibm.db2.JDBC.app.DB2Driver //DB2的JDBC驱动程序

2、创建连接(需要数据库用户名、密码、url)
  Connection conn=null;
  String url=“jdbc:oracle:thin:@localhost:1521:orcl”;
  String user=“scott";
  String password=“tiger";
  conn = DriverManager.getConnection(url, user, password);

3、创建SQL命令执行器Statement
  Statement对象用于将 SQL 语句发送到数据库中,或者理解为执行sql语句。
  有三种 Statement对象:
  Statement:用于执行不带参数的简单SQL语句;
  PreparedStatement(从 Statement 继承):用于执行带或不带参数的预编译SQL语句;(推荐使用)
  CallableStatement(从PreparedStatement 继承):用于执行数据库存储过程的调用。

4、通过Statement发送SQL命令并处理SQL结果
  ResultSet对象是executeQuery()方法的返回值,它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。
  ResultSet里的数据一行一行排列,每行有多个字段,且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。
  ResultSet对象自动维护指向当前数据行的游标。每调用一次next()方法,游标向下移动一行。
  初始状态下记录指针指向第一条记录的前面,通过next()方法指向第一条记录。循环完毕后指向最后一条记录的后面。
  
5、关闭数据库资源
  用户不必关闭ResultSet。当它的 Statement 关闭、重新执行或用于从多结果序列中获取下一个结果时,该ResultSet将被自动关闭。
  注意:要按先ResultSet结果集,后Statement,最后Connection的顺序关闭资源,因为Statement和ResultSet是需要连接是才可以使用的,所以在使用结束之后有可能其他的Statement还需要连接,所以不能先关闭Connection。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDBC的原理及应用 的相关文章

  • Java Swing BoxLayout 忽略 AlignmentX

    在下面的代码中 通过调用setAlignmentX with Component LEFT ALIGNMENT我希望在居中的滑块上获得左对齐的标签 由于某种原因 标签也居中 似乎与传递给 setAlignmentX 的值无关 我必须向 se
  • 不支持的字段:将瞬间格式化为日期 ISO 时的年份[重复]

    这个问题在这里已经有答案了 我正在尝试将 Instant 格式化为 ldap 日期 ISO8601 但在 f format Instant now 处失败 String input 20161012235959 0Z DateTimeFor
  • 将处理项目移至 Eclipse

    我已经在处理项目上工作了一段时间 现在想将其移至 Eclipse 中 我已经在 Eclipse 环境中安装了 Proclipse 我有很多扩展名为 pde 的文件 然而 Proclipse 文件都以 java 结尾 所有 pde 文件都存在
  • JAVA 中的 Composer 相当于什么? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我目前从 PHP 转向 java 有没有类似的工具composer https getcomposer org 在 PHP 中用于 JAV
  • 是否可以使用 Java 读写 Parquet,而不依赖 Hadoop 和 HDFS?

    我一直在寻找这个问题的解决方案 在我看来 如果不引入对 HDFS 和 Hadoop 的依赖 就无法在 Java 程序中嵌入读写 Parquet 格式 它是否正确 我想在 Hadoop 集群之外的客户端计算机上进行读写 我开始对 Apache
  • java 中的梵文 i18n

    我正在尝试使用来自互联网的示例 ttf 文件在 java 中使用 i18n 进行梵文 印地文 我可以加载资源包条目 还可以加载 ttf 并设置字体 但它不会根据需要呈现 jlabel 它显示块代替字符 如果我在 Eclipse 中调试 我可
  • 为什么通过 方法向 List 添加元素(类型正确)会出现编译错误? [复制]

    这个问题在这里已经有答案了 我对泛型通配符概念几乎没有疑问 1 假设我有一个方法 void write List
  • Selenium 和 TestNG 同时使用“dependsOn”和“priority =”问题

    我正在努力在 GUI 自动化测试中实现更好的工作流程控制 我首先从dependsOn开始 但很快发现缺点是如果一个测试失败 则套件的整个其余部分都不会运行 所以我改用 priority 但看到了意外的行为 一个例子 Test priorit
  • 使用全局变量从内部函数获取空字符串

    请帮助我解决一些小问题 我确信你能做到 D 我试图在 firestore 文档 user cases information 上设置一个字段 其中包含一个字段 case number 首先我声明这个全局变量 private String c
  • 未注入带有 JPA2 的 Apache Ignite 2.7 IgniteRepository

    使用在 Web 上建立的 guildes 我使用 Spring Data JPA 2 应用程序制作了简单的 Spring Boot 2 仅在 2 7 版本中才向 Apache Ignite 添加了 Spring Boot JPA 2 支持
  • 使用 kryo 注册课程的策略

    我最近发现了 kryonet 库 它非常棒并且非常适合我的需求 然而 我遇到的一个问题是制定一种好的策略来注册所有可以转移的类 我知道我可以在每个对象中编写一个静态方法 该方法将返回它使用的所有类的列表 但我真的不想这样做 为了我自己的时间
  • Spring HATEOAS 和 HAL:更改 _embedded 中的数组名称

    我正在尝试使用 Spring HATEOAS 构建符合 HAL 的 REST API 经过一番摆弄后我终于开始工作了mostly正如预期的那样 示例 输出现在看起来像这样 links self href http localhost 808
  • 使用 Jena 查询维基数据

    目前 Wikidata 有一个 SPARQL 端点 https query wikidata org https query wikidata org 我想使用 Jena 3 0 1 查询此网站 我使用以下代码 但收到错误消息 端点返回的
  • FileObserver 不适用于 Android 6.0 Marshmallow (API 23) 中的外部存储

    我有一个应用程序可以观察外部存储上的公共目录FileObserver 它运行良好Lollipop设备 我想添加对Marshmallow 所以我用它设置了一台 Nexus 9 平板电脑 在 Marshmallow 设备上 它失败 在 Loll
  • Java 中如何验证字符串的格式是否正确

    我目前正在用 Java 编写一个验证方法来检查字符串是否是要更改为日期的几种不同格式之一 我希望它接受的格式如下 MM DD YY M DD YY MM D YY 和 M D YY 我正在测试第一种格式 每次它都告诉我它无效 即使我输入了有
  • Time.valueOf 方法返回错误值

    我使用 Time valueOf 方法将字符串 09 00 00 转换为 Time 对象 如下所示 Time valueOf LocalTime parse 09 00 00 当我调用 getTime 来显示我得到的值时 28800000
  • Java HashSet 是线程安全的只读吗?

    如果我通过 Collections unmodifyingSet 运行 HashSet 实例后 它是线程安全的吗 我问这个是因为 Set 文档声明它不是 但我只是执行读取操作 来自 Javadoc 请注意 此实现不是同步的 如果多个线程同时
  • 如何在 spring-data 中强制使用 CrudRepository 进行预加载?

    我有一个实体 其中包含List就是这样lazy默认加载 interface MyEntityRepository extends CrudRepository
  • 开发者环境-如何调用/消费其他微服务

    背景 我的环境 Java Play2 MySql 我在 Play2 gt S1 S2 S3 上编写了 3 个无状态 Restful 微服务 S1 消耗来自 S2 和 S3 的数据 因此 当用户点击 S1 时 该服务会异步调用 S2 S3 合
  • 从 InputStream 中删除换行符

    我喜欢从一个文件中删除所有换行符 对于 n 和 r n java io InputStream 在读取文件时 相应的方法如下所示 param target linkplain File return linkplain InputStrea

随机推荐

  • 中文核心期刊与科技核心期刊区别?

    投稿前一定要先搞清楚各大期刊的区别 在我们发表论文之前 一定要先搞清楚各大期刊的区别进行精准投递 由于各期刊的等级分类不同 评选组织不同 评选范围和评选的领域不同 在选择的时候 一定要搞清楚各期刊的类别划分 不仅可以帮助我们精准定位自己的学
  • C++11智能指针之unique_ptr

    1 智能指针概念 智能指针是基于RAII机制实现的类 模板 具有指针的行为 重载了operator 与operator gt 操作符 可以 智能 地销毁其所指对象 C 11中有unique ptr shared ptr与weak ptr等智
  • 闲鱼项目玩法实战,月入破万实战指南!

    一些闲鱼的实操技巧玩法 做短期项目都同学一定收藏下 1 相同属性的商品上架1 2个即可不宜过多 每天上新1 2为宜 过多都会限流 2 商品名称根据用户可能会输入的关键词去拆分下逐个输入搜索框 如果有搜不到的 就是谐词汇 不断尝试更换 直到都
  • ESP32 S3-OLED显示小数函数

    ESP32 S3 ardino平台 配中景园7针0 96OLED屏显示小数 OLED网上的驱动代码一般厂商发货会提供驱动程序 但是显示小数很多都没有编写 这里编写了一段可显示任意位小数的代码 以正点原子代码为基础 需要显示有符号的小数程序稍
  • 云原生全栈体系(二)

    Kubernetes实战入门 第一章 Kubernetes基础概念 一 是什么 我们急需一个大规模容器编排系统 kubernetes具有以下特性 服务发现和负载均衡 Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器
  • 《自己动手设计数据库》第7章 设计表结构

    第7章 建立表结构 到此章为止 你手上应该有3张列表了 主题列表 经过评审的特征列表 又名初始字段列表 计算字段列表 定义初始表列表 要执行这一段内容 还需要第5章定义的任务目标 确定隐含主题 首先不去看主题列表 这里先去看初始字段列表 原
  • 执行程序时提示cuBLAS Error: cublasGemmStridedBatchedEx failed.

    操作步骤 问题现象 在使用Mindspore GPU跑程序的时候出现报错 CRITICAL KERNEL 1084 7f5e5ffff700 python3 2022 06 22 19 46 23 385 199 mindspore ccs
  • linux查看文件夹大小

    linux怎么查看文件夹多大 1 最简单的查看方法可以使用ls ll ls lh命令进行查看 当使用ls ll 会显示成字节大小 而ls lh会以KB MB等为单位进行显示 这样比较直观一些 2 通过命令du h max depth 1 可
  • Lesson 6.4 逻辑回归手动调参实验

    文章目录 一 数据准备与评估器构造 1 数据准备 2 构建机器学习流 二 评估器训练与过拟合实验 三 评估器的手动调参 在补充了一系列关于正则化的基础理论以及 sklearn 中逻辑回归评估器的参数解释之后 接下来 我们尝试借助 sklea
  • 知网CAJ直接PDF下载,并且autoBookMark添加书目

    知网能下PDF 谷歌浏览器下 You猴 安装这两个插件 CNKI 中国知网 PDF 全文下载 特制版 知网下载助手 安装所需要的文件链接 链接 https pan baidu com s 1sIKJnvuZE2P8r4HSETrWGQ 提取
  • Android TextEdit 文本框设置

    文本框类型设置 android inputType none 输入普通字符 android inputType text 输入普通字符 android inputType textCapCharacters 输入普通字符 android i
  • 从零开始学习React——(十六):利用React生命周期优化组件

    通过上一节 对于React生命周期有了新认识 如何利用它来提高组件的性能呢 本节将会抛砖引玉讲解一个小例子 为了代码的清晰 可以删除上一节一些无关的生命周期函数代码 1 ChildItem js存在性能问题 那就是 子组件ChildItem
  • GPU指令下发方式

    1 概述 GPU接收CPU发送的渲染命令 执行相应的计算 渲染命令在CPU和GPU之间传递 由CPU发送给GPU AMD的GPU有两种命令发送方式 第一种是CPU通过直接写GPU的寄存器 发送相应的渲染命令 对于GPU来说 这种方式是CPU
  • Vue中table实现行的上移和下移

    链接 html
  • 【基础知识学习】链表的创建

    链表的创建 因为对链表使用不太熟悉 学习使用数组创建了一个链表并访问 代码如下 以后学到新的知识继续补充 include
  • mfc入门基础(七)向导对话框的创建与显示

    实现参考 VS2010 MFC编程入门之十四 对话框 向导对话框的创建及显示 软件开发 鸡啄米 一 向导对话框的创建与显示 1 具体的例子使用 还是参照上节或者说上上节中的例子写出来 test02 所以也还是在这个基础上来进行更改 2 创建
  • Day82-基于ElasticSearch的实战-仿京东搜素

    基于ElasticSearch的实战 仿京东搜素 1 创建springboot项目 添加相关依赖 2 导入相关Maven依赖
  • HAL库使用硬件SPI驱动0.96寸OLED stm32F401

    找一个可以使用SPI接口的OLED驱动程序 一般买OLED会提供 或者自己网上找 这里用的是中景园的例程 由于我使用的开发板是STM32F401ccu6 所以我先移植到我的开发板上 主要改的 打开MXcube 配置时钟 配置DEBUG 我这
  • RBM中的Gibbs,CD-K,PCD三种抽样方式

    首先看RBM教程推导 http blog csdn net itplus article details 19207371 推导到下图时 对中括号中的第二项进行计算 是 通过采样的到的 那么采样有三种方法 Gibbs CD K PCD 下面
  • JDBC的原理及应用

    一 JDBC作用 JDBC Java DataBase Connectivity 就是Java数据库连接 简单说就是封装了java语言操作不同据库 例如 mysql oracle sqlServer等数据库 的接口 各个数据库厂商实现这个接