zoukankan      html  css  js  c++  java
  • 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 }

    以上即全部代码。

  • 相关阅读:
    Spring Boot JDBC 使用教程
    Spring Boot FreeMarker 使用教程
    椭圆曲线ECC ECDH原理&& javacard实现
    java中的强制类型转换:int和byte
    JUnit学习
    java异常处理
    Maven使用
    哈希表问题
    计数排序
    链表Linked List
  • 原文地址:https://www.cnblogs.com/nick9527/p/9873976.html
Copyright © 2011-2022 走看看