`
bobning
  • 浏览: 60837 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DBUtils手动设置异常的作用

阅读更多

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',
}
分享到:
评论

相关推荐

    JDBC连接数据库DBUtils操作数据库两个jar包

    DBUtils还提供了异常处理和资源关闭的自动化功能,避免了手动关闭连接和Statement对象可能导致的内存泄露问题。总的来说,DBUtils通过简化JDBC操作,提高了代码的可读性和可维护性,降低了开发过程中出现错误的可能...

    dbutils+c3p0

    下面将详细解释这三个组件及其在数据库操作中的作用。 1. DBUtils: DBUtils是Apache软件基金会提供的一个开源Java库,它是基于Jakarta Commons项目的一个实用工具。DBUtils的主要目标是简化Java与关系型数据库之间...

    JavaWeb需要用到的jar包_jar包_javaweb_commons-dbutils-1.3_

    DbUtils与JDBC结合使用,可以避免大量重复的数据库连接关闭、异常处理等代码,使数据库操作更加简洁、安全。DbUtils的核心类有QueryRunner、ResultSetHandler等,它们简化了常见的CRUD操作,比如执行SQL查询、更新、...

    apache中DBUtil学习共28页.pdf.zip

    - 熟悉异常处理机制,理解`DbException`及其子类的作用。 - 了解批处理操作,提高大数据量操作的效率。 - 研究事务管理,理解如何在DBUtils中进行事务的控制。 通过深入学习和实践Apache DBUtils,开发者可以在日常...

    java常用的jar包

    DbUtils提供了一种简单的方式来执行SQL查询、更新和批处理操作,同时避免了常见的资源管理问题,如手动关闭连接和结果集。通过使用DbUtils,开发者可以更专注于业务逻辑,而不是数据库的底层细节,从而提高代码的...

    day22--事务2

    - `QueryRunner`:创建查询运行器,可以不设置数据源,手动管理连接。 - `DbUtils.commitAndClose(conn)`:提交事务并关闭连接。 - `DbUtils.rollbackAndClose(conn)`:回滚事务并关闭连接。 1.2 分层架构与事务...

    QureyRunner 类和自编译的TxQureyRunner类,笔记和源码

    本文将详细介绍这两个类的原理和使用方法,并结合实际代码和配置文件,带你深入理解它们在数据库操作中的作用。 首先,QureyRunner类是DBUtils库中的一个核心组件,它提供了对SQL语句的执行支持。QureyRunner类的...

    Hibernate入门教程.pdf

    可以看到,虽然DbUtils简化了JDBC的使用,但仍然需要手动编写SQL语句和处理异常。相比之下,Hibernate则更加自动化,能够根据实体类自动生成相应的SQL语句,进一步减少了开发者的负担。 通过上述知识点的学习,初学...

    MyBatis教程

    它能够极大简化JDBC代码的编写工作,如手动设置参数和结果集的封装等。 - **核心特点**: - 支持XML配置和注解,方便进行原始映射; - 将接口和Java的POJO映射成数据库记录。 #### 二、MyBatis与其他框架的关系 -...

    ssm代码高级生成器.rar

    "springmvc_dbutils_plus"可能是生成器的一个版本或特定功能,可能意味着该生成器除了SSM框架外,还支持使用DbUtils库进行数据库操作,DbUtils是Apache的一个简单数据库操作工具,可以简化JDBC操作。 总的来说,...

    java根据数据库自动生成vo 类

    在Java开发中,VO(Value Object)类通常用于在应用程序的不同层之间传递数据,比如...正确地设置映射配置,遵循良好的编程实践,可以使VO类在项目中发挥出其应有的作用,减少手动编码的工作量,并且降低错误的可能性。

    javaweb期末考试试题及答案.docx

    - DBUtils工具库简化了数据库操作,但不一定要与连接池一起使用,也可以手动管理数据库连接。 12. **Tomcat初始化Servlet**: - Servlet的配置信息会被封装到ServletConfig对象中。 13. **Servlet映射路径**: ...

    java开发常用的类库集合

    以下将详细解析这些类库以及它们在Java开发中的作用。 1. JDBC(Java Database Connectivity):JDBC是Java中用于访问数据库的标准API,包括SQLServer2000和Oracle在内的多种数据库都可以通过JDBC进行操作。`...

    java常用包集合(包括各种数据库连接包)

    它包括`JdbcTemplate`和`NamedParameterJdbcTemplate`,可以避免手动管理数据库连接和事务,减少了SQL注入的风险。 4. **Hibernate ORM**: Hibernate是一个流行的Java对象关系映射(ORM)框架,它将Java对象与...

    Mybatis入门案例IDEA最新版本

    - **半自动ORM框架**:提供SQL语句映射机制,支持手动编写SQL并结合对象关系映射(ORM)特性。 - **灵活性**:允许直接编写SQL语句,易于优化查询性能。 #### 二、Mybatis环境搭建与配置 1. **项目结构**: - *...

    用java程序生成mybatis的mapper.xml和mapper.java文件

    首先,理解mapper.xml和mapper.java的作用是关键。mapper.xml文件是Mybatis中的SQL映射文件,它定义了数据库操作的SQL语句以及参数和结果映射。mapper.java文件则包含了与XML文件对应的接口,通过这些接口,Java代码...

Global site tag (gtag.js) - Google Analytics