关于Java Database Connectivity您不知道的5件事:提升您和JDBC API的关系 - 编程入门网
关于Java Database Connectivity您不知道的5件事:提升您和JDBC API的关系时间:2010-11-03 IBM Ted Neward关于Java Database Connectivity您不知道的5件事:提升您和JDBC API的关系 目前,许多开发人员把 Java Database Connectivity (JDBC) API 当作一种数据访问平台,比如 Hibernate 或 SpringMany。然而 JDBC 在数据库连接中不仅仅充当后台角色。对于 JDBC,您了解的越多,您的 RDBMS 交互效率就越高。 在本期 5 件事 系列 中,我将向您介绍几种 JDBC 2.0 到 JDBC 4.0 中新引入的功能。设计时考虑到现代软件开发所面临的挑战,这些新特性支持应用程序可伸缩性,并提高开发人员的工作效率 — 这是现代 Java 开发人员面临的两个最常见的挑战。 1. 标量函数 不同的 RDBMS 实现对 SQL 和/或增值特性(目的是让程序员的工作更为简单)提供不规则的支持。例如,众所周知,SQL 支持一个标量运算 COUNT(),返回满足特定 SQL 过滤规则的行数(更确切地说,是 WHERE 谓词)。除此之外,修改 SQL 返回的值是很棘手的 — 想要从数据库获取当前日期和时间会使 JDBC 开发人员、甚至最有耐心的程序员发疯(甚至是心力憔悴)。 于是,JDBC 规范针对不同的 RDBMS 实现通过标量函数提供一定程度的隔离/改写。JDBC 规范包括一系列受支持的操作,JDBC 驱动程序应该根据特定数据库实现的需要进行识别和改写。因此,对于一个支持返回当前日期和/或时间的数据库,时间查询应当如清单 1 那样简单: 清单 1. 当前时间?
JDBC API 识别的标量函数完整列表在 JDBC 规范附录中给出,但是给定的驱动程序或数据库可能不支持完整列表。您可以使用从 Connection 返回的 DatabaseMetaData 对象来获取给定 JDBC 支持的函数,如清单 2 所示: 清单 2. 能为我提供什么?
标量函数列表是从各种 DatabaseMetaData 方法返回的一个逗号分隔的 String。例如,所有数值标量由 getNumericFunctions() 调用列出,在结果上执行一个 String.split() — 瞧! — 即刻出现 equals()-testable 列表。 2. 可滚动 ResultSets 创建一个 Connection 对象,并用它来创建一个 Statement,这在 JDBC 中是最常用的。提供给 SQL SELECT 的 Statement 返回一个 ResultSet。然后,通过一个 while 循环(和 Iterator 没什么不同)得到 ResultSet,直到 ResultSet 为空,循环体从左到右的每次提取一列。 这整个操作过程是如此普遍,近乎神圣:它这样做只是因为它应该这样做。唉!实际上这是完全没必要的。 引入可滚动 ResultSet 许多开发人员没有意识到,在过去的几年中 JBDC 已经有了相当大的增强,尽管这些增强在新版本中已经有所反映。 第一次重大增强是在 JDBC 2.0 中,发生在使用 JDK 1.2 期间。写这篇文章时,JDBC 已经发展到了 JDBC 4.0。 JDBC 2.0 中一个有趣的增强(尽管常常被忽略)是 ResultSet 的滚动功能,这意味着您可以根据需要前进或者后退,或者两者均可。这样做需要一点前瞻性,然而 — JDBC 调用必须指出在创建 Statement 时需要一个可以滚动的 ResultSet。 关于Java Database Connectivity您不知道的5件事:提升您和JDBC API的关系(2)时间:2010-11-03 IBM Ted Neward验证 ResultSet 类型 如果您怀疑一个驱动程序事实上可能不支持可滚动的 ResultSets,不管 DatabaseMetaData 中是如何写的,您都要调用 getType() 来验证 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |