zoukankan      html  css  js  c++  java
  • JavaWeb--------数据库连接池c3p0

    1.为什么要有数据库连接池?

    首先我们来看看传统两个连接数据库的方法

    方法一:直接在main方法里连接数据库 也是最简单的连接(使用的时候注意导入msql驱动包),然后执行查询 获得名字和年龄性别

     conn=DriverManager.getConnection("jdbc:mysql://localhost/study1?seUnicode=true&characterEncoding=UTF-8","root","root");
    		  System.out.println(conn.getClass());
    		  stmt = conn.prepareStatement("select * from t_person");
    		  resultSet = stmt.executeQuery();
    		  while(resultSet.next())
    		  {
    			  String name = resultSet.getString("Name");
    			  int age=resultSet.getInt("Age");
    			  boolean gender = resultSet.getBoolean("Gender");
    			  System.out.println("名字:"+name+"年龄"+age+"性别"+(gender?"男":"女"));
    		  }
    

    方法二:通过封装JDBCGB把数据库的连接放到常用类中,并通过静态类来加载 只加载一次

    public class JDBCGB
    {
    	private static final String drivername;
    	private static final String dburl;
    	private static final String dbusername;
    	private static final String dbpassword;
    	static 
    	{	
    		InputStream instream=null;
    		
    		try{
      
    		instream = JDBCGB.class.getResourceAsStream("config.pro");
    			Properties prop = new Properties();
    	
    		prop.load(instream);
    		drivername=prop.getProperty("drivername");
    		dburl=prop.getProperty("dburl");
    		dbusername=prop.getProperty("dbusername");
    		dbpassword = prop.getProperty("dbpassword");
    		}
    		
    		catch(IOException ex)
    		{
    			throw new RuntimeException("config",ex);
    			
    		}
    		finally
    		{
    			if(instream!=null)
    			{
    				try
    				{
    				instream.close();	
    				}catch(IOException e)
    				{
    				}
    			}
    			
    		}
    		try
    		{
    			Class.forName(drivername);
    			
    		}
    		catch (ClassNotFoundException e)
    		{
    			throw new RuntimeException("mysql jdbc",e);
    		}
    	
    	}
    

    相关配置文件放到src下面

    config.pro

    drivername=com.mysql.jdbc.Driver
    
    dburl=jdbc:mysql://localhost/study1?seUnicode=true&&characterEcoding=UTF8
    
    dbusername=root
    
    dbpassword=root
    

      

    当我们每次打开数据库系统的时候会进行许多工作,如安全验证,内存回收分配,连接断开等,当我们使用传统的方式操作数据库时,

    频繁的连接会导致数据库的性能降低,因此数据库连接池就出现了。如c3p0

     

    2.怎么去使用c3p0数据库?

    首先要导入c3p0数据库的驱动包,有

    c3p0-0.9.5.jar
    mchange-commons-java-0.2.9.jar
    mysql-connector-java-5.1.7-bin.jar

    然后写好C3p0的配置文件到src目录下,这样第一步就完成了

    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
    	<default-config>
    		<property name="driverClass">com.mysql.jdbc.Driver</property>
    		<property name="jdbcUrl">jdbc:mysql://localhost:3306/dataSourceDemo?characterEncoding=UTF8</property>
    		<property name="user">root</property>
    		<property name="password">root</property>
    
    		<property name="maxPoolSize">15</property>
    		<property name="minPoolSize">3</property>
    		<property name="initialPoolSize">3</property>
    		<property name="acquireIncrement">3</property>
    		<property name="maxIdleTime">600</property>
            <property name="checkoutTimeout">0</property>
    	</default-config>
    </c3p0-config>
    	
    

      

    package dataSourceDemo;
    
    
    import java.sql.Connection;
    import java.sql.SQLException;
    
    import javax.sql.DataSource;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class Test {
    public void main(String args[])
    {
    	//datasource这个接口的实现类 combopool
    	DataSource dataSource= new ComboPooledDataSource();
    	//这样就创建了数据库的对象,它会自动的加载数据库的配置文件
    	try {
    		Connection conn=dataSource.getConnection();
            //做你需要做的事情
    		/*
    		 * 
    		 */
    		//归还连接给连接池
             conn.close();
    	} 
    	catch (SQLException e) {
             
    		 e.printStackTrace();
    	}//获得数据库的连接
    	
    }
    	
    

    数据库连接池的原理,特点

    • 程序启动时 连接池就会创建若干连接并且保存到连接池内
    • 当用户需要的时候,就直接从连接池给出
    • 当用户使用完毕后,就把链接还给连接池
    • 如果超过连接池的最大连接,就会等待用户归还,否则创建。

     

      可以在配置文件xml中配置连接池的连接数,等待时间等。

      下面是常用的配置参数

      maxPoolSize连接池的最大连接数目
      minPoolSize最小连接数目
      initialPoolSize初始化连接数目
      maxIdleTime最大等待时间 超过就销毁连接池

  • 相关阅读:
    将C#文档注释生成.chm帮助文档
    Html5shiv
    C#创建COM组件
    WebBrowser控件使用详解
    iframe跨域
    VMware Workstation 虚拟机暂停后无法启动 出现Exception 0xc0000006 (disk error while paging) has occurred.错误
    Java Timer 定时器的使用
    adf笔记
    JS编码解码
    【Python】Django CSRF问题
  • 原文地址:https://www.cnblogs.com/a986771570/p/8126991.html
Copyright © 2011-2022 走看看