数据库连接的两种实现方式(读取配置文件)——DBCP&C3P0;DBCP实现连接代码,C3P0实现连接代码——包含完整代码

来源:互联网 发布:中国经济动能知乎 编辑:程序博客网 时间:2024/06/10 04:40

两种数据库连接实现方式


第一种方式:DBCP

DBCP使用流程

  1. 导jar包
  2. 使用DBCP创建数据库连接对象
    DataSource ds=BasicDataSourceFactory.createDatasource("一个存储连接信息的properties集合");
  3. 使用DataSource,调用连接池对象的getConnection方法


编写的.properties文件:dbcpconfig.properties

[plain] view plain copy
  1. #连接设置  
  2. driverClassName=com.mysql.jdbc.Driver  
  3. url=jdbc:mysql://localhost:3306/demobase  
  4. username=root  
  5. password=root  

JDBCUtils中的代码:

[java] view plain copy
  1. public class JDBCUtils {  
  2.       
  3.     private static DataSource ds;  
  4.     //DatatSource 对象只会创建一个  
  5.     static {  
  6.         try {  
  7.         //创建DBCP的数据库连接对象  
  8.         //1、获取配置文件对应的输入流  
  9.         InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");  
  10.         //2、将流中数据读入集合  
  11.         Properties pro = new Properties();  
  12.         pro.load(in);  
  13.         ds = BasicDataSourceFactory.createDataSource(pro);  
  14.         } catch (Exception e) {  
  15.             e.printStackTrace();  
  16.             throw new RuntimeException();  
  17.         }  
  18.     }  
  19.       
  20.     public static DataSource getDs(){  
  21.         return ds;  
  22.     }  
  23. }  



Test中的代码:

[java] view plain copy
  1. public class Test {  
  2.     public static void main(String[] args) throws Exception  {  
  3.         Connection con = JDBCUtils.getDs().getConnection();  
  4.         //使用连接  
  5.         PreparedStatement ps = con.prepareStatement("select * from teacher");  
  6.         ResultSet rs = ps.executeQuery();  
  7.         while(rs.next()){  
  8.             System.out.println(rs.getString(1) + "   " + rs.getString(2));  
  9.         }  
  10.         //关闭  
  11.         rs.close();  
  12.         ps.close();  
  13.         //和以前不同  
  14.         con.close();  
  15.     }  
  16. }  

第二种方式:C3P0

C3P0使用流程:

  1. 导jar包
  2. 使用C3P0创建对应的数据库连接对称
    DataSource ds=new ComboPooledDataSource();
    注意:
    ·虽然有配置文件,但是配置文件没有字节读取,c3p0会自动读取配置文件,此过程隐藏了;
    ·保存配置文件存在的路径在src中, 其实复制到bin目录下面了,真正读取是从bin目录下查找的;
    ·配置文件的文件名必须固定,即 c3p0-config.xml;
  3. 具体的连接对象使用与DBCP一样


编写的XML文件:c3p0-config.xml

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <c3p0-config>  
  3.     <!-- 默认配置,如果没有指定则使用这个配置  
  4.         默认配置最常用  
  5.           
  6.         建议放在最开头。  
  7.         放其他地方也没问题  
  8.      -->  
  9.     <default-config>  
  10.         <property name="driverClass">com.mysql.jdbc.Driver</property>  
  11.         <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/demobase</property>  
  12.         <property name="user">root</property>  
  13.         <property name="password">root</property>  
  14.         <property name="checkoutTimeout">30000</property>  
  15.         <property name="idleConnectionTestPeriod">30</property>  
  16.         <property name="initialPoolSize">10</property>  
  17.         <property name="maxIdleTime">30</property>  
  18.         <property name="maxPoolSize">100</property>  
  19.         <property name="minPoolSize">10</property>  
  20.         <property name="maxStatements">200</property>  
  21.         <user-overrides user="test-user">  
  22.             <property name="maxPoolSize">10</property>  
  23.             <property name="minPoolSize">1</property>  
  24.             <property name="maxStatements">0</property>  
  25.         </user-overrides>  
  26.     </default-config>  


JDBCUtils中的代码:
[java] view plain copy
  1. public class JDBCUtils {  
  2.     //1、读取配置信息  
  3.     private static DataSource ds = new ComboPooledDataSource();  
  4.     public static DataSource ds(){  
  5.         return ds;  
  6.     }  
  7. }  

Test中的代码:

[java] view plain copy
  1. public class Test {  
  2.     public static void main(String[] args) throws Exception {  
  3.         Connection con = JDBCUtils.ds().getConnection();  
  4.         //使用连接  
  5.         PreparedStatement ps = con.prepareStatement("select * from teacher");  
  6.         ResultSet rs = ps.executeQuery();  
  7.         while(rs.next()){  
  8.             System.out.println(rs.getString(1) + "   " + rs.getString(2));  
  9.         }  
  10.         //关闭  
  11.         rs.close();  
  12.         ps.close();  
  13.         //和以前不同  
  14.         con.close();  
  15.     }  
  16. }  
阅读全文
0 0
原创粉丝点击