Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1277816
  • 博文数量: 185
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 3934
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-11 13:11
个人简介

iihero@ChinaUnix, ehero.[iihero] 数据库技术的痴迷爱好者. 您可以通过iihero AT qq.com联系到我 以下是我的三本图书: Sybase ASE in Action, Oracle Spatial及OCI高级编程, Java2网络协议内幕

文章分类

全部博文(185)

文章存档

2014年(4)

2013年(181)

分类: Java

2013-07-29 09:34:04

鉴于有人问起DBCP直接用于JDBC连接的问题,我做了一个最简单的示例。所有资源来源于网上。它不需要什么Web容器,就是一简单的控制台应用。

资源:



当然,还有oracle jdbc要用的ojdbc14.jar (适用于oracle9i及以上版本)

工程文件:放到这里了。

数据库连接信息:
jdbc:oracle:thin:scott/tiger@sean-m700:1521:ora92
sean-m700是主机名,ora92是oracle数据库的instance ID. 我手头的机器上没有安装oracle数据库,用的是很早以前的一个oracle9.2的拷贝,重新安装实例和相应服务得来的。 

源码如下:借化献佛,源码也是从网上得来的。()


  1. /*  
  2. //  
  3. 33  // Here's a simple example of how to use the BasicDataSource.  
  4. 34  //  
  5. 35    
  6. 36  //  
  7. 37  // Note that this example is very similiar to the PoolingDriver  
  8. 38  // example.  
  9. 39    
  10. 40  //  
  11. 41  // To compile this example, you'll want:  
  12. 42  //  * commons-pool-1.5.6.jar  
  13. 43  //  * commons-dbcp-1.3.jar (JDK 1.4-1.5) or commons-dbcp-1.4 (JDK 1.6+)  
  14. 44  //  * j2ee.jar (for the javax.sql classes)  
  15. 45  // in your classpath.  
  16. 46  //  
  17. 47  // To run this example, you'll want:  
  18. 48  //  * commons-pool-1.5.6.jar  
  19. 49  //  * commons-dbcp-1.3.jar (JDK 1.4-1.5) or commons-dbcp-1.4 (JDK 1.6+)  
  20. 50  //  * j2ee.jar (for the javax.sql classes)  
  21. 51  //  * the classes for your (underlying) JDBC driver  
  22. 52  // in your classpath.  
  23. 53  //  
  24. 54  // Invoke the class using two arguments:  
  25. 55  //  * the connect string for your underlying JDBC driver  
  26. 56  //  * the query you'd like to execute  
  27. 57  // You'll also want to ensure your underlying JDBC driver  
  28. 58  // is registered.  You can use the "jdbc.drivers"  
  29. 59  // property to do this.  
  30. 60  //  
  31. 61  // For example:  
  32. 62  //  java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver \  
  33. 63  //       -classpath commons-pool-1.5.6.jar:commons-dbcp-1.4.jar:j2ee.jar:oracle-jdbc.jar:. \  
  34. 64  //       PoolingDataSourceExample  
  35. 65  //       "jdbc:oracle:thin:scott/tiger@myhost:1521:mysid"  
  36. 66  //       "SELECT * FROM DUAL"  
  37. */    
  38. /*  
  39. The Oracle connection URL for the thin client-side driver ojdbc14.jar has the following format:  
  40. jdbc:oracle:thin:[user/password]@[host][:port]:SID  
  41. jdbc:oracle:thin:[user/password]@//[host][:port]/SID  
  42.   
  43.   user - The login user name defined in the Oracle server.  
  44.   
  45.   password - The password for the login user.  
  46.   
  47.   host - The host name where Oracle server is running.   
  48.          Default is 127.0.0.1 - the IP address of localhost.  
  49.   
  50.   port - The port number where Oracle is listening for connection.  
  51.          Default is 1521.  
  52.   
  53.   SID  - System ID of the Oracle server database instance.   
  54.          SID is a required value. By default, Oracle Database 10g Express   
  55.          Edition creates one database instance called XE.  
  56. */    
  57.     
  58. import org.apache.commons.dbcp.BasicDataSource;    
  59. import javax.sql.*;    
  60. import java.sql.*;    
  61.     
  62. public class TestDataSource    
  63. {    
  64.     
  65.     /**  
  66.      * @param args  
  67.      */    
  68.     public static void main(String[] args)    
  69.     {    
  70.         System.out.println("Setting up data source.");    
  71.         String url = "jdbc:oracle:thin:scott/tiger@sean-m700:1521:ora92";    
  72.         DataSource dataSource = setupDataSource(url);    
  73.         System.out.println("Done...");    
  74.     
  75.         // Now, we can use JDBC DataSource as we normally would.    
  76.         //    
  77.         Connection conn = null;    
  78.         Statement stmt = null;    
  79.         ResultSet rset = null;    
  80.     
  81.         try {    
  82.             System.out.println("Creating connection.");    
  83.             conn = dataSource.getConnection();    
  84.             System.out.println("Creating statement.");    
  85.             stmt = conn.createStatement();    
  86.             System.out.println("Executing statement.");    
  87.             rset = stmt.executeQuery("select 1 from DUAL");    
  88.             System.out.println("Results:");    
  89.             int numcols = rset.getMetaData().getColumnCount();    
  90.             while(rset.next()) {    
  91.                 for(int i=1;i<=numcols;i++) {    
  92.                     System.out.print("\t" + rset.getString(i));    
  93.                 }    
  94.                 System.out.println("");    
  95.             }    
  96.         } catch(SQLException e) {    
  97.             e.printStackTrace();    
  98.         } finally {    
  99.             try { if (rset != null) rset.close(); } catch(Exception e) { }    
  100.             try { if (stmt != null) stmt.close(); } catch(Exception e) { }    
  101.             try { if (conn != null) conn.close(); } catch(Exception e) { }    
  102.         }    
  103.     }    
  104.     
  105.     public static DataSource setupDataSource(String connectURI) {    
  106.         BasicDataSource ds = new BasicDataSource();    
  107.         ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");    
  108.         ds.setUsername("scott");    
  109.         ds.setPassword("tiger");    
  110.         ds.setUrl(connectURI);    
  111.         return ds;    
  112.     }    
  113.     
  114.     public static void printDataSourceStats(DataSource ds) {    
  115.         BasicDataSource bds = (BasicDataSource) ds;    
  116.         System.out.println("NumActive: " + bds.getNumActive());    
  117.         System.out.println("NumIdle: " + bds.getNumIdle());    
  118.     }    
  119.     
  120.     public static void shutdownDataSource(DataSource ds) throws SQLException {    
  121.         BasicDataSource bds = (BasicDataSource) ds;    
  122.         bds.close();    
  123.     }    
  124.     
  125. }    

不过,需要说明的是,DBCP连接池是几个开源连接池里最不适合用于生产环境的,经常会出现死连接现象。 而cp30和proxool都是不错的选择。DBCP用于测评开发环境,还是比较便利的。
阅读(4611) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~