1、Java连接池的实现连接池的实现陌生知识掌握栈(stack):下面信息来自stack百科栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表。栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。栈是只能在某一端插入和删除的特殊线性表。用桶堆积物品,先堆进来的压在底下,随后一件一件往堆。取走时,只能从上面一件一件取。堆和取都在顶部进行,底部一般是不动的。栈就是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一堆称栈底。插入一般称为进栈,删除则称为退栈。 栈也称为后进先出表。(详细内容参考JDK
2、1.5API)1、思路 构造一个高内聚的连接池类 我们已经学过,并熟练掌握了几种java应用访问关系数据库的技术细节。现将几种实现简述如下: a)、jdbc-odbc桥连接 b)、纯jdbc连接 c)、基于属性文件的配置,获取数据源连接对象。 d)、基于容器获取连接池。(基于tomcat容器) 2、实现的步骤 (1)、建立ConnManagerPool类 (2)、类参数:a)、定义使用SQL server 2005数据库驱动的连接参数; b)、定义数据库连接池的保存栈;(例如:private int minConn = 0; /最少连接数private int maxConn = 10; /最
3、大连接数private int connAmount = 0; /当前连接数 private Stack connStack = new Stack();) /保存连接的栈c)、定义全局共享一个数据库连接类;(例如:private static ConnManagerPool instance;) (3)、类操作: a)、构造方法,初始化自动生成最少数量的连接Connection; b)、获取全局共享一个数据库连接类实例; c)、内部使用方法,生成一个数据库连接对象并返回; d)、通过类对象返回的数据库连接; e)、释放数据库连接,并压回连接池。3、代码实现部分代码实现部分(代码仅供参考,帮助
4、细化思路,不要盲目去记忆代码) 1 package common; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 import java.sql.Statement; 9 import java.util.Stack; 10 11 /* 12 * 驱动:Microsoft SQLServer 2005 的驱动 13
5、 * 需放在本web工程的lib中 14 * 15 * 使用说明:使用本类请不要New ConnManagerPool; 16 * 要获得本类的对象请使用函数getInstance(); 17 * 实例:ConnManagerPool conn; 18 * conn = ConnManagerPool.getInstance(); 19 */ 20 public class ConnManagerPool 21 22 /* 23 * 使用SQL server 2005数据库驱动的连接参数 24 */ 25 final String driver = com.microsoft.sqlserve
6、r.jdbc.SQLServerDriver; 26 final String url = jdbc:sqlserver:/localhost:1433;DatabaseName=MarketManager; 27 final String user=sa; 28 final String password=sa; 29 30 /* 31 * 数据库连接池的保存栈 32 */ 33 private int minConn = 0; 34 private int maxConn = 10; 35 private int connAmount = 0; 36 private Stack connS
7、tack = new Stack(); 37 38 /* 39 * 全局共享一个数据库连接类 40 */ 41 private static ConnManagerPool instance; 42 public static ConnManagerPool getInstance() 43 if( instance = null ) 44 instance = new ConnManagerPool(); 45 return instance; 46 47 48 /* 49 * 构造函数:初始化自动生成最少数量的连接Connection; 50 */ 51 public ConnManage
8、rPool() 52 for(int i = 0; i minConn; i+ ) 53 connStack.push( newConnection() ); 54 55 56 /* 57 * 功能:内部使用,生成一个数据库连接并返回 58 *if success return default connection, failed return null; 59 */ 60 public Connection newConnection() 61 Connection conn = null; 62 try 63 Class.forName( driver ); 64 conn= Driver
9、Manager.getConnection(url,user,password); 65 connAmount+; 66 catch (ClassNotFoundException e) 67 conn = null; 68 catch (SQLException e) 69 conn = null; 70 71 return conn; 72 73 74 /* 75 * 功能:通过类对象返回的数据库连接 76 *if success return default connection, failed return null; 77 */ 78 public Connection getCon
10、nection() 79 Connection conn = null; 80 if( !connStack.isEmpty() ) 81 conn = connStack.pop(); 82 else if( connAmount maxConn ) 83 conn = newConnection(); 84 else 85 try 86 wait( 100000 ); 87 return getConnection(); 88 catch ( InterruptedException e) 89 conn = null; 90 91 92 return conn; 93 94 95 /*
11、96 * 功能:释放数据库连接,并压回连接池 97 */ 98 public void freeConnection( Connection conn ) 99 try100 if( conn != null )101 102 connStack.push( conn );103 notifyAll();104 105 catch( Exception e)106 107 108 109 110 /*111 * 功能:Statement,通过类名调用112 * if success return a Statement, failed return null;113 */114 public
12、Statement getStatement( Connection conn ) 115 Statement stmt = null; 116 try 117 if( conn != null ) 118 stmt = conn.createStatement();119 120 catch ( SQLException e ) 121 stmt = null;122 123 124 return stmt;125 126 127 /*128 * 功能:PreparedStatement,通过类名调用129 * if success return a PreparedStatement, f
13、ailed return null;130 */131 public PreparedStatement getPreparedStatement(Connection conn,String sql) 132 PreparedStatement pstmt = null; 133 try 134 if( conn != null ) 135 pstmt = conn.prepareStatement(sql);136 137 catch ( SQLException e ) 138 pstmt = null;139 140 return pstmt;141 142 143 /*144 * 功
14、能:通过SQL语句,返回结果集,通过类名调用145 * if success return data of database, failed return null;146 */147 public ResultSet executeQuery( Statement stmt, String sql ) 148 ResultSet rs = null;149 try 150 if(stmt != null) 151 rs = stmt.executeQuery(sql);152 153 catch (SQLException e) 154 rs = null;155 156 return rs;157 158 159 public ResultSet executeQuery( PreparedStatement pstmt) 160 ResultSet rs = null;161 try 162 if(pstmt != null) 163 rs = pstmt.executeQuery();164 165 catch (SQLException e) 166 rs = null;167 168 return rs;169 170
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1