数据库连接池 爱被打了一巴掌 2021-09-10 05:40 610阅读 0赞 传统的jdbc连接数据库方式如下: 我们需要几个步骤:注册 JDBC 驱动程序注册( Class.forName(DRIVER\_NAME) ),通过DriverManager获取物理连接。 一次数据库访问对应一个物理连接,每次操作数据库都要打开、关闭该物理连接。 添加mysql驱动包 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.30</version> </dependency> jdbc操作类如下: public class DBUtil { private static Logger logger = LoggerFactory.getLogger(DBUtil.class); private static String DRIVER_NAME = null; private static String URL = null; private static String USER_NAME = null; private static String PWD = null; private static Properties properties = new Properties(); static { try { properties.load(DBUtil.class.getResourceAsStream("/jdbc.properties")); } catch (IOException e) { logger.error("系统加载jdbc.properties配置异常"); } DRIVER_NAME = properties.getProperty("jdbc.driver"); URL = properties.getProperty("jdbc.url"); USER_NAME = properties.getProperty("jdbc.username"); PWD = properties.getProperty("jdbc.password"); try { Class.forName(DRIVER_NAME); } catch (ClassNotFoundException e) { logger.error("加载数据库驱动异常"); } } public static Connection getConnection() { Connection connection = null; try { connection = DriverManager.getConnection(URL, USER_NAME, PWD); } catch (SQLException e) { logger.error("创建数据库链接异常", e); } return connection; } public static void close(Connection connection) { if (connection != null) { try { if (!connection.isClosed()) { connection.close(); } } catch (SQLException e) { logger.error("连接关闭异常", e); } } } public static void close(Connection connection, Statement statement, ResultSet resultSet) { if (resultSet != null) { try { if (!resultSet.isClosed()) { resultSet.close(); } } catch (SQLException e) { logger.error("结果集关闭异常", e); } } if (statement != null) { try { if (!statement.isClosed()) { statement.close(); } } catch (SQLException e) { logger.error("语句关闭异常", e); } } close(connection); } } 我们采用DBCP(DataBase connection pool),数据库连接池。DBCP是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。 添加dbcp依赖,对应commons-pool和commons-dbcp两个包 <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> 使用连接池,代码如下: public class DBCPUtil { private static Logger logger = LoggerFactory.getLogger(DBUtil.class); private static Properties properties = new Properties(); private static DataSource dataSource; static { try { properties.load(DBCPUtil.class.getResourceAsStream("/jdbc.properties")); } catch (IOException e) { logger.error("系统加载jdbc.properties配置异常"); } try { dataSource= BasicDataSourceFactory.createDataSource(properties); } catch (Exception e) { logger.error("加载数据库驱动异常"); } // dataSource=new BasicDataSource(); // dataSource.setUsername("root"); // dataSource.setPassword("root"); // dataSource.setUrl("jdbc:mysql://localhost:3306/web"); // dataSource.setDriverClassName("com.mysql.jdbc.Driver"); } public static Connection getConnection() { Connection connection = null; try { connection=dataSource.getConnection(); connection.setAutoCommit(true); } catch (SQLException e) { logger.error("创建数据库链接异常", e); } return connection; } public static void close(Connection connection) { if (connection != null) { try { if (!connection.isClosed()) { connection.close(); } } catch (SQLException e) { logger.error("连接关闭异常", e); } } } public static void close(Connection connection, Statement statement, ResultSet resultSet) { if (resultSet != null) { try { if (!resultSet.isClosed()) { resultSet.close(); } } catch (SQLException e) { logger.error("结果集关闭异常", e); } } if (statement != null) { try { if (!statement.isClosed()) { statement.close(); } } catch (SQLException e) { logger.error("语句关闭异常", e); } } close(connection); } } 注意properties的配置 和jdbc是不同的。 我因为还用原来的配置,报错空指针,Cannot create JDBC driver of class '' for connect URL 'null' ,找了半天Bug #jdbc.driver=com.mysql.jdbc.Driver #jdbc.url=jdbc:mysql://localhost:3306/web?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8 #jdbc.username=root #jdbc.password=root driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/web?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8 username=root password=root JDBC的数据库连接池使用javax.sql.DataSource来表示,DataSource只是一个接口,该接口通常由商用服务器等提供实现,也有一些开源组织提供实现(DBCP、C3P0)。 DataSource通常被称为数据源,它包含连接池和连接池管理两个部分,但习惯上也经常把DataSource称为连接池。 数据源连接池的方式连接数据库是在程序中,通过向一个JNDI(Java Naming and Directory Interface)服务器查询,即调用Context接口的lookup()方法,来得到DataSource对象,然后调用DataSource对象的getConnection()方法建立连接 在代码中使用DriverManager获得数据库连接的方式中,客户程序得到的连接对象是物理连接,调用连接对象的close()方法将关闭连接,而采用连接池技术,客户程序得到的连接对象是连接池中物理连接的一个句柄,调用连接对象的close()方法,物理连接并没有关闭,数据源的实现只是删除了客户程序中的连接对象和池中的连接对象之间的联系. 关于jndi,可以参考:[http://benweizhu.github.io/blog/2014/07/07/learning-jdbc-with-jndi/][http_benweizhu.github.io_blog_2014_07_07_learning-jdbc-with-jndi] [http_benweizhu.github.io_blog_2014_07_07_learning-jdbc-with-jndi]: https://link.jianshu.com?t=http%3A%2F%2Fbenweizhu.github.io%2Fblog%2F2014%2F07%2F07%2Flearning-jdbc-with-jndi%2F
相关 数据库-----数据库连接池 @百度百科 ![Center][] [Center]: /images/20220721/39979dcdad014fb6a1579254a5398d26.png 古城微笑少年丶/ 2022年09月21日 11:56/ 0 赞/ 315 阅读
相关 数据库连接池 连接池原理 连接池技术的核心思想是:连接复用,通过建立一个数据库连接池以及一套连接使用、分配、治理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立 水深无声/ 2022年08月02日 09:37/ 0 赞/ 58 阅读
相关 数据库连接池 author:skate time:2010-10-13 -------------------- 数据库连接池的工作原理 连接池就是连接数据库对象的缓冲存 柔情只为你懂/ 2022年07月14日 16:46/ 0 赞/ 48 阅读
相关 数据库连接池 数据库连接池 1.概述 > 数据库连接池就是存放数据库连接(Connection)的集合 > 我们获取一个数据库连接是一个相对很麻烦的过程,如果我们获取一个数据 电玩女神/ 2022年06月09日 05:28/ 0 赞/ 337 阅读
相关 数据库连接池 连接池:把连接放在一个池里,它里面有很多连接 会给你空闲的连接使用,Java从数据源里面的得到连接 (线程池把连接放进去,会有连接的标志--占用/空闲 你去拿时-- 给你/等 一时失言乱红尘/ 2022年05月16日 00:16/ 0 赞/ 374 阅读
相关 数据库连接池 public class java_数据库连接池 { //1.定义变量 //管理数据连接池对象 private ComboPool 妖狐艹你老母/ 2022年05月11日 14:24/ 0 赞/ 247 阅读
相关 数据库连接池 连接池直接使用别人提供的就可以,需要做的就是导入jar包和配置文件的使用按照他们的规范 jar包有 (fastjson.jar包可以不要,这个是使用json和前端进行数据交 快来打我*/ 2022年05月04日 03:27/ 0 赞/ 369 阅读
相关 数据库连接池 要是考虑到JDBC连接中用到Connection 在每次对数据进行增删查改都要开启、关闭,在实例开发项目中,浪费了很大的资源。因此采用连接池技术。 //数据库连接 pub 秒速五厘米/ 2022年02月14日 00:27/ 0 赞/ 413 阅读
相关 数据库连接池 今日知识 1. c3p0和Druid使用 2. DBUtils使用 3. SpringJDBC轻量级框架 4. 总结 c3p0和Dru 小鱼儿/ 2021年11月29日 10:36/ 0 赞/ 492 阅读
相关 数据库连接池 传统的jdbc连接数据库方式如下: 我们需要几个步骤:注册 JDBC 驱动程序注册( Class.forName(DRIVER\_NAME) ),通过DriverManag 爱被打了一巴掌/ 2021年09月10日 05:40/ 0 赞/ 611 阅读
还没有评论,来说两句吧...