一、可滚动结果集
一般使用ResultSet类中的next方法可以迭代遍历结果集中的所有行。我们通常会希望在结果集上前后移动。但是jdbc1并未提供previous方法,为了实现向后遍历,程序员不得不手动缓存结果集中的数据。使用jdbc2中的可滚动结果集,可以在结果集上前后移动并且可以跳转到结果集中的任何位置。
1、 可滚动结果集的创建:
Statement stmt = conn.createStatement(type, concurrency);
PreparedStatement pstmt = conn.preparedStatement(type, concurrency);
变量type来设置是否是可滚动的结果集,可以是以下几个ResultSet常量
TYPE_FORWARD_ONLY :结果集不能滚动
TYPE_SCROLL_INSENSITIVE:结果集可以滚动,但是对数据库变化不敏感,数据库查询
生成结果集后发生了变化,结果集不发生变化。
TYPE_SCROLL_SENSITIVE:结果集可以滚动,但是对数据库变化敏感。
二、 可更新结果集
更新结果集的内容,数据库将自动更新。
1、可更新结果集的创建
Statement stmt = conn.createStatement(type, concurrency);
PreparedStatement pstmt = conn.preparedStatement(type,
concurrency);
变量concurrency 设置是否可以更新,ResultSet类的concurrency的值:
CONCUR_READ_ONLY 结果集不能用于更新数据库
CONCUR_UPDATABLE 结果集可以更新数据库
update: rs.updateXxx(cloumnNameInResultSet, newValue)
rs.updateRow();
insert: rs.movetoInsertRow();
rs.updateString("title",title);
rs.updateDouble("price", price)l
rs.insertRow();
rs.moveToCurrentRow();
注意,无法控制在结果集或数据库中添加新数据的位置。
delete: rs.deleteRow();
实际上,数据库驱动程序可能无法支持对可滚动或可更新的请求,使用DatabaseMetaData类中的supportsResultSetType和supportsResultSetConcurrency方法,我们可以获知某个数据库究竟支持哪些结果集类型以及那些模式。一个复杂的查询的结果集可能是不可更新的结果集。
一般使用ResultSet类中的next方法可以迭代遍历结果集中的所有行。我们通常会希望在结果集上前后移动。但是jdbc1并未提供previous方法,为了实现向后遍历,程序员不得不手动缓存结果集中的数据。使用jdbc2中的可滚动结果集,可以在结果集上前后移动并且可以跳转到结果集中的任何位置。
1、 可滚动结果集的创建:
Statement stmt = conn.createStatement(type, concurrency);
PreparedStatement pstmt = conn.preparedStatement(type, concurrency);
变量type来设置是否是可滚动的结果集,可以是以下几个ResultSet常量
TYPE_FORWARD_ONLY :结果集不能滚动
TYPE_SCROLL_INSENSITIVE:结果集可以滚动,但是对数据库变化不敏感,数据库查询
生成结果集后发生了变化,结果集不发生变化。
TYPE_SCROLL_SENSITIVE:结果集可以滚动,但是对数据库变化敏感。
二、 可更新结果集
更新结果集的内容,数据库将自动更新。
1、可更新结果集的创建
Statement stmt = conn.createStatement(type, concurrency);
PreparedStatement pstmt = conn.preparedStatement(type,
concurrency);
变量concurrency 设置是否可以更新,ResultSet类的concurrency的值:
CONCUR_READ_ONLY 结果集不能用于更新数据库
CONCUR_UPDATABLE 结果集可以更新数据库
update: rs.updateXxx(cloumnNameInResultSet, newValue)
rs.updateRow();
insert: rs.movetoInsertRow();
rs.updateString("title",title);
rs.updateDouble("price", price)l
rs.insertRow();
rs.moveToCurrentRow();
注意,无法控制在结果集或数据库中添加新数据的位置。
delete: rs.deleteRow();
实际上,数据库驱动程序可能无法支持对可滚动或可更新的请求,使用DatabaseMetaData类中的supportsResultSetType和supportsResultSetConcurrency方法,我们可以获知某个数据库究竟支持哪些结果集类型以及那些模式。一个复杂的查询的结果集可能是不可更新的结果集。