编写数据库连接池

 

编写数据库连接池

连接池 DataSource的实现:web服务器(tomcat) 都包含了数据库连接池的实现

三种连接池技术:独立实现:DBCP、C3P0

Tomcat自带连接池实现使用的是DBCP

一、DBCP:是Apache软件基金组织下的开元连接池实现,使用DBCP数据源,两个文件

1、Commons-dbcp.jar 连接池的实现

2、Commons-pool.jar 连接池实现的依赖库

3、Tomcat使用DBCP来实现数据库连接池

4、使用DBCP连接池

static{

InputStreamis=DBNanager.class.getClassLoader().getResourceAsStream("dbcp.properties");

Propertiesp=new Properties();

try{

p.load(is);

dataSource=BasicDataSourceFactory.createDataSource(p);

}catch (IOException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}catch (Exception e) {

//TODO Auto-generated catch block

e.printStackTrace();

}

}

publicstatic Connection getConnection() throws SQLException{

returndataSource.getConnection();

}

二、C3P0数据库的连接池

1、jar配置文件 c3p0-0.9.2-pre1.jar

2、可以调用方法设置配置文件

3、也可用xml配置文件来解决配置的问题

4、出现异常和死机情况,请注意检查配置文件

三、Tomcat自带连接池(DBCP)

1、首先在server.xml中过的host中加入<context></context>配置

2、在web工程中WEB-INF文件夹中添加config.xml

<Context>

<Resource name="jdbc/datasource" //name属性绑定到一个名称上

auth="Container"

type="javax.sql.DataSource" username="root"password="root"

driverClassName="com.mysql.jdbc.Driver"

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

maxActive="8" maxIdle="4"/>

</Context>

3、得到连接对象 JNDI javax.naming包

这套API主要作用在于:它可以把Java对象放在一个容器中,JNDI容器。并为容器中的java对象取一个

名称,以后程序想获得Java对象,只需通过名称检索即可。使用Context lookup()检索对象

4、编写java代码获取连接对象

try{

//两步固定操作 初始化和检索容器

//初始化jndi容器

ContextinitCtx=new InitialContext();

//检索jndi容器

ContextenvCtx=(Context) initCtx.lookup("java:comp/env");

//用绑定的名字从容器中去找数据库连接池

DataSourceds=(DataSource) envCtx.lookup("jdbc/TestDB");

//获取连接对象

Connectioncon=ds.getConnection();

}catch (NamingException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}catch (SQLException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}

5、解决驱动没有找到的异常

此种配置下,将驱动放置到Tomcat的配置下

四、编写自己的JDBC框架

1、元数据:用来定义数据的数据,数据库、表、列的定义信息

2、三种元数据(主要用于写框架) 是给开发框架的程序员使用

Connection.getDatabaseMetaData();

得到DatabaseMetaData对象

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

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

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

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

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

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

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

Connection.geParameterMetaData();

得到ParameterMetaData对象

getParameterCount()

获得指定参数的个数

getParameterType(int?param)

获得指定参数的sql类型

ResultSetMetaData

ResultSet.getMetaData()

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

ResultSetMetaData对象

getColumnCount()

返回resultset对象的列数

getColumnName(int?column)

获得指定列的名称

? getColumnTypeName(int?column)

获得指定列的类型

3、编写框架

删除,修改,插入 公用的框架

publicstatic void update(String sql,Object[] param){

Connectionconn=null;

PreparedStatementpstmt=null;

ResultSetrs=null;

try{

conn=JdbcUtil.getConnection();

pstmt=conn.prepareStatement(sql);

for(inti=0;i<params.length;i++){

pstmt.setObject(i+1,params[i]);

}

pstmt.executeUpdate();

}catch (SQLException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}finally{

JdbcUtil.release(rs,pstmt, conn);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值