1. 程式人生 > >JDBC自定義連接池

JDBC自定義連接池

trace closed ren generated ger stub dsta root pan

最近學習了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自定義連接池