import java.io.PrintWriter;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.sql.Connection;import java.sql.SQLException;import java.util.LinkedList;import javax.sql.DataS
import java.io.PrintWriter; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.sql.Connection; import java.sql.SQLException; import java.util.LinkedList; import javax.sql.DataSource; import com.itheima.util.JdbcUtil; //标准的数据库连接池。按照字面意思,一般叫做数据源(都是带池的,为了提高效率) public class MyDataSource implements DataSource { private static LinkedList<Connection> pool = new LinkedList<Connection>(); static{ try { //池进行初始化:10个连接 for(int i=0;i<10;i++){ pool.add(JdbcUtil.getConnection()); } } catch (Exception e) { throw new ExceptionInInitializerError("数据库连接池初始化失败"); } } //返回它的包装类,会拦截connection中的所有方法 @Override public synchronized Connection getConnection() throws SQLException { if(pool.size()>0){ final Connection conn = pool.removeFirst();//原来的数据的connection实现。被包装类 Connection proxyconn = (Connection)Proxy.newProxyInstance(conn.getClass().getClassLoader(), conn.getClass().getInterfaces(), new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println(method.getName()); if("close".equals(method.getName())){ return pool.add(conn); }else{ return method.invoke(conn, args); } } }); return proxyconn; }else throw new RuntimeException("服务器忙"); } @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 <T> T unwrap(Class<T> iface) throws SQLException { return null; } @Override public boolean isWrapperFor(Class<?> iface) throws SQLException { return false; } @Override public Connection getConnection(String username, String password) throws SQLException { return null; } }
package com.jxnu.util; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; //通用的工具类:与具体数据库没有关系 public class JdbcUtil { private static String driverClass; private static String url; private static String username; private static String password; static{ try { //加载配置文件 InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("dbcfg.properties"); Properties props = new Properties(); props.load(in); driverClass = props.getProperty("driverClass"); url = props.getProperty("url"); username = props.getProperty("username"); password = props.getProperty("password"); Class.forName(driverClass); } catch (Exception e) { throw new ExceptionInInitializerError(e); } } //获取数据库的连接 public static Connection getConnection() throws Exception{ Connection conn = DriverManager.getConnection(url, username, password); return conn; } //释放占用的资源 public static void release(ResultSet rs,Statement stmt,Connection conn){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(stmt!=null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
测试:
package com.jxnu.pool04; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import org.junit.Test; public class Dao1Impl { MyDataSource ds = new MyDataSource(); @Test public void add(){ Connection conn = null; Statement stmt = null; try{ conn = ds.getConnection(); stmt = conn.createStatement(); //com.mysql.jdbc.Connection :MySQL //com.oracle.jdbc.Connection :Oracle //... System.out.println(conn.getClass().getName()); }catch(Exception e){ e.printStackTrace(); }finally{ if(conn!=null){ try { conn.close();//把连接给关了。不应该关,放回池中,怎么放回池中呢?连接池重点所在 } catch (SQLException e) { e.printStackTrace(); } } } } }


当PowerBI无法连接到XLS、SQL或Excel文件的数据源时,可能会遇到困难。本文将探讨可能的解决方案,以帮助您解决这一问题。如果您在连接过程中遇到错误或连接失败的情况,本文将指导您采取一些措施。因此,如果您面临这个问题,请继续阅读,我们将为您提供一些有用的建议。PowerBI中的网关连接错误是什么?PowerBI中的网关错误通常是由数据源信息与底层数据集不匹配引起的。要解决这个问题,需要确保本地数据网关上定义的数据源与PowerBI桌面中指定的数据源是准确且一致的。PowerBI无法连接

如何使用C#编写布隆过滤器算法布隆过滤器(BloomFilter)是一种空间效率非常高的数据结构,可以用于判断一个元素是否属于集合。它的基本思想是通过多个独立的哈希函数将元素映射到一个位数组中,并将对应位数组的位标记为1。当判断一个元素是否属于集合时,只需要判断对应位数组的位是否都为1,如果有任何一位为0,则可以判定元素不在集合中。布隆过滤器具有快速查询和

如何使用C#编写动态规划算法摘要:动态规划是求解最优化问题的一种常用算法,适用于多种场景。本文将介绍如何使用C#编写动态规划算法,并提供具体的代码示例。一、什么是动态规划算法动态规划(DynamicProgramming,简称DP)是一种用来求解具有重叠子问题和最优子结构性质的问题的算法思想。动态规划将问题分解成若干个子问题来求解,通过记录每个子问题的解,

酒店预订系统是一种重要的信息管理系统,它可以帮助酒店实现更高效的管理和更良好的服务。如果你想学习如何使用C++来编写一个简单的酒店预订系统,那么本文将为您提供一个基本的框架和详细的实现步骤。酒店预订系统的功能需求在开发酒店预订系统之前,我们需要确定其实现的功能需求。一个基本的酒店预订系统至少需要实现以下几个功能:(1)客房信息管理:包括客房类型、房间号、房

如何使用C++编写一个简单的学生选课系统?随着科技的不断发展,计算机编程已经成为了一种必备的技能。而在学习编程的过程中,一个简单的学生选课系统可以帮助我们更好地理解和应用编程语言。在本文中,我们将介绍如何使用C++编写一个简单的学生选课系统。首先,我们需要明确这个选课系统的功能和需求。一个基本的学生选课系统通常包含以下几个部分:学生信息管理、课程信息管理、选

如何用Python编写KNN算法?KNN(K-NearestNeighbors,K近邻算法)是一种简单而常用的分类算法。它的思想是通过测量不同样本之间的距离,将测试样本分类到最近的K个邻居中。本文将介绍如何使用Python编写并实现KNN算法,并提供具体的代码示例。首先,我们需要准备一些数据。假设我们有一组二维的数据集,每个样本都有两个特征。我们将数据集分

如何通过C++编写一个简单的扫雷游戏?扫雷游戏是一款经典的益智类游戏,它要求玩家根据已知的雷区布局,在没有踩到地雷的情况下,揭示出所有的方块。在这篇文章中,我们将介绍如何使用C++编写一个简单的扫雷游戏。首先,我们需要定义一个二维数组来表示扫雷游戏的地图。数组中的每个元素可以是一个结构体,用于存储方块的状态,例如是否揭示、是否有雷等信息。另外,我们还需要定义

如何使用C#编写二分查找算法二分查找算法是一种高效的查找算法,它在有序数组中查找特定元素的位置,时间复杂度为O(logN)。在C#中,我们可以通过以下几个步骤来编写二分查找算法。步骤一:准备数据首先,我们需要准备一个已经排好序的数组作为查找的目标数据。假设我们要在数组中查找特定元素的位置。int[]data={1,3,5,7,9,11,13


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

Dreamweaver Mac version
Visual web development tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

Atom editor mac version download
The most popular open source editor

SublimeText3 Linux new version
SublimeText3 Linux latest version
