Struts的概念及体系结构与工作原理 - 编程入门网
e ();
...
java.sql.RowId rid = cstmt.getRowId (2);
在此,RowId可以用于唯一地参考一行并因此可被用于检索或更新行数据。当使用RowId参考来存取或更新数据时,理解生命周期的有效性是十分重要的,从而保证结果的连续性。另外,我还建议你同时使用另一个参考,例如主键,以避免在能够透明地改变RowId的情况下出现不连续的结果。 RowId值还可以被设置或更新。在一种可更新的ResultSet情况下,可以针对表中的一个特定的行使用updateRowId()方法来更新RowId。 另外,PreparedStatement和CallableStatement接口都支持setRowId()方法(其形式不一样),该方法把RowId设置为一个参数值。这个值可以用于针对表中的一个特定的行来参考数据行或更新RowId值。 由上面可知,开发者可以非常容易地设置或更新RowId;这为控制唯一的行标识符并为使这些标识符具有跨表唯一性提供了极大的灵活性。也许,跨表支持的数据源的RowId的可移植性还能够通过在这些数据源间显式地设置一致值来实现。然而,因为系统生成的RowId经常是有效的,并且可以通过透明的操作来改变RowId;所以,最好在一个应用程序中把它们用作只读属性。 六、利用非标准供应商实现的资源 新型的JDBC API中定义了一个java.sql.Wrapper接口。通过检索代理实例并使用相应的包装代理实例,这个接口提供了存取数据源供应商特定资源的能力。 这个包装接口拥有17个子接口,并且包括Connection,ResultSet,Statement,CallableStatement,PreparedStatement,DataSource,DatabaseMetaData和ResultSetMetaData,等等。这是一种优秀的设计,因为它方便了在创建查询和"结果-设置-检索"生命周期的几乎每一个阶段使用数据源供应商特定的资源。 unwrap()方法返回实现给定接口的对象,从而允许存取供应商特定的方法。isWrapperFor()方法返回一个Boolean值-如果它实现了该接口则返回true;或者,它也有可能直接或间接地成为对象的一个包装类。 作为一个例子,当使用Oracle时,Oracle JDBC驱动程序提供了更新批扩展-与标准JDBC批更新机制相比,它具有更好的性能且更为有效。对于早期的JDBC版本来说,这意味着要在代码中使用Oracle特定的定义,例如OraclePreparedStatement。这样以来就减弱了代码的可移植性。而借助于现在新型的API,许多前面这些有效的实现都能够被包装和被暴露在标准JDBC定义中。 七、针对驱动程序加载的服务提供者机制 在JDBC 4.0以前,在一种非托管的或独立的程序中,你必须显式地通过调用Class.forName方法来加载JDBC驱动器类,如列表4所示: 列表4.Class.forName方法
借助于JDBC 4.0,如果JDBC驱动程序供应商把他们的驱动程序打包为服务(在服务提供者机制下定义为每一种JAR规范),那么DriverManager代码将通过在classpath中搜索它来隐式地装载该驱动程序。这种机制的优点在于,开发者不需要了解这种特定的驱动程序类,并且能够使用JDBC来编写较少的代码实现。另外,既然驱动程序类名不再存在于代码中,那么只改变一个名字并不要求重新编译。如果在classpath中指定了多个驱动程序,那么DriverManger将试图使用它在classpath中所找到的第一个驱动程序来创建一种连接,并且在需要时能够继续遍历下一个驱动程序。 八、结论 在本文中,我们一同探讨了JDBC 4.0的一些新的和改进的特征。从中可以看出,许多新特征进一步便利了开发,从而提高了开发者的生产效率。另一方面,该规范并没有消除对于其它JDBC框架提供的模板化工具和高级异常处理能力的使用。然而,对该规范也存在一些批评。例如,一些人认为注释的使用会导致在代码中硬编码(而这往往导致在代码维护阶段出现问题)。究其实效,还有 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |