jdbc、连接池、Jndi

2024-06-11 03:18
文章标签 jdbc 连接池 jndi

本文主要是介绍jdbc、连接池、Jndi,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

java database connectivity

java数据库连接

是java的Api,使用它,可以与数据库产品进行沟通,提供了连接数据库并进行数据库操作的功能。

并且可以面向不同的数据库进行编程,提供相同的接口,掩盖实际操作的差异。

实际会由不同的数据库厂商自己实现各自的接口,一般会叫它们【数据库驱动包】,比如:

mysql的mysql-connector-java.jar

oracle的ojdbc.jar,ojdbc.jar带有ojdbc5、ojdbc6、ojdbc14这样的标识来标识版本的新旧。

sqlserver的sqljdbc.jar,sqljdbc4.jar等等。sqljdbc.4.jar支持java6以上的。反正有大数字的就用大数字的


数据库连接:DBUtil.java DBHelper.java ConnectionManager.java之类的类里面写的。

//1.加载驱动程序Class.forName("com.mysql.jdbc.Driver");//2. 获得数据库连接Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);//3.操作数据库,实现增删改查Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");//如果有数据,rs.next()返回truewhile(rs.next()){System.out.println(rs.getString("user_name")+" 年龄:"+rs.getInt("age"));}

连接池:

传统的数据库连接,每次需要打开,关闭数据库。连接数据库需要比较大的资源消耗和比较长的创建时间,所以使用一个"池"的概念。简单说就是:

1、预先创建一个数据库连接列表,需要用的时候,给你一个,不用你花时间创建。initialPoolSize

2、用完不用关闭,直接释放就好了,别人可以继续用(虽然提供了close方法,但是连接并没有真正的关闭,只是释放,别的线程可以使用此连接)。

3、如果列表都不够用了,就进行一次扩容,再创建一批出来。acquireIncrement

连接数总不能无限扩容,有个限度,如果达到这个限度,对不起,后面的只能排队。maxPoolSize

4、如果某段时间空余的连接数很多,且大于某个最小连接数量,就收缩一下列表,用来节省空间。 minPoolSize、maxIdleTime

数据库连接池的几项重要配置都是为这种模式而存在的。

线程池的模式和这个也差不多的,这里。

市面上的连接池产品:

dbcp apache的产品,貌似网上说有bug,不推荐使用

c3p0 优化了回收空闲连接功能,性能更加强大。

druid 阿里出品,目前已知的最犀利的连接池,推荐使用,不知道是不是吹的,反正大厂的人有钱,为了kpi,没事就造造轮子坑同行玩

proxool sourceforge下的开源项目


JNDI 

说到连接池的时候,我们经常会听到JNDI连接池,其实严格意义上来讲并没有JNDI连接池,只是将连接池放到JNDI中。连接池只是JNDI的应用之一,两者并不是一回事。

NDI Naming and Directory Interface,Java命名和目录接口,J2EE 规范要求所有 J2EE 容器都要提供 JNDI 规范的实现。

说白了就是规定了资源可以放到外部,java web应用能够访问。资源嘛本身肯定有命名和目录,然后应用也是通过name和directory访问资源。

java要求web容器(tomcat、jboss)要实现能够存放资源,并让java应用能够读取到资源。

比如可以将连接池定义在web中间件中,web应用通过上下文从连接池中获取连接进行数据库操作。

如果你喜欢,可以把任何公共的东西放到JNDI中,这个具体搜JNDI应用场景。

tomcat默认使用的连接池是dbcp,因为都是apache下面的嘛。至于效率,个人觉得没什么区别。JNDI主要设计目的是解耦,连接池还是那个连接池,跟效率没啥关系。所以还是优先选择druid。


这篇关于jdbc、连接池、Jndi的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050062

相关文章

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

Hibernate框架中,使用JDBC语法

/*** 调用存储过程* * @param PRONAME* @return*/public CallableStatement citePro(final String PRONAME){Session session = getCurrentSession();CallableStatement pro = session.doReturningWork(new ReturningWork<C

MySQL数据库连接池技术

关于数据库连接池的使用,首先我们要明白我们为什么要用它,对应普通的数据库连接操作,通常会涉及到以下一些操作是比较耗时的: 网络通讯,涉及到网络延时及协议通讯身份验证,涉及安全性检查连接合法性检查,主要是检查所连接的数据库是否存在并发控制机制构造并初始化输出缓冲区连接成功后的信息保存,日志存储服务器性能数据库配置优化系统分配内存资源等等~~~状况,导致数据库连接操作比较耗时,~~~而且每次都得花费

Redis 客户端Jedis使用---连接池

Jedis 是Redis 的Java客户端,通过一段时间的使用,jedis基本实现redis的所有功能,并且jedis在客户端实现redis数据分片功能,Redis本身是没有数据分布功能。 一、下载jedis 代码 jedis 代码地址:https://github.com/xetorthio/jedis 再次感受到开源的强大。呵呵,大家有时间可以看看源码。 二、项目中如何使用Jedi

Hibernate中自带的连接池!!!

<span style="font-size:18px; font-family: Arial, Helvetica, sans-serif;"><?xml version="1.0" encoding="UTF-8"?></span> <span style="font-size:18px;"><!DOCTYPE hibernate-configuration PUBLIC"-//Hibern

jdbc连接数据库使用sid和service_name的区别 ?

问题描述: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connection descriptor used by the client was: 10.12.162.84:1521:xxxx  oracle数据的tnsnames.ora中配置的是:SERVICE

C3P0连接池参数配置

<!--acquireIncrement:链接用完了自动增量3个。 --><property name="acquireIncrement">3</property><!--acquireRetryAttempts:链接失败后重新试30次。--><property name="acquireRetryAttempts">30</property><!--acquireRetryDelay;两次连接

Java项目中,配置打印 JDBC 日志的几种方法

在 IDEA 项目中,如果你想打印 JDBC 日志,可以通过配置日志框架(如 Logback 或 Log4j)来实现。Spring Boot 使用的默认日志框架是 Logback,你可以通过在 application.yml 文件中配置日志级别来打印 JDBC 日志。 方法 1: 使用 application.yml 配置 JDBC 日志 logging:level:# 显示 SQL 语句co

基于shard-jdbc中间件,实现数据分库分表

一、水平分割 1、水平分库 1)、概念: 以字段为依据,按照一定策略,将一个库中的数据拆分到多个库中。 2)、结果 每个库的结构都一样;数据都不一样; 所有库的并集是全量数据; 2、水平分表 1)、概念 以字段为依据,按照一定策略,将一个表中的数据拆分到多个表中。 2)、结果 每个表的结构都一样;数据都不一样; 所有表的并集是全量数据; 二、Shard-jdbc 中间件 1、架构图 2、特点