数据库连接池

 

一、编写数据库连接池

·实现javax.sql.DataSource接口,有getConnection()和getConnection(String username,String password)

·实现DataSource接口。并实现连接池功能的步骤:

1、在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加入LinkedLIist对象中

2、实现getConnection方法,让getConnection方法每次调用时,从LinkedList中区一个Connection返回给用户

3、当用户使用完Connection,调用Connection close()方法时,从LinkedList中Connection对象应保证将自己返回到LinkedList中,而不要把conn还给数据库

注意:linkedlist是链表式的能保证数据库连接池在用完之后返回到linedlist中

         而arraylist是线性的不能由以上功能

二、开源数据库连接池

现在很多web服务器都实现了DataSource的实现,及数据库的实现。

也有一些开源组织提供了数据源的独立实现:

·DBCP数据库连接池

·c3p0数据库连接池

实际应用时不需要编写连接数据路代码,直接从数据源获得数据路的连接。程序员编程时也应该尽量使用这些数据源的实现,以提升程序的数据库访问性能。

三、DBCP数据源

1、  赋值jar包以及jdbc.properties文件

2、  修改配置文件

3、  修改DBManager文件

4、  该数据库连接池既可以与应用服务器整合使用,也可有应用程序独立使用

四、jdbc 与  c3p0的区别

jdbc没有自动回收空闲连接的功能,c3p0有回收空闲连接的功能

五、配置Tomcat数据源

1、  设置配置文件

方法一:这种方法并不好

在tomcat服务器的server.xml文件中国的host中加入<context>…..</context>

方法二:常用

在web工程中添加context.txt

        <Context>

       <Resource name="jdbc/jdbc"

            auth="Container"

            type="javax.sql.DataSource"           

            driverClassName="com.mysql.jdbc.Driver"

            url="jdbc:mysql://localhost:3306/jdbc"

            username="root"

            password="123"

            maxActive="50"

            maxIdle="10"/>

</Context>

六、jdni技术

·即java命名和目录接口,对应于j2se中的javax.naning包

·这套api的主要作用在于:他可以把java对象放在一个容器中(jdni容器),并为容器中的对象起一个名子,以后程序想获得java对象,只需要通过名称检索即可。

·其核心api为Context,它代表JNDI容器,其lookup方法为检索容器中对应名称的对象。

七、元数据—DataBaseMetaData

·元数据:数据库、表、列的定义信息

·Connection.getDatabaseMetaData对象

•         getURL():返回一个String类对象,代表数据库的URL。

•         getUserName():返回连接当前数据库管理系统的用户名。

•         getDatabaseProductName():返回数据库的产品名称。

•         getDatabaseProductVersion():返回数据库的版本号。

•         getDriverName():返回驱动驱动程序的名称。

•         getDriverVersion():返回驱动程序的版本号。

•         isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。

 

八、元数据—PrarameterMetaData

PreparedStatement . getParameterMetaData()

获得代表PreparedStatement元数据的ParameterMetaData对象。

Select * from user where name=? And password=?

ParameterMetaData对象

getParameterCount()

获得指定参数的个数

getParameterType(int param)

获得指定参数的sql类型

九、元数据—ResultSetMetaData

·ResultSet. getMetaData()

  获得代表ResultSet对象元数据的ResultSetMetaData对象。

·ResultSetMetaData对象

getColumnCount()

返回resultset对象的列数

getColumnName(int column)

获得指定列的名称

 getColumnTypeName(int column)

获得指定列的类型

 

十、使用元数据简化JDBC代码

·业务背景:系统中所有实体对象都涉及到基本的CRUD操作:

a)         所有实体的CUD操作代码基本相同,仅仅发送给数据库的SQL语句不同而已,因此可以把CUD操作的所有相同代码抽取到工具类的一个update方法中,并定义参数接收变化的SQL语句。

b)        实体的R操作,除SQL语句不同之外,根据操作的实体不同,对ResultSet的映射也各不相同,因此可义一个query方法,除以参数形式接收变化的SQL语句外,可以使用策略模式由qurey方法的调用者决定如何把ResultSet中的数据映射到实体对象中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值