知识大全 检测你数据库连接的物理状态

Posted

篇首语:案头见蠹鱼,犹胜凡俦侣。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 检测你数据库连接的物理状态相关的知识,希望对你有一定的参考价值。

  检测你数据库连接的物理状态    ZDNet China      / /     URL:     创建连接        Java JDBC API各种类的一个基石是java sql Connection类 很多问题都同其复用 共用和验证相关 对连接的验证在实时的应用程序中尤其重要 因为它们必须无故障运行或者将故障率降至最低         事实上 在很多情况下都可能产生连接的丢失(例如 由于数据库的崩溃或者由于某些网络问题的存在) 不幸的是 标准的Java API并没有提供任何方法来检测连接的物理状态 所以在每种特定的情况下都需要一种解决方法 现在让我们来看看解决这个问题的两种方法 第一种方法是使用软件制造商专用的API 第二种方法是使用一种检测 失败查询(test fail query)的方法                 创建连接        在使用任何SQL陈述式之前 应用程序必须要先连接到数据库 建立连接的一种方法是使用java sql工具包里的连接工厂(connection factory)——DriverManager getConnection() 但是 建立连接的首选方式是使用javax sql DataSource getConnection() 你应该在对象每次请求进行连接的时候才使用这个工厂方法 而不是在创建了连接之后将这个连接保存在对象里 下面是这个方法的一个例子         void foo()    //     Connection conn = myDataSource getConnection();    PreparedStatement ps = conn prepareStatement( );    //             此外 一个实现DataSource接口的类能够使用命名服务来注册 并使用JNDI API来访问 DriverManager连接工厂和DataSource的巨大不同之处在于 DataSource能够允许你控制连接的建立和使用                 连接错误的问题        当你的应用程序尝试使用一个已经同数据库断开的连接时 你会碰到一个像下面这样的异常         java sql SQLException: Io exception: The Neork Adapter could not establish the connection(lo异常 网络适配器无法建立连接)        其结果是 你的SQL查询会执行失败 由于没有哪个API能够确定一个到数据库的连接是否失效 因此你就只有在碰到SQL异常的时候才知道这个连接已经失效了 如果一个异常是同一个已断开的连接相对应的 那么你就必须要调整这个应用程序 这样它才能够尝试重新建立连接 并重新执行查询任务 很显然 这种处理数据库连接的混乱商务逻辑使得代码更容易出错 而且难以管理                 信赖软件制造商的API            信赖软件制造商的API         处理连接断开的一种方法是使用驱动程序专用的API 你可以使用这个API来建立到数据库的连接 现在让我们来看看Oracle的JDBC API OracleConnectionCacheImpl这个类会实现javax DataSource接口 并在你每次请求的时候验证一下连接 此外 它还能够通过缓冲随后请求的连接来重复使用这个连接 换句话说 如果你关闭了数据库 然后尝试使用一个连接 你就会得到一个明确阐明了原因的SQL异常 看看Listing A 里面有数据源用法的一个例子         验证连接    另一个解决方案是你自己进行连接验证 你可以编写一个连接工厂 让其将连接返回给请求者之前检测连接的情况 将验证机制从连接工厂里抽象出来是一个很好的代码编写惯例 要实现这一目的 你就要应用GoF策略模式 它会引入一个负责进行连接验证的接口   类图表        Listing B里的AbstractDataSource类提供了DataSource接口的基础实现 这样就为设置和访问连接的属性 包括JDBC驱动程序类 URL 用户名和密码 提供了便利的方法         这个类的确切实现有JdbcDataSource(Listing C)和ValidDataSource(Listing D) Listing C里的类为每个请求都创建了一个Connection对象 Listing E里的类通过使用ConnectionValidator从而提供了连接验证的能力         Listing F里的SqlConnectionValidator是这个接口的简单实现 在这个接口里 一个快速的SQL查询会被执行 以验证你认为需要进行验证的连接 你的这一目的是通过调用validateConnection(Connection conn)方法来实现的 它会在碰到任何连接问题的时候给出一个SQL异常                 验证的好处        无论你选择使用哪种方法 建立一个有效的数据库连接都是极其重要的 尤其是在处理关键的实时应用程序的时候 虽然定制连接验证这种方式能够为你提供更好的灵活性和API的独立性 但是同使用软件制造商所提供的API相比而言 它会降低整体的性能 你必须决定 增强可控制性所带来的好处 同相应所增加的复杂性和代价相比是否值得    cha138/Article/program/Java/hx/201311/25802

相关参考

知识大全 oracle物理结构和逻辑结构

  oracle物理结构和逻辑结构物理结构查看oracle数据库的物理文件路径一定要用命令查看除非该数据库是你亲自安装并做过所有的安全配置否则非常有可能你的前任对数据库进行了更改而在一不小心酿成大错 

开放数据网络中标准通信协议各层有什么主要功能?

  物理层:提供通信介质和连接的机械、电气功能的有关规程,诸如信号的表示方法通信介质、传送速率、接插头的规格及使用规则等,该层并作为链路目的基础,以便在数据链路实体之间建立、维护和拆除物理连接。  链

开放数据网络中标准通信协议各层有什么主要功能?

  物理层:提供通信介质和连接的机械、电气功能的有关规程,诸如信号的表示方法通信介质、传送速率、接插头的规格及使用规则等,该层并作为链路目的基础,以便在数据链路实体之间建立、维护和拆除物理连接。  链

水电厂计算机监控系统数据处理功能要求?

  二锅头  1模拟量数据处理:  应包括模拟数据的滤波、数据合理性检查、工程单位变换、模拟数据变化及越限检测等,并根据规定产生报警和报告。  2状态数据处理:  应包括防抖滤波、状态输入变化检测,并

水电厂计算机监控系统数据处理功能要求?

  二锅头  1模拟量数据处理:  应包括模拟数据的滤波、数据合理性检查、工程单位变换、模拟数据变化及越限检测等,并根据规定产生报警和报告。  2状态数据处理:  应包括防抖滤波、状态输入变化检测,并

现场总线与局域网的区别?

  (1)按功能比较,现场总线连接自动化最底层的现场控制器和现场智能仪表设备,网线上传输的是小批量数据信息,如检测信息、状态信息、控制信息等,传输速率低,但实时性高。简而言之,现场总线是一种实时控制网

现场总线与局域网的区别?

  (1)按功能比较,现场总线连接自动化最底层的现场控制器和现场智能仪表设备,网线上传输的是小批量数据信息,如检测信息、状态信息、控制信息等,传输速率低,但实时性高。简而言之,现场总线是一种实时控制网

知识大全 检测、建立数据库别名和表格

  对于BDE会话期对象来说BDE别名特别重要许多方法都需要传递一个数据库的别名作为参数Tsession提供了管理BDE别名的功能   但是作者往往等到要发布程序时才发现你的程序由于找不到别

智能建筑工程建筑设备监控系统功能应怎样检测?

  建筑设备监控系统与带有通信接口的各子系统以数据通信的方式相联时,应在工作站监测子系统的运行参数(含工作状态参数和报警信息),并和实际状态核实,确保准确性和响应时间符合设计要求;对可控的子系统,应检

智能建筑工程建筑设备监控系统功能应怎样检测?

  建筑设备监控系统与带有通信接口的各子系统以数据通信的方式相联时,应在工作站监测子系统的运行参数(含工作状态参数和报警信息),并和实际状态核实,确保准确性和响应时间符合设计要求;对可控的子系统,应检