JavaWeb-JDBC连接池 和 DBUtils

JDBC连接池

       传统JDBC的操作,对连接的对象销毁不是特别好,每次创建和销毁连接都是需要花费时间。可以使用连接池优化的程序。

       在程序开始的时候,可以创建几个连接,将连接放入到连接池中.用户使用连接的时候,可以从连接池中进行获取.用完之后,可以将连接归还连接池。


一、自定义连接池

1、SUN公司提供了一个连接池的接口.(javax.sql.DataSource)。
2、定义一个连接池:实现这个接口。
3、使用List集合存放多个连接的对象。

代码:

public class MyDataSource implements DataSource{
	// 创建一个List集合用于存放多个连接对象.
	private List<Connection> list = new ArrayList<Connection>();
	// 在程序开始的时候,初始化几个连接,将连接存放到list中.
	public MyDataSource() {
		// 初始化3个连接:
		for(int i=1;i<=3;i++){
			Connection conn = JDBCUtils.getConnection();
			list.add(conn);
		}
	}
	
	@Override
	// 获得连接的方法:
	public Connection getConnection() throws SQLException {
		if(list.size() <= 0){
			for(int i=1;i<=3;i++){
				Connection conn = JDBCUtils.getConnection();
				list.add(conn);
			}	
		}
		Connection conn = list.remove(0);
		return conn;
	}
	
	// 归还连接的方法:
	public void addBack(Connection conn){
		list.add(conn);
	}
...
}

二、自定义连接池中问题及如何解决

自定义连接池中的问题?
1、如果使用自定义连接池,那么需要额外记住自定义连接池中的API。
2、能不能使用面向接口的编程方式。

自定义连接池的问题解决方案:
1、不额外提供API方法,就可以解决上述两个问题!
2、能不能还调用Connection的close方法.能不能增强Connection的close方法,原有的销毁变为归还!

增强一个Java类中的某个方法有几种方式?
    * 一种方式:继承的方式(使用前提:必须有父类,且存在继承关系。)
        1、子类继承父类,将父类的方法进行复写,从而进行增强。
 
    * 二种方式:装饰者模式方式(使用前提:必须有接口,此设计模式专门用于增强方法)
        1、包装对象和被包装的对象都要实现相同的接口。
        2、包装的对象中需要获得到被包装对象的引用。
        缺点:需要将接口的所有方法都实现。
 
    * 三种方式:动态代理的方式(使用前提:必须有接口)
        1、在运行时动态的创建代理类,完成增强操作,与装饰着相似。
        难点:需要反射技术。


继承和装饰者的方式:

//继承的方式增强一个类中某个方法:
class Man{
	public void run(){
		System.out.println("吃....");
	}
}
 
class SuperMan extends Man{
	public void run(){
		// super.run();
		System.out.println("走....");
	}
}
 
//使用装饰者的方式完成类的方法的增强
interface Student{
	public void study();
}
 
class Students implements Student{
	public void study() {
	    System.out.println("可以的...");
	}
}
 
class Studentss implements Student{
        private Student studenter;
	public Studentss(Student studenter) {
    	    this.studenter = studenter;
	}

	public void study() {
	    System.out.println("学习...");
	    // this.student.server();
	}
}

使用装饰者模式增强Connectionclose方法:

public class MyConnection implements Connection{
	private Connection conn;
	private List<Connection> list;
 
	public MyConnection(Connection conn,List<Connection> list) {
		this.conn = conn;
		this.list = list;
	}
 
	public void close() throws SQLException {
		list.add(conn);
	}
     ...
}
 
连接池的getConnection方法:
// 获得连接的方法:
public Connection getConnection() throws SQLException {
	if(list.size() <= 0){
		for(int i=1;i<=3;i++){
			Connection conn = JDBCUtils.getConnection();
			list.add(conn);
		}	
	}
	Connection conn = list.remove(0);
	MyConnection myConn = new MyConnection(conn, list);//获取连接
	return myConn;
}


三、常见的开源的数据库连接池

DBCP:
        DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。
C3P0:
        C3P0是一个开源的JDBC连接池,它实现了数据源JNDI绑定(Java Naming and Directory Interface,Java命名和目录接口),支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
