从JDBC 2.0后:
1. ResultSet就可以在结果集上前后移动并且可以跳转到结果集中的任何位置;
2. 支持可更新的结果集,直接在ResultSet里边修改数据,并且同步到数据库中。
这两个新特性都是在创建新会话时指定的,语法如下:
Statement stmt = conn.createStatement(sql, type_SCROLL/type_UPDATEABLE, concurrency);
PreparedStatement pstmt = conn.preeparedStatement(sql, type_SCROLL/type_UPDATEABLE, concurrency);
|
其中:
type_SCROLL类型可以为以下值:
TYPE_FORWARD_ONLY: 结果集不能滚动
TYPE_SCROLL_INSENSITIVE: 结果集可以移动,但是对数据库变化不敏感,数据库查询生成结果集后发生了变化,结果集不发生变化
TYPE_SCROLL_SENSITIVE: 结果集可以移动,但是对数据库变化敏感
|
type_UPDATEABLE类型可以为以下值:
CONCUR_READ_ONLY: 结果集不能用于更新数据库
CONCUR_UPDATEABLE: 结果集可以用于更新数据库
|
示例:
public
ConcurrentLinkedQueue getStockInfoQueue(String table, String stockCode ){
//从数据库中取出股票信息,保存到队列,并返回队列
ConcurrentLinkedQueue<RTmm> clq =
new
ConcurrentLinkedQueue<RTmm>();
String sql =
"select * from "
+table +
" where s_code = '"
+stockCode+
"'"
;
String sql2 =
"select count(*) from "
+table +
" where s_code = '"
+stockCode+
"'"
;
try
{
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
//可滚动结果集
ResultSet rs2 = stmt.executeQuery(sql2);
rs2.last();
System.out.println(
"记录数"
+rs2.getInt(
1
));
int
records = rs2.getInt(
1
);
//得到记录个数
ResultSet rs = stmt.executeQuery(sql);
if
(records <
60
){
while
(rs.next()){
String code = rs.getString(
1
);
String time = rs.getString(
3
);
double
open = rs.getDouble(
4
);
double
close = rs.getDouble(
5
);
double
low = rs.getDouble(
6
);
double
high = rs.getDouble(
7
);
// RTmm(String code, String dt, double low, double open, double close, double high)
// System.out.println(code+time+open+" "+close+" "+high);
RTmm rtmm =
new
RTmm(code.trim(), time.trim(), low, open, close, high);
clq.add(rtmm);
}
}
else
{
rs.absolute(records -
60
);
while
(rs.next()){
String code = rs.getString(
1
);
String time = rs.getString(
3
);
double
open = rs.getDouble(
4
);
double
close = rs.getDouble(
5
);
double
low = rs.getDouble(
6
);
double
high = rs.getDouble(
7
);
// RTmm(String code, String dt, double low, double open, double close, double high)
// System.out.println(code+time+open+" "+close+" "+high);
RTmm rtmm =
new
RTmm(code.trim(), time.trim(), low, open, close, high);
clq.add(rtmm);
}
}
}
catch
(SQLException e) {
e.printStackTrace();
}
return
clq;
}
|
滚动特性:
next(),此方法是使游标向下一条记录移动。
previous() ,此方法可以使游标上一条记录移动,前提前面还有记录。
absolute(int row),可以使用此方法跳到指定的记录位置。定位成功返回true,不成功返回false,返回值为false,则游标不会移动。
afterLast() ,游标跳到最后一条记录之后。
beforeFirst() ,游标跳到第一条记录之前。(跳到游标初始位)
first(),游标指向第一条记录。
last(),游标指向最后一条记录。
relative(int rows) ,相对定位方法,参数值可正可负,参数为正,游标从当前位置向下移动指定值,参数为负,游标从当前位置向上移动指定值。