博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编写一个基本的连接池来实现连接的复用&一些工程细节上的优化
阅读量:5122 次
发布时间:2019-06-13

本文共 6215 字,大约阅读时间需要 20 分钟。

1 package it.cast.jdbc; 2  3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 import java.util.LinkedList; 7  8 public class MyDataSource { 9 10     private static String url = "jdbc:mysql://localhost:3306/jdbc";11     private static String username = "root";12     private static String password = "123";13 14     private static int initCount = 5;15     private static int maxCount = 10;16     private int currentCount = 0;17 18     private LinkedList
connectionPool = new LinkedList
();19 20 public MyDataSource() {21 try {22 for (int i = 0; i < initCount; i++) {23 24 this.connectionPool.addLast(this.createConnection());25 26 this.currentCount++;27 }28 } catch (SQLException e) {29 throw new ExceptionInInitializerError(e);30 }31 32 }33 34 public Connection getConnection() throws SQLException {35 synchronized (connectionPool) {36 if (this.connectionPool.size() > 0) {37 return this.connectionPool.removeFirst();38 }39 if (this.currentCount < maxCount) {40 this.currentCount++;41 return this.createConnection();42 }43 throw new SQLException("NO Connection!!");44 }45 46 }47 48 public void free(Connection conn) {49 this.connectionPool.addLast(conn);50 }51 52 private Connection createConnection() throws SQLException {53 return DriverManager.getConnection(url, username, password);54 }55 }
MyDataSource
1 package it.cast.jdbc;  2   3 import java.sql.CallableStatement;  4 import java.sql.Connection;  5 import java.sql.DriverManager;  6 import java.sql.PreparedStatement;  7 import java.sql.ResultSet;  8 import java.sql.SQLException;  9 import java.sql.Statement; 10  11 public class jdbcUtils { 12  13     private static String url = "jdbc:mysql://localhost:3306/jdbc?generateSimpleParameterMetadata=true"; 14     private static String user = "root"; 15     private static String password = "123"; 16      17     private static MyDataSource myDataSource = null; 18  19     private jdbcUtils() { 20  21     } 22  23     static { 24         try { 25             Class.forName("com.mysql.jdbc.Driver"); 26             myDataSource =new MyDataSource(); 27         } catch (ClassNotFoundException e) { 28             e.printStackTrace(); 29         } 30     } 31  32     public static Connection getConnection() throws SQLException { 33         return myDataSource.getConnection(); 34     } 35  36     public static void free(ResultSet rs, Statement st, Connection conn) { 37  38         try { 39             if (rs != null) 40                 rs.close(); 41         } catch (SQLException e) { 42             e.printStackTrace(); 43         } finally { 44  45             try { 46                 if (st != null) 47                     st.close(); 48             } catch (SQLException e) { 49                 e.printStackTrace(); 50             } finally { 51  52                 try { 53                     if (conn != null) 54                         //conn.close(); 55                         myDataSource.free(conn); 56                 } catch (Exception e) { 57                     e.printStackTrace(); 58                 } 59             } 60  61         } 62  63     } 64      65     public static void free(ResultSet rs, PreparedStatement ps, Connection conn) { 66  67         try { 68             if (rs != null) 69                 rs.close(); 70         } catch (SQLException e) { 71             e.printStackTrace(); 72         } finally { 73  74             try { 75                 if (ps != null) 76                     ps.close(); 77             } catch (SQLException e) { 78                 e.printStackTrace(); 79             } finally { 80  81                 try { 82                     if (conn != null) 83                         //conn.close(); 84                         myDataSource.free(conn); 85                 } catch (Exception e) { 86                     e.printStackTrace(); 87                 } 88             } 89  90         } 91  92     } 93     public static void free(ResultSet rs, CallableStatement cs, Connection conn) { 94  95         try { 96             if (rs != null) 97                 rs.close(); 98         } catch (SQLException e) { 99             e.printStackTrace();100         } finally {101 102             try {103                 if (cs != null)104                     cs.close();105             } catch (SQLException e) {106                 e.printStackTrace();107             } finally {108 109                 try {110                     if (conn != null)111                         //conn.close();112                         myDataSource.free(conn);113                 } catch (Exception e) {114                     e.printStackTrace();115                 }116             }117 118         }119 120     }121 }
jdbcUtils
1 package it.cast.jdbc; 2  3 import java.sql.Connection; 4 import java.sql.ResultSet; 5 import java.sql.SQLException; 6 import java.sql.Statement; 7  8 public class Base { 9     10     static Connection conn = null;11 12     public static void main(String[] args) throws SQLException, ClassNotFoundException {13         for (int i = 0; i < 20; i++) {14             Connection conn = jdbcUtils.getConnection();15             System.out.println(conn);16             //jdbcUtils.free(null, null, conn);17         }18     }19 20     static void test() throws SQLException, ClassNotFoundException {21         22 23         // 2.建立连接24         conn = jdbcUtils.getConnection();25 26         // 3.创建语句27         Statement st = conn.createStatement();28 29         // 4.执行语句30         ResultSet rs = st.executeQuery("select * from user");31 32         // 5.处理结果33         while (rs.next()) {34             System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t"35                     + rs.getObject(3)+"\t" + rs.getObject(4));36         }37         38         //6.释放资源39         jdbcUtils.free(rs, st, conn);40     }41 42 }
Base

 

转载于:https://www.cnblogs.com/aineko/p/3954989.html

你可能感兴趣的文章
文件包War包
查看>>
组播地址的范围
查看>>
MIT-JOS系列5:用户环境(一)
查看>>
【[AHOI2005]航线规划】
查看>>
20条Linux命令面试问答
查看>>
ResultSet几种类型的区别
查看>>
[算法]和为S的连续正数序列
查看>>
Ubuntu上修复Python
查看>>
22C4400 – Database Systems Project
查看>>
Oracle之虚拟索引
查看>>
[题解](树的计数)luogu_P4430猴子打架_/_luogu_P4981父子
查看>>
HDU 2196 Computer 树形DP
查看>>
CSU 1325 莫比乌斯反演
查看>>
网络编程
查看>>
北京集训:20180318
查看>>
学习springboot框架
查看>>
DB2 SQL 错误(SQLCODE:-964,SQLSTATE:57011)处理方法
查看>>
火狐豆绿色
查看>>
Struts2中的类型转换
查看>>
try,catch,finally
查看>>