DBUtils
是一套允许线程化 Python
程序可以安全和有效的访问数据库的模块。DBUtils已经作为 Webware for Python
一部分用来结合 PyGreSQL
访问 PostgreSQL
数据库,他也可以用在其他Python应用程序中来访问 DB-API 2
兼容的数据库接口。
我的数据库是postgresql, python的模块用的是psycopg2。一直用的挺好,但是最近发现个问题:postgresql重启后,app server会报InterfaceError异常。我就纳闷鸟,难道DBUtils连接池中的实例没有自动重连数据库功能?? 但是用mysql时,重新启动数据库就没有这个问题。
展开google大法也不得解,没有办法只好扒DButils代码,终于发现问题拉。
我的DBUtils系介样子用滴:
DBPARAMS ={
'creator': psycopg2, #MySQLdb
'host': 'localhost',
'user': 'postgres',
'password': 'postgres',
'database': 'bob',
}
pool = PooledDB(maxusage=1000, **DBPARAMS)
用MySQLdb连接mysql时,如果mysql重启了,MySQLdb抛出OperationalError异常,DBUtils抓住后(SteadyDB.py346行),尝试重新连接mysql。很好, 没有问题。
用psycopg2连接postgresql时,如果postgresql重启了,psycopg2第一次抛出OperationalError异常, 之后一直抛InterfaceError异常,DBUtils默认的异常中没有对InterfaceError异常的处理。 完蛋!!
难道只能在DButils的源码中添加?? 见SteadyDB.py239行。
不过还好人家DBUtils早就意识到不同的DB-API2库可能会对数据库异常的处理有所不同,在PooledDB中有个failures参数,在连接postgresql时,手动指定异常InterfaceError即可。
DBPARAMS ={
'creator': psycopg2,
'failures': (psycopg2.InterfaceError, )
'host': 'localhost',
'user': 'postgres',
'password': 'postgres',
'database': 'bob',
}
分享到:
相关推荐
DBUtils还提供了异常处理和资源关闭的自动化功能,避免了手动关闭连接和Statement对象可能导致的内存泄露问题。总的来说,DBUtils通过简化JDBC操作,提高了代码的可读性和可维护性,降低了开发过程中出现错误的可能...
下面将详细解释这三个组件及其在数据库操作中的作用。 1. DBUtils: DBUtils是Apache软件基金会提供的一个开源Java库,它是基于Jakarta Commons项目的一个实用工具。DBUtils的主要目标是简化Java与关系型数据库之间...
DbUtils与JDBC结合使用,可以避免大量重复的数据库连接关闭、异常处理等代码,使数据库操作更加简洁、安全。DbUtils的核心类有QueryRunner、ResultSetHandler等,它们简化了常见的CRUD操作,比如执行SQL查询、更新、...
- 熟悉异常处理机制,理解`DbException`及其子类的作用。 - 了解批处理操作,提高大数据量操作的效率。 - 研究事务管理,理解如何在DBUtils中进行事务的控制。 通过深入学习和实践Apache DBUtils,开发者可以在日常...
DbUtils提供了一种简单的方式来执行SQL查询、更新和批处理操作,同时避免了常见的资源管理问题,如手动关闭连接和结果集。通过使用DbUtils,开发者可以更专注于业务逻辑,而不是数据库的底层细节,从而提高代码的...
- `QueryRunner`:创建查询运行器,可以不设置数据源,手动管理连接。 - `DbUtils.commitAndClose(conn)`:提交事务并关闭连接。 - `DbUtils.rollbackAndClose(conn)`:回滚事务并关闭连接。 1.2 分层架构与事务...
本文将详细介绍这两个类的原理和使用方法,并结合实际代码和配置文件,带你深入理解它们在数据库操作中的作用。 首先,QureyRunner类是DBUtils库中的一个核心组件,它提供了对SQL语句的执行支持。QureyRunner类的...
可以看到,虽然DbUtils简化了JDBC的使用,但仍然需要手动编写SQL语句和处理异常。相比之下,Hibernate则更加自动化,能够根据实体类自动生成相应的SQL语句,进一步减少了开发者的负担。 通过上述知识点的学习,初学...
它能够极大简化JDBC代码的编写工作,如手动设置参数和结果集的封装等。 - **核心特点**: - 支持XML配置和注解,方便进行原始映射; - 将接口和Java的POJO映射成数据库记录。 #### 二、MyBatis与其他框架的关系 -...
"springmvc_dbutils_plus"可能是生成器的一个版本或特定功能,可能意味着该生成器除了SSM框架外,还支持使用DbUtils库进行数据库操作,DbUtils是Apache的一个简单数据库操作工具,可以简化JDBC操作。 总的来说,...
在Java开发中,VO(Value Object)类通常用于在应用程序的不同层之间传递数据,比如...正确地设置映射配置,遵循良好的编程实践,可以使VO类在项目中发挥出其应有的作用,减少手动编码的工作量,并且降低错误的可能性。
- DBUtils工具库简化了数据库操作,但不一定要与连接池一起使用,也可以手动管理数据库连接。 12. **Tomcat初始化Servlet**: - Servlet的配置信息会被封装到ServletConfig对象中。 13. **Servlet映射路径**: ...
以下将详细解析这些类库以及它们在Java开发中的作用。 1. JDBC(Java Database Connectivity):JDBC是Java中用于访问数据库的标准API,包括SQLServer2000和Oracle在内的多种数据库都可以通过JDBC进行操作。`...
它包括`JdbcTemplate`和`NamedParameterJdbcTemplate`,可以避免手动管理数据库连接和事务,减少了SQL注入的风险。 4. **Hibernate ORM**: Hibernate是一个流行的Java对象关系映射(ORM)框架,它将Java对象与...
- **半自动ORM框架**:提供SQL语句映射机制,支持手动编写SQL并结合对象关系映射(ORM)特性。 - **灵活性**:允许直接编写SQL语句,易于优化查询性能。 #### 二、Mybatis环境搭建与配置 1. **项目结构**: - *...
首先,理解mapper.xml和mapper.java的作用是关键。mapper.xml文件是Mybatis中的SQL映射文件,它定义了数据库操作的SQL语句以及参数和结果映射。mapper.java文件则包含了与XML文件对应的接口,通过这些接口,Java代码...