数据库连接池---------------也优化了代码

来源:互联网 发布:为什么要优化系统 编辑:程序博客网 时间:2024/06/05 04:47


数据库连接池---------------也优化了代码

一、编写数据库连接池

·实现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方法为检索容器中对应名称的对象。

 

 

 

以下是编写jdbc框架--------------------优化代码

七、元数据—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中的数据映射到实体对象中。

 

原创粉丝点击