数据库连接池的应用

 

      数据库连接池的应用

连接池  DataSource的实现:web服务器(tomcat) 都包含了数据库连接池的实现
三种连接池技术:独立实现:DBCP、C3P0
Tomcat自带连接池实现 使用的是DBCP
一、DBCP

是Apache软件基金组织下的开元连接池实现,使用DBCP数据源,两个文件
 1、Commons-dbcp.jar  连接池的实现
 2、Commons-pool.jar  连接池实现的依赖库
 3、Tomcat使用DBCP来实现数据库连接池
 4、使用DBCP连接池
  static{
  InputStream is=DBNanager.class.getClassLoader().getResourceAsStream("dbcp.properties");
  Properties p=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();
  }
  
 }
 public static Connection getConnection() throws SQLException{
  
   return dataSource.getConnection();
 }
二、C3P0数据库的连接池
 1、jar配置文件   c3p0-0.9.2-pre1.jar
 2、可以调用方法设置配置文件
 3、也可用xml配置文件来解决配置的问题 
 4、出现异常和死机情况,请注意检查配置文件
 5代码:
  CombolPooledDataSource ds=null;
 static{
  ds=new CombolPooledDataSource("mysql");   //用配置文件的命名来确定是那个连接,如果为空则使用默认配置
//  ds.setDriverClass("com.mysql.jdbc.Driver");
//  ds.setJdbcUrl("jdbc:mysql://localhost:3306/store");
//  ds.setUser("root");
//  ds.setPassword("123456");
//  ds.setInitialPoolSize(10);
 }
 public static Connection getConnection() throws SQLException{
  
  return ds.getConnection();
}
三、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容器
   Context initCtx=new InitialContext();
   //检索jndi容器
   Context envCtx=(Context) initCtx.lookup("java:comp/env");
   //用绑定的名字从容器中去找数据库连接池
   DataSource ds=(DataSource) envCtx.lookup("jdbc/TestDB");
   //获取连接对象
   Connection con=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、编写框架
  删除,修改,插入  公用的框架
  public static void update(String sql,Object[] param){
   Connection conn=null;
  PreparedStatement pstmt=null;
  ResultSet rs=null;
  try {
   conn=JdbcUtil.getConnection();
   pstmt=conn.prepareStatement(sql);
   for(int i=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、付费专栏及课程。

余额充值