扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
Java SE 6.0
Java SE 6.0版本的主要目标是提供兼容性、稳定性和高质量。这个版本中有几处有趣的增强,尤其是在监控与管理(JMX)、Web service、脚本语言支持(使用Rhino脚本引擎JSR 223将JavaScript技术与Java源代码集成在一起)、数据库连接性、注释支持和安全性方面。JDBC API中还增加了几个新功能,从新的RowId支持到更多的SQLException子类。
JDBC 4.0功能
借助Mustang中包含的Java SE Service Provider机制,Java开发人员不再需要使用像Class.forName()这样的代码显式地加载JDBC驱动程序,就能注册JDBC驱动程序。通过在调用DriverManager.getConnection()方法时自动定位合适的驱动程序,DriverManager类可以做到这一点。这个功能是向后兼容的,所以无需修改现有的JDBC代码。
在访问关系数据库的Java应用程序中,通过最小化我们需要编写的“模板”代码,JDBC 4.0还改善了开发人员体验。它还提供实用程序类,以改进JDBC驱动程序的注册和卸载机制,以及管理数据源和连接对象。
借助JDBC 4.0,Java开发人员现在可以使用Annotations指定SQL查询,从而利用Java SE 5.0(Tiger)版本中提供的元数据支持。基于注释的SQL查询允许在Java代码中使用Annotation关键字指定SQL查询字符串。这样,我们就不必在两个不同文件中查看JDBC代码以及这些代码中调用的数据库查询了。例如,如果有一个叫做getActiveLoans()的方法,用于获取贷款处理数据库中的当前贷款,可以使用@Query(sql="SELECT * FROM LoanApplicationDetails WHERE LoanStatus = 'A'")注释来修饰它。
此外,Java SE 6开发工具包(JDK 6)的最后版本——与运行时环境(JRE 6)相反——将会有一个基于与它绑定在一起的Apache Derby的数据库。这将帮助开发人员理解新的JDBC功能,而不必单独下载、安装和配置数据库产品。
JDBC 4.0中加入的主要功能包括:
还存在其他功能,比如对大对象(BLOB/CLOB)的改进支持和National Character Set Support。接下来的内容将会详细分析这些功
自动加载JDBC驱动程序
在JDBC 4.0中,调用getConnection方法时,不再需要使用Class.forName()显式地加载JDBC驱动程序,因为DriverManager将会试着从初始化时加载的以及使用与当前应用程序相同的类加载器显式加载的JDBC驱动程序中,找出合适的驱动程序来。
DriverManager方法getConnection和getDrivers已经增强为支持Java SE Service Provider机制(SPM)。根据SPM,服务被定义为一组众所周知的接口和抽象类,而服务提供程序则是服务的特定实现。它还指定在META-INF/services目录中保存服务提供程序配置文件。JDBC 4.0驱动程序必须包含文件META-INF/services/java.sql.Driver。这个文件包含JDBC驱动程序的java.sql.Driver实现的名称。例如,要加载JDBC驱动程序以连接到Apache Derby数据库,META-INF/services/java.sql.Driver文件就要包含以下项:
org.apache.derby.jdbc.EmbeddedDriver
让我们尽快了解如何使用这项新功能加载JDBC驱动程序管理器。下面的列表显示了加载JDBC驱动程序通常使用的示例代码。我们假定需要连接到一个Apache Derby数据库,因为我们在文章后面提到的示例应用程序中将使用这个数据库:
Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); Connection conn =DriverManager.getConnection(jdbcUrl, jdbcUser, jdbcPassword); |
但是在JDBC 4.0中,我们不需要Class.forName()这一行。我们只要调用getConnection()就可以获得数据库连接。
注意,这仅适用于在单机模式中获得数据库连接。如果使用某种数据库连接池来管理连接,代码将会有所区别。
连接管理
在JDBC 4.0之前,我们依赖于JDBC URL来定义数据源连接。现在有了JDBC 4.0,我们只要提供一组参数(比如主机名称和端口号)给标准的连接工厂机制,就能获得到任意数据源的连接。Connection和Statement接口中加入了新的方法,以便在管理池环境中的Statement对象时可以支持连接状态跟踪改进和更大的灵活性。元数据工具(JSR-175)用于管理活动连接。我们还可以获得元数据信息,比如活动连接的状态,还可以把连接指定为标准的(Connection,用于单机应用程序)、池化的(PooledConnection)或者甚至是用于XA事务的分布式连接(XAConnection)。注意,我们没有直接使用XAConnection。它是由诸如WebLogic、WebSphere或JBoss这样的Java EE应用服务器内部的事务管理器来使用的。
RowId支持
RowID接口被添加到JDBC 4.0中以支持ROWID数据类型,Oracle和DB2等数据库也支持这种数据类型。当有多条记录没有惟一标识符列,而且需要在不允许复制的Collection(比如Hashtable)中保存查询输出时,RowId很有用。我们可以使用ResultSet的getRowId()方法来获得RowId,并使用PreparedStatement的setRowId()方法在查询中使用RowId。
关于RowId对象要记住的一件重要事情是,分别在PreparedStatement和ResultSet中使用set或update方法时,RowId对象的值无法在数据源之间移植,可以认为它是特定于数据源的。所以,禁止在不同的Connection和ResultSet对象之间共享它。
DatabaseMetaData中的getRowIdLifetime()方法可用于确定RowId对象的生存期有效性。表1中列出了返回值或行id可能取的值。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者