JDBC自定义连接池

Posted nick9527

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC自定义连接池相关的知识,希望对你有一定的参考价值。

最近学习了JDBC的相关知识,写一下自定义连接池

一些说明:

本代码参考了部分别人的代码!!!

JDBCCon类具体创建了连接;

MyConnection类集成了Connection类用来管理连接与池,其中的close方法必须pool.add();

MyDataSource则是具体实现连接池。

具体步骤:

1、导mysql的jar包

2、配置db.propertites

1 driver = com.mysql.cj.jdbc.Driver
2 url = jdbc:mysql://localhost:3306/test?serverTimezone=GMT
3 username = root
4 password = root

3、JDBCCon

 1 package com.nick.util;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.sql.Connection;
 6 import java.sql.DriverManager;
 7 import java.sql.PreparedStatement;
 8 import java.sql.ResultSet;
 9 import java.sql.SQLException;
10 import java.util.Properties;
11 
12 public class JDBCCon {
13 
14     private static String driver; 
15     private static String url;
16     private static String username;
17     private static String password;
18     
19     
20     static {
21         
22         try {
23             ClassLoader classLoader = JDBCCon.class.getClassLoader();
24             InputStream is = classLoader.getResourceAsStream("db.properties");
25             Properties props = new Properties();
26             props.load(is);
27             driver = props.getProperty("driver");
28             url = props.getProperty("url");
29             username = props.getProperty("username");
30             password = props.getProperty("password");
31         } catch (IOException e) {
32             // TODO Auto-generated catch block
33             e.printStackTrace();
34         }
35         
36     }
37     
38     public static Connection getConnection() {
39         Connection connection = null;
40         try {
41             Class.forName(driver);
42             connection = DriverManager.getConnection(url, username, password);
43         } catch (Exception e) {
44             // TODO: handle exception
45         }
46         return connection;
47         
48     }
49     
50     public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {
51         if(rs != null) {
52             try {
53                 rs.close();
54             } catch (SQLException e) {
55                 // TODO Auto-generated catch block
56                 e.printStackTrace();
57             }
58         }
59         if(pstmt != null) {
60             try {
61                 pstmt.close();
62             } catch (SQLException e) {
63                 // TODO Auto-generated catch block
64                 e.printStackTrace();
65             }
66         }
67         if(conn != null) {
68             try {
69                 conn.close();
70             } catch (SQLException e) {
71                 // TODO Auto-generated catch block
72                 e.printStackTrace();
73             }
74         }
75         
76     }
77     
78 }