Tomcat内置连接池:
        使用Tomcat服务器内置的数据库连接池的局限在于,一是这个工程必须是web工程,而不能是一般的Java工程;二是我们必须在服务器启用之前就要将数据库连接池配置好,这就要看情况了,如果我们在启用Tomcat之前没配置数据库连接池的话,那么后面的web应用一般也就不会使用内置的数据库连接池了,毕竟一般服务器不会随便停用。其实要想使用Tomcat内置的数据库连接池,也很简单,就将数据库的驱动jar包(例如mysql-connector-java-5.1.37.jar)放置在Tomcat的【lib】目录下。


一、DBCP连接池的使用
//手动方式:
public void demo1(){
	Connection conn = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	BasicDataSource dataSource = new BasicDataSource();
	dataSource.setDriverClassName("com.mysql.jdbc.Driver");
	dataSource.setUrl("jdbc:mysql:///web_07");
	dataSource.setUsername("root");
	dataSource.setPassword("123");
	try{
		// 获得连接:
		conn = dataSource.getConnection();
		// 编写SQL:
		String sql = "select * from category";
		// 预编译SQL:
		stmt = conn.prepareStatement(sql);
		// 执行SQL:
		rs = stmt.executeQuery();
		while(rs.next()){
			System.out.println(rs.getInt("cid")+"   "+rs.getString("cname"));
		}
	}catch(Exception e){
		e.printStackTrace();
	}finally{
		JDBCUtils.release(rs,stmt, conn);
	}
}
	
//配置文件方式:
public void demo2(){
	Connection conn = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	Properties properties = new Properties();
		
	try{
		properties.load(new FileInputStream("src/dbcpconfig.properties"));
		DataSource dataSource = BasicDataSourceFactory.createDataSource(properties);
	        // 获得连接:
		conn = dataSource.getConnection();
		// 编写SQL:
		String sql = "select * from category";
		// 预编译SQL:
		stmt = conn.prepareStatement(sql);
		// 执行SQL:
		rs = stmt.executeQuery();
		while(rs.next()){
			System.out.println(rs.getInt("cid")+"   "+rs.getString("cname"));
		}
	}catch(Exception e){
		e.printStackTrace();
	}finally{
		JDBCUtils.release(rs,stmt, conn);
	}
}


DBUtils

DBUtils 是 Java编程中的数据库操作使用工具,小巧简单实用。
DBUtils 封装了对 JDBC 的操作,简化了 JDBC 的操作,可以少写代码。
DBUtils 三个核心功能介绍:
    1、QueryRunner 中提供对 sql 语句操作的 API。
    2、ResultSetHandler 接口,用于定义 select 操作后,怎样封装结果集。
    3、DBUtils 类,它就是一个工具类,定义了关闭资源与事务处理的方法。


学习链接:

C3P0连接池--> https://www.cnblogs.com/ygj0930/p/6405861.html

DBUtils学习--> https://www.cnblogs.com/CQY1183344265/p/5854418.html

Tomcat内置连接池--> https://www.cnblogs.com/fjdingsd/p/5273187.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaWeb购物车JDBC是一种基于JavaWeb技术开发的电子商务网站,它实现了用户注册、登录、浏览商品、购物车结算、订单管理等一系列电子商务操作。JDBCJava数据库连接技术,它可以实现与关系型数据库的连接与交互,为JavaWeb购物车提供了持久化存储功能。 JavaWeb购物车JDBC的实现过程主要包括以下几个步骤: 1.建立数据库连接:首先需要加载JDBC驱动程序,然后通过该驱动程序与数据库建立连接。 2.创建数据库表结构:为了实现购物车功能,需要创建商品表、用户表、订单表和订单详情表等数据库表。 3.编写JDBC代码:使用Java语言编写数据访问对象(DAO)类,通过这些类实现对数据库的增删改查操作。同时,需要实现购物车功能的业务逻辑,如添加商品到购物车、计算商品总价、生成订单等。 4.部署JavaWeb应用程序:将JavaWeb购物车JDBC部署到Web服务器上,如Tomcat或Jetty,通过浏览器访问网站进行测试。 JavaWeb购物车JDBC的优势在于它遵循Java开发语言的规范,具有可移植性和跨平台性。同时,JDBC技术支持多种数据库类型,如Oracle、MySQL、PostgreSQL等,方便开发者根据实际需求选择最适合的数据库。在开发过程中,使用JDBC技术可以提高代码的可读性和可维护性,减少耦合度,提高代码复用率。 总之,JavaWeb购物车JDBC是一种基于JavaWeb技术和JDBC技术的电子商务网站,它具有可移植性、跨平台性和可读性强等优势,可为JavaWeb开发者提供一个高效、可扩展的电商开发框架。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值