连接池  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); 

} 

 }