zoukankan      html  css  js  c++  java
  • 2. 数据库连接池规范

    数据库连接池规范

    上节是我们模拟编写了一个数据库连接池,对于不同的开发者可能会编写出五花八门的数据库连接池,这对于代码后期的维护和使用会有非常多的问题,为了能够统一数据库连接池的编写规范,让开发者编写出统一标准的数据库连接池.

    sun公司提供了一个规范,该规范其实就是一个位于javax.sql包下的DataSource的接口也叫作数据源,如果要想自己编写数据库连接池,那么需要去实现该接口,有了这个标准之后,我们只要是看到了一个类实现了该接口,那就说明这个类是一个数据库连接池该接口提供了两个重载的getConnection方法

    Connection getConnection() throws SQLException;

    Connection getConnection(String username, String password) throws SQLException;

    例:【创建MyPool类去实现DataSource接口,这样就创建好了一个符合规范的数据库连接池。】

    package Pool;
    
    import Util.DB;
    
    import javax.sql.DataSource;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.sql.SQLFeatureNotSupportedException;
    import java.util.Collections;
    import java.util.LinkedList;
    import java.util.logging.Logger;
    
    
    
    
    public class MyPool implements DataSource {
    
        // 创建一个存放连接的池子
        private static LinkedList<Connection> pool = (LinkedList<Connection>) Collections
                .synchronizedList(new LinkedList<Connection>());
    
        static {
            try {
                for (int i = 0; i < 10; i++) {
                    Connection conn = DB.GetConnection();
                    pool.add(conn);
                }
            } catch (Exception e) {
                throw new ExceptionInInitializerError("初始化数据库连接失败,请检查配置文件是否正确!");
            }
        }
    
    
    
        @Override
        public Connection getConnection() throws SQLException {
            Connection conn = null;
            if (pool.size() > 0) {
                //将连接池中的一个连接取出
                conn = pool.removeFirst();
                return conn;
            } else {
                // 此时说明连接池中已经没有空闲连接了,需要等待
                throw new RuntimeException("服务器忙。。。");
            }
        }
    
        @Override
        public Connection getConnection(String username, String password) throws SQLException {
            return null;
        }
    
        @Override
        public <T> T unwrap(Class<T> iface) throws SQLException {
            return null;
        }
    
        @Override
        public boolean isWrapperFor(Class<?> iface) throws SQLException {
            return false;
        }
    
        @Override
        public PrintWriter getLogWriter() throws SQLException {
            return null;
        }
    
        @Override
        public void setLogWriter(PrintWriter out) throws SQLException {
    
        }
    
        @Override
        public void setLoginTimeout(int seconds) throws SQLException {
    
        }
    
        @Override
        public int getLoginTimeout() throws SQLException {
            return 0;
        }
    
        @Override
        public Logger getParentLogger() throws SQLFeatureNotSupportedException {
            return null;
        }
    }

    代码里面的DB上章有 就是个获取Connection的:

    下面编写数据库连接池测试类伪代码:

    import Pool.MyPool;
    
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    
    public class Test {
        public static void main(String[] args) throws SQLException {
            DataSource dataSource = new MyPool();
            Connection conn = null;
            PreparedStatement ps = null;
            try {
            conn = dataSource.getConnection();
            ps = conn.prepareStatement("SQL语句 这里不写了 只是为了测试");
            ps.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                conn.close();   // 这里不能关闭!!!!这里未采用自动关闭  因为是数据库连接池 下一章介绍
            }
    
    
        }
    }

          大概流程就是这样 但是不能关闭数据库连接池!!!这里只是举个例子例子哦

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14880532.html

  • 相关阅读:
    S5pv210 android VGA 1440*900 视频播放/3D 演示效果实拍视频
    毕业3年,工资从5k到20k的经历——真的还是假的啊?
    转载.WinCE6.0 Camera驱动整体结构
    半夜来认识一下S5PV210 的VBPDE和VFPDE
    微软的windows 8授权真的要这么贵?谁要?!
    基于S5PC100的FIMC的部分解释——一篇让我理解透彻2440和S5PV210 摄像头camera控制器的文章
    转.Buffer Management by the Camera Driver (Windows Embedded CE 6.0)
    微软?想干掉苹果,自己做平板,还想做手机,有优秀的合作伙伴诺基亚?简直是笑话,难怪鲍ceo 被评为最应该下台的CEO了
    魅族经过M8——》M9——》MX 已经走向国际?
    wince6.0 S5pv210 之Sate210 VGA 镜像1440*900@60HZ/1280*1024@70HZ分辨率测试镜像(南嵌电子科技作品)
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14880532.html
Copyright © 2011-2022 走看看