本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!