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()返回true
        while(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。


猜你喜欢

转载自blog.csdn.net/u011531425/article/details/79796100