现在的位置: 首页 > 综合 > 正文

JDBC API 2.0 简介

2013年01月07日 ⁄ 综合 ⁄ 共 3608字 ⁄ 字号 评论关闭

9.2  JDBC API 2.0 简介
9.2.1  新的记录集接口(ResultSet接口)
1 新定义了若干个常数
这些常数用于指定ResultSet的类型 游标移动的方向等性质 如下所示 
public static final int FETCH_FORWARD;
public static final int FETCH_REVERSE;
public static final int FETCH_UNKNOWN;
public static final int TYPE_FORWARD_ONLY;
public static final int TYPE_SCROLL_INSENSITIVE;
public static final int TYPE_SCROLL_SENSITIVE;
public static final int CONCUR_READ_ONLY;
public static final int CONCUR_UPDATABLE;
FETCH_FORWORD 该常数的作用是指定处理记录集中行的顺序是由前到后 即从第一行开始处理 一直到最后一行 
FETCH_REVERSE 该常数的作用是指定处理记录集中行的顺序是由后到前 即从后一行开始处理 一直到第一行 
FETCH_UNKNOWN 该常数的作用是不指定处理记录集中行的顺序 由 JDBC 驱动程序和数据库系统决定 
TYPE_FORWARD_ONLY 该常数的作用是指定数据库游标的移动方向是向前 不允许向后移动 即只能使用ResultSet接口的next()方法 而不能使用 previous()方法 否则会产生错误 
TYPE_SCROLL_INSENSITIVE 该常数的作用是指定数据库游标可以在记录集中前后
移动 并且当前数据库用户获取的记录集对其他用户的操作不敏感 就是说 当前用户正
在浏览记录集中的数据 与此同时 其他用户更新了数据库中的数据 但是当前用户所获
取的记录集中的数据不会受到任何影响 
TYPE_SCROLL_SENSITIVE 该常数的作用是指定数据库游标可以在记录集中前后移动 并且当前数据库用户获取的记录集对其他用户的操作敏感 就是说 当前用户正在浏览记录集 但是其它用户的操作使数据库中的数据发生了变化 当前用户所获取的记录集中的数据也会同步发生变化 这样有可能会导致非常严重的错误产生 建议慎重使用该常数 
CONCUR_READ_ONLY 该常数的作用是指定当前记录集的协作方式(concurrency mode)为只读 一旦使用了这个常数 那么用户就不可以更新记录集中的数据  CONCUR_UPDATABLE 该常数的作用是指定当前记录集的协作方式(concurrency mode)为可以更新 一旦使用了这个常数 那么用户就可以使用 updateXXX()等方法更新记录集中的数据 
2 ResultSet接口提供了一整套的定位方法
这些可以在记录集中定位到任意一行 具体有 
public boolean absolute(int  row);  该方法的作用是将记录集中的某一行设定为当前行 亦即将数据库游标移动到指定的行 参数 row指定了目标行的行号 这是绝对的行号由记录集的第一行开始计算 不是相对的行号 
public boolean relative(int  rows);  该方法的作用也是将记录集中的某一行设定为当前行 但是它的参数 rows表示目标行相对于当前行的行号 例如当前行是第3行 现在需要移动到第5行去 既可以使用absolute()方法 也可以使用 relative()方法 代码如下 
例 
rs.absolute(5);
或者
rs.relative(2);
其中rs代表ResultSet接口的实例对象 
又如当前行是第5行 需要移动到第 3行去 代码如下 
例 
rs.absolute(3);
或者
rs.relative(-2);
其中rs代表ResultSet接口的实例对象 
读者需要注意的问题是 传递给 relative()方法的参数 如果是正数 那么数据库游标向前移动 如果是负数 那么数据库游标向后移动 
注意 在本章中所说的数据库游标向前移动是指向行号增大的方向移动 向后移动是指向行号减少的方向移动 
public boolean first();  该方法的作用是将当前行定位到数据库记录集的第一行 
public boolean last();  该方法的作用刚好和 first()方法相反 是将当前行定位到数据库记录集的最后一行 
public boolean isFirst();  该方法的作用是检查当前行是否记录集的第一行 如果是返回true 否则 返回false 
public boolean isLast();   该方法的作用是检查当前行是否记录集的最后一行 如果是 返回true 否则 返回false 
public void afterLast();  该方法的作用是将数据库游标移到记录集的最后 位于记录集最后一行的后面 如果该记录集不包含任何的行 该方法不产生作用 
public void beforeFirst();   该方法的作用是将数据库游标移到记录集的最前面 位于记录集第一行的前面 如果记录集不包含任何的行 该方法不产生作用 
public boolean isAfterLast();  该方法检查数据库游标是否处于记录集的最后面 如果是 返回true 否则 返回false 
public boolean isBeforeFirst();  该方法检查数据库游标是否处于记录集的最前面 如果是 返回true 否则 返回false 
public boolean next();  该方法的作用是将数据库游标向前移动一位 使得下一行成为当前行 当刚刚打开记录集对象时 数据库游标的位置在记录集的最前面 第一次使用 next()方法 将会使数据库游标定位到记录集的第一行 第二次使用 next()方法 将会使数据库游标定位到记录集的第二行 以此类推 
注意 如果在当前行打开了一个输入流(Input Stream) 那么再次使用 next()方法时将会自动关闭该输入流 
public boolean previous();  该方法的作用是将数据库游标向后移动一位 使得上一行成为当前行 
3 ResultSet接口添加了对行操作的支持
使用JDBC API 2.0 不仅可以任意将数据库游标定位到记录集中的特定行 而且还可以使用ResultSet接口新定义的一套方法更新当前行的数据 在以前 如果Java程序员希望更新记录集中某行的数据 必须发送 SQL 语句给数据库 程序员需要在 Java 代码中嵌入冗长的SQL语句 用以执行 UPDATE DELETE INSERT 等数据库操作 但是 当JDBC API 2.0 出现时 一切就都改变了 程序员已经可以部分抛开 SQL语言 享受Java编程的乐趣了 ResultSet接口中新添加的部分方法如下所示 
public boolean rowDeleted();  如果当前记录集的某行被删除了 那么记录集中将会留
出一个空位 调用rowDeleted()方法 如果探测到空位的存在 那么就返回 true 如果没有探测到空位的存在 就返回false值 
public boolean rowInserted();   如果当前记录集中插入了一个新行 该方法将返回true 否则返回false 
public boolean rowUpdated();   如果当前记录集的当前行的数据被更新 该方法返回true 否则返回false 
public void insertRow();   该方法将执行插入一个新行到当前记录集的操作 
public void updateRow();   该方法将更新当前记录集当前行的数据 
public void deleteRow();  该方法将删除当前记录集的当前行 
public void updateString(int columnIndex String x);  该方法更新当前记录集当前行某列的值 该列的数据类型是 String(指 Java 数据类型是 String 与之对应的 JDBC 数据类型是VARCHAR或NVARCHAR 等数据类型) 该方法的参数 columnIndex指定所要更新的列的列索引 第一列的列索引是 1 以此类推 第二个参数 x 代表新的值 这个方法并不执行数据库操作 需要执行 insertRow()方法或者 updateRow()方法以后 记录集和数据库中的数据才能够真正更新 
public void updateString(String    columnName String    x);  该方法和上面介绍的同名方法差不多 不过该方法的第一个参数是 columnName 代表需要更新的列的列名 而不是columnIndex 
ResultSet 接口中还定义了很多个 updateXXX()方法 都和上面的两个方法相类似 由于篇幅的原因 在这里就不详细描述了 对此感兴趣的读者 可以参考相关的文献 
往数据库当前记录集插入新行的操作流程如下 
1 调用moveToInsertRow()方法 
2 调用updateXXX()方法 指定插入行各列的值 
3 调用insertRow()方法 往数据库中插入新的行 

抱歉!评论已关闭.