JDBC、DriverManage、JNDI、数据源(DataSource)、连接池的区别

  • 使用 JDBC 来访问数据库的基本流程
  • JDBC 与 DriverManage
  • 数据源
  • JNDI
  • 连接池

使用 JDBC 来访问数据库的基本流程

  1. 构造连接数据库的 4 个属性:驱动器名、数据库 URL、数据库用户名、数据库密码。

  2. 在系统中注册驱动器。方法有很多,如 System.setProperty("jdbc.drivers", driver);

  3. 将原始的数据库信息传入静态方法 DriverManager.getConnection 来获得一个 Connection 对象。

  4. 利用 Connection 对象生成一个 Statement 对象。

  5. 使用 Statement 对象的方法 executeXXX 来执行 SQL 语句。如果这个 SQL 语句属于查询语句,可以接收其返回值作为查询结果。

示例代码如下:

/*** driver、url、user、password、sql 均为 String 类型*/
System.setProperty("jdbc.drivers", driver);
Connection connection = DriverManager.getConnection(url, user, password);
Statement statement = connection.createStatement();
ResultSet result = statement.executeQuery(sql);

JDBC 与 DriverManage

  JDBC 全称 Java Database Connectivity,译为 Java 数据库连接。我们知道,数据库语言与Java语言是不同的语言,因此需要一种途径来将这两者联系起来。JDBC 就起着这样的一种桥梁的作用。一般说 JDBC 也指包名前缀为 java.sql 的包的内容,它包含一系列的类与接口。常用的类与接口有DriverManager、Connection、Statement、Result、PreparedStatement等。这其中就包含DriverManager。

  一般来说,JDBC 是 Java 数据库连接中的必用的技术手段,其它延伸出来的 Java 数据库连接技术都是对包含 JDBC 等技术封装之后的结果。而 DriverManager 是 JDBC 中建立连接的一个关键性的类,具体地说,DriverManager 有一个静态方法:Connection getConnection(String url, String user, String password) 可直接进行与数据库的连接。

数据源

  数据源(DataSource)是一种升级版的 DriverManager。之所以需要这种升级版,原因是 DriverManager 过于底层。数据源可以由连接池作为实现,用以减少连接数据库时所带来的消耗。DataSource 位于 javax.sql.DataSource (不是 java.sql.DataSource)。从代码逻辑来讲,DataSource 与 DriverManage 几乎是等同的,DataSource 同样有一个类似的方法 Connection getConnection(...)

JNDI

  JNDI 全称 Java Naming and Directory Interface,译为 Java 命名和目录接口。一般说 JNDI 也指包名前缀为 Javax.naming 的包的内容。虽然有了 DataSource,但是仅仅使用 DataSource 仍然要在 Java 代码中添加大量的配置代码。这种情况下,JNDI 应运而生。使用 JNDI,就可以将一些配置信息使用文本语言(如 xml)来描述,并存放到别处,这些就能实现解耦。比如说,JNDI 中的l ookup 方法可以接收一个配置文件作参数,返回一个可以强制转换为 DataSource 类型的对象,然后就可以使用 DataSource 进行与数据库的连接。

连接池

  技术的发展永无止境。虽然有了上面的技术,然而这尚未解决频繁关闭数据库连接带来的损耗的问题。

  关于为什么需要使用连接池,可以参考笔者举的这个例子。把完成一次涉及数据库的操作看成去餐厅吃一次饭。原始的数据库连接方式相当于吃饭时使用的是一次性餐具。虽然一次性餐具对吃饭没有显著的坏处,但使用一次性餐具毕竟还有购买一次性餐具、用完后处理一次性餐具的问题。如果对于人很多、吃饭时间高度集中的学校来讲,还有更好的方法,那就是使用可重复利用的餐具。这样一来,很多个人吃饭也可以轮流使用同一套餐具,这就节约了资源。

  连接池是用于高效管理数据库连接。它可以在合适的时机建立、释放连接,其作用类似于虚拟机对内存的管理。具体来说,当程序需要进行数据库连接时,系统会一次性地创建多个数据库连接,并保存在连接池中。然后让该程序使用连接池的其中一个连接。当该程序不再需要数据库连接时,并不释放这个数据库连接,而是继续保留在连接池中供未来某程序使用。因此,这种方式避免了频繁地建立与释放数据库连接所带来的不必要损耗。

  常见的连接池有:

  • Hibernate 使用的 C3P0、Proxool 等。