4、MyConnection

  1 package com.nick.dataSource;
  2 
  3 import java.sql.Array;
  4 import java.sql.Blob;
  5 import java.sql.CallableStatement;
  6 import java.sql.Clob;
  7 import java.sql.Connection;
  8 import java.sql.DatabaseMetaData;
  9 import java.sql.NClob;
 10 import java.sql.PreparedStatement;
 11 import java.sql.SQLClientInfoException;
 12 import java.sql.SQLException;
 13 import java.sql.SQLWarning;
 14 import java.sql.SQLXML;
 15 import java.sql.Savepoint;
 16 import java.sql.Statement;
 17 import java.sql.Struct;
 18 import java.util.LinkedList;
 19 import java.util.Map;
 20 import java.util.Properties;
 21 import java.util.concurrent.Executor;
 22 
 23 public class MyConnection implements Connection{
 24 
 25     private Connection connection = null;
 26     private LinkedList<Connection> pool = null;
 27     public MyConnection(Connection connection, LinkedList<Connection> pool) {
 28         this.connection = connection;
 29         this.pool = pool;
 30     }
 31     
 32     @Override
 33     public void close() throws SQLException {
 34         // TODO Auto-generated method stub
 35         pool.add(connection);
 36     }
 37     
 38     @Override
 39     public <T> T unwrap(Class<T> iface) throws SQLException {
 40         // TODO Auto-generated method stub
 41         return null;
 42     }
 43     @Override
 44     public boolean isWrapperFor(Class<?> iface) throws SQLException {
 45         // TODO Auto-generated method stub
 46         return false;
 47     }
 48     @Override
 49     public Statement createStatement() throws SQLException {
 50         // TODO Auto-generated method stub
 51         return null;
 52     }
 53     @Override
 54     public PreparedStatement prepareStatement(String sql) throws SQLException {
 55         // TODO Auto-generated method stub
 56         return null;
 57     }
 58     @Override
 59     public CallableStatement prepareCall(String sql) throws SQLException {
 60         // TODO Auto-generated method stub
 61         return null;
 62     }
 63     @Override
 64     public String nativeSQL(String sql) throws SQLException {
 65         // TODO Auto-generated method stub
 66         return null;
 67     }
 68     @Override
 69     public void setAutoCommit(boolean autoCommit) throws SQLException {
 70         // TODO Auto-generated method stub
 71         
 72     }
 73     @Override
 74     public boolean getAutoCommit() throws SQLException {
 75         // TODO Auto-generated method stub
 76         return false;
 77     }
 78     @Override
 79     public void commit() throws SQLException {
 80         // TODO Auto-generated method stub
 81         
 82     }
 83     @Override
 84     public void rollback() throws SQLException {
 85         // TODO Auto-generated method stub
 86         
 87     }
 88     
 89     @Override
 90     public boolean isClosed() throws SQLException {
 91         // TODO Auto-generated method stub
 92         return false;
 93     }
 94     @Override
 95     public DatabaseMetaData getMetaData() throws SQLException {
 96         // TODO Auto-generated method stub
 97         return null;
 98     }
 99     @Override
100     public void setReadOnly(boolean readOnly) throws SQLException {
101         // TODO Auto-generated method stub
102         
103     }
104     @Override
105     public boolean isReadOnly() throws SQLException {
106         // TODO Auto-generated method stub
107         return false;
108     }
109     @Override
110     public void setCatalog(String catalog) throws SQLException {
111         // TODO Auto-generated method stub
112         
113     }
114     @Override
115     public String getCatalog() throws SQLException {
116         // TODO Auto-generated method stub
117         return null;
118     }
119     @Override
120     public void setTransactionIsolation(int level) throws SQLException {
121         // TODO Auto-generated method stub
122         
123     }
124     @Override
125     public int getTransactionIsolation() throws SQLException {
126         // TODO Auto-generated method stub
127         return 0;
128     }
129     @Override
130     public SQLWarning getWarnings() throws SQLException {
131         // TODO Auto-generated method stub
132         return null;
133     }
134     @Override
135     public void clearWarnings() throws SQLException {
136         // TODO Auto-generated method stub
137         
138     }
139     @Override
140     public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException {
141         // TODO Auto-generated method stub
142         return null;
143     }
144     @Override
145     public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
146             throws SQLException {
147         // TODO Auto-generated method stub
148         return null;
149     }
150     @Override
151     public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException {
152         // TODO Auto-generated method stub
153         return null;
154     }
155     @Override
156     public Map<String, Class<?>> getTypeMap() throws SQLException {
157         // TODO Auto-generated method stub
158         return null;
159     }
160     @Override
161     public void setTypeMap(Map<String, Class<?>> map) throws SQLException {
162         // TODO Auto-generated method stub
163         
164     }
165     @Override
166     public void setHoldability(int holdability) throws SQLException {
167         // TODO Auto-generated method stub
168         
169     }
170     @Override
171     public int getHoldability() throws SQLException {
172         // TODO Auto-generated method stub
173         return 0;
174     }
175     @Override
176     public Savepoint setSavepoint() throws SQLException {
177         // TODO Auto-generated method stub
178         return null;
179     }
180     @Override
181     public Savepoint setSavepoint(String name) throws SQLException {
182         // TODO Auto-generated method stub
183         return null;
184     }
185     @Override
186     public void rollback(Savepoint savepoint) throws SQLException {
187         // TODO Auto-generated method stub
188         
189     }
190     @Override
191     public void releaseSavepoint(Savepoint savepoint) throws SQLException {
192         // TODO Auto-generated method stub
193         
194     }
195     @Override
196     public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)
197             throws SQLException {
198         // TODO Auto-generated method stub
199         return null;
200     }
201     @Override
202     public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency,
203             int resultSetHoldability) throws SQLException {
204         // TODO Auto-generated method stub
205         return null;
206     }
207     @Override
208     public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency,
209             int resultSetHoldability) throws SQLException {
210         // TODO Auto-generated method stub
211         return null;
212     }
213     @Override
214     public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException {
215         // TODO Auto-generated method stub
216         return null;
217     }
218     @Override
219     public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException {
220         // TODO Auto-generated method stub
221         return null;
222     }
223     @Override
224     public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException {
225         // TODO Auto-generated method stub
226         return null;
227     }
228     @Override
229     public Clob createClob() throws SQLException {
230         // TODO Auto-generated method stub
231         return null;
232     }
233     @Override
234     public Blob createBlob() throws SQLException {
235         // TODO Auto-generated method stub
236         return null;
237     }
238     @Override
239     public NClob createNClob() throws SQLException {
240         // TODO Auto-generated method stub
241         return null;
242     }
243     @Override
244     public SQLXML createSQLXML() throws SQLException {
245         // TODO Auto-generated method stub
246         return null;
247     }
248     @Override
249     public boolean isValid(int timeout) throws SQLException {
250         // TODO Auto-generated method stub
251         return false;
252     }
253     @Override
254     public void setClientInfo(String name, String value) throws SQLClientInfoException {
255         // TODO Auto-generated method stub
256         
257     }
258     @Override
259     public void setClientInfo(Properties properties) throws SQLClientInfoException {
260         // TODO Auto-generated method stub
261         
262     }
263     @Override
264     public String getClientInfo(String name) throws SQLException {
265         // TODO Auto-generated method stub
266         return null;
267     }
268     @Override
269     public Properties getClientInfo() throws SQLException {
270         // TODO Auto-generated method stub
271         return null;
272     }
273     @Override
274     public Array createArrayOf(String typeName, Object[] elements) throws SQLException {
275         // TODO Auto-generated method stub
276         return null;
277     }
278     @Override
279     public Struct createStruct(String typeName, Object[] attributes) throws SQLException {
280         // TODO Auto-generated method stub
281         return null;
282     }
283     @Override
284     public void setSchema(String schema) throws SQLException {
285         // TODO Auto-generated method stub
286         
287     }
288     @Override
289     public String getSchema() throws SQLException {
290         // TODO Auto-generated method stub
291         return null;
292     }
293     @Override
294     public void abort(Executor executor) throws SQLException {
295         // TODO Auto-generated method stub
296         
297     }
298     @Override
299     public void setNetworkTimeout(Executor executor, int milliseconds) throws SQLException {
300         // TODO Auto-generated method stub
301         
302     }
303     @Override
304     public int getNetworkTimeout() throws SQLException {
305         // TODO Auto-generated method stub
306         return 0;
307     }
308 }

