可以使用ParameterMetaData对象来获取与PreparedStatement对象或者CallableStatement对象有关的信息。这些参数由”?”占位符表示,”?”占位符是提供给Connection方法prepareStatement和prepareCall的SQL语句。下面的代码行使用两个参数占位符来创建一个PreparedStatement对象。
PreparedStatement pstmt=con.prepareStatement(“select id from employees where dept=? and salary>?”);
这些参数根据其序号来编号,因此第一个参数编号1,第二个参数编号2,依此类推。在上面的代码行中,参数1是列dept中的一个值,参数2是salary中的一个值。下面的代码段用于找出PreparedStatement pstmt有多少个参数。首先创建pstmt并用它来创建ParameterMetaData对象pmd,这个对象包含与pstmt中的参数有关的信息。接着调用pmd上的方法getColumnCount来找出pstmt有多少参数。
JDBC 3.0API中新增的方法示例
JDBC 3.0 API引入了这样一种应用功能,即决定在已经调用commit方法来终止事务之后,ResultSet对象是否仍旧打开。这个功能即为结果集可保持性。ResultSet中加入了两个域HOLD_CURSORS_OVER_COMMIT和 CLOSE_CURSORS_AT_COMMIT,这些域可以用于指定ResultSet对象的可保持性,这些常量可以提供给创建Statement、PreparedStatement和CallableStatement对象的Connection方法,还可以作为提供给DataBaseMetaData方法supportResultSetHoldability的可能的参数值。
在下面的代码段中,首先判断驱动程序是否支持ResultSet可保持性,如果支持,则接着创建会生成带有可保持性游标的ResultSet对象的Statement对象,另外此代码还指定了stmt在执行查询时产生的ResultSet对象的类型和并发模式。 if (Boolean b =dbms.supportsResultSetHoldability( ResultSet. HOLD_CURSORS_OVER_COMMIT){ Statement.stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE, ResultSet.HOLD_CURSORS_OVER_COMMIT); } 参考《JDBC API Reference》 Maydene Fisher etc. 著
RowSet
RowSet对象是表格式数据的容器,封装了一组从数据源获取得数据行。在RowSet接口的基本实现中是从JDBC数据源中获取数据行。由于行集是可以定制的,所以行集中的数据可以来自电子数据表、flat文件(平面文件?)或者其他任何表格式样的数据源。RowSet对象是ResultSet接口的扩展,这就意味着RowSet对象是可滚动的、可更新的,并且能够执行ResultSet对象可以执行的任何操作。
RowSet对象不同于ResultSet对象,它是JavaBean组件,因此,该对象有JavaBean属性,并遵循其事件模型。另外RowSet对象的属性也允许该对象建立自己的数据库连接,执行自己的查询。此外,RowSet可以是disconnected的,也就是说使用行集的过程中,不必一直保持到数据源的打开连接。另外,行集可以串行化,所以可以通过网络把它发送到远程对象中去。
通常情况下,JDBC API可以分为两类:RowSet部分和驱动程序部分。RowSet以及支持它的接口使用其他JDBC API实现。从逻辑上来说,可以把实现RowSet接口的类看作是执行在JDBC驱动程序的上一层的软件。