JDBC、DriverManage、JNDI、数据源(DataSource)、连接池的区别相关推荐

  1. 小汤学编程之JDBC(二)——dbutils框架和DataSource连接池

    一.dbutils框架 1.介绍     2.新增/删除/修改     3.各种查询     4.扩展:Bean中属性名与数据表列名的映射 二.DataSource连接池 1.获取DataSource ...

  2. 深入理解Spring Boot数据源与连接池原理

    ​ Create by yster@foxmail.com 2018-8-2 一:开始 在使用Spring Boot数据源之前,我们一般会导入相关依赖.其中数据源核心依赖就是spring‐boot‐s ...

  3. 《深入理解Mybatis原理》 02-Mybatis数据源与连接池

    对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题.本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池. 本文首先会讲述MyB ...

  4. c3p0连接池与dbcp连接池的区别

    c3p0连接池与dbcp连接池的区别: c3p0有自动回收空闲连接的功能: dbcp没有自动回收空闲连接的功能: c3p0提供最大空闲时间,超时则断开当前连接: dbcp提供最大连接数,超过最大连接数 ...

  5. mybatis 原理_深入理解MyBatis原理 MyBatis数据源与连接池

    点击上方"程序开发者社区"关注,选择"设为星标" 第一时间送达实用干货 对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题.本文 ...

  6. spring数据源、连接池配置

    Spring提供了两个这样的数据源(都位于org.springframework.jdbc.datasource程序包里): DriverManagerDataSource:在每个连接请求时都新建一个 ...

  7. 《深入理解mybatis原理三》 Mybatis数据源与连接池

    对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题.本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池. 本文首先会讲述MyB ...

  8. JNDI数据源的连接属性

    如果无须Hibernate自己管理数据源,而是直接访问容器管理数据源,Hibernate可使用JNDI(Java Naming Directory Interface,Java命名目录接口)数据源的相 ...

  9. flowable更换数据源与连接池

    Spring Boot的约定大于配置.默认情况下,如果classpath中只有H2,就会创建内存数据库,并传递给Flowable流程引擎配置. 可以简单地通过提供Datasource bean来覆盖默 ...

最新文章

  1. python中不能使用索引运算的是_Python数据分析之Pandas库(笔记)
  2. STM32系统滴答定时器(systick)应用
  3. JDK提供的原子类原理与使用
  4. Mysql中字段类型之时间戳大坑
  5. codevs 1200:同余方程
  6. Cpp 对象模型探索 / new 对象时加括号和不加括号时的差别
  7. android data分区(标准)
  8. [RN] React Native 实现图片预览
  9. 用C#来学习唐诗三百首和全唐诗
  10. 华为5G英国首秀,BBC主持人震惊了!到底网速有多快?
  11. 线性表中顺序表基本运算的实现---数据结构(C)
  12. MFC画图(画线、画矩形、画刷画笔的使用)
  13. 6.8 2.23-2.26
  14. 现场直击 | 复旦MBA科创青干营开营
  15. windows部署django项目
  16. 强大视频电影播放软件——乐鱼影音盒!
  17. word文档通配符换行_Word指定位置批量插入表格,别人花一天搞不出来,我只用了10秒...
  18. 电商挖角潮起:工作两年百万年薪
  19. gitlab 配置企业微信邮箱发送邮件
  20. 京东云服务器搭建php开发环境

热门文章

  1. 【Java线程】多线程实现简单的一对一聊天
  2. 《App后台开发运维与架构实践》第4章 Linux系统
  3. 美团支付平台产品规划
  4. Qtum量子链帅初受邀火星特训营面对面授课
  5. 我为什么要学习C++反汇编
  6. iOS 正确选择图片加载方式
  7. ubuntu12.04安装及配置过程详解1
  8. webclinet downstring 搜狐 为什么是个?号
  9. Nginx反向代理之proxy_set_header指令
  10. 思考一下消息中间件的设计