5、MyDataSource

 1 package com.nick.dataSource;
 2 
 3 import java.sql.Connection;
 4 import java.util.LinkedList;
 5 
 6 import com.nick.util.JDBCCon;
 7 
 8 public class MyDataSource {
 9 
10     private static LinkedList<Connection> pool = new LinkedList<Connection>();
11     
12     static {
13         //
14         for(int i = 0; i < 5; i++) {
15             Connection connection = JDBCCon.getConnection();
16             pool.add(connection);
17         }
18     }
19     
20     public static Connection getConnection() {
21         if(pool.size() == 0) {
22             for(int i = 0; i < 5; i++) {
23                 Connection connection = JDBCCon.getConnection();
24                 MyConnection myConnection = new MyConnection(connection, pool);
25                 pool.add(myConnection);
26             }
27         }
28         Connection connection = pool.remove(0);
29         return connection;
30         
31     } 
32 }

6、检测代码

 1 package com.nick.test;
 2 
 3 import java.sql.Connection;
 4 import java.sql.PreparedStatement;
 5 
 6 import org.junit.jupiter.api.Test;
 7 
 8 import com.nick.dataSource.MyDataSource;
 9 import com.nick.util.JDBCCon;
10 
11 public class TestDemo01 {
12 
13     @Test
14     public void t1() {
15         Connection connection = null;
16         PreparedStatement pstmt = null;
17         MyDataSource myDataSource = new MyDataSource();
18         try {
19             connection = myDataSource.getConnection();
20             String sql = "insert into student values (?,?,?,?)";
21             PreparedStatement prepareStatement = connection.prepareStatement(sql);
22             prepareStatement.setInt(1, 10);
23             prepareStatement.setString(2, "吕布");
24             prepareStatement.setString(3, "男");
25             prepareStatement.setInt(4, 100);
26             int rows = prepareStatement.executeUpdate();
27             if(rows > 0) {
28                 System.out.println("OK");
29             }else {
30                 System.out.println("NO");
31             }
32         } catch (Exception e) {
33             // TODO: handle exception
34         }
35     }
36 }

以上即全部代码。

以上是关于JDBC自定义连接池的主要内容,如果未能解决你的问题,请参考以下文章

阿里druid连接池,SpringJDBC模块,JDBC自定义工具类,JdbcTemplate

JDBC连接与自定义线程池

JAVA基础:JDBC的使用 附详细代码

JDBC实现自定义C3P0和DBCP连接池的简单使用

JDBC-05-笔记

JDBC(连接池) -- 02(I)