表查询中的续传
前言: 关于表查询续传的注意事项。
todo 建一张测试表,里面插数据
InputX1.java
1 | public class InputX1 { |
InputY1.java
1 | public class InputY1 { |
注意:续传标志必须要为表的唯一键。
关于表的查询,有分页查询,也有续传查询,这里所说的是续传查询。
例如我们的Test_T
中记录数为11,但是我们每次传输的数量为10,我们作为请求记录的一方,如果第一次请求得到的记录数为10,这个时候肯定想要知道表中是不是还有其他数据,这个时候续传的那些标志就起到的作用。
模拟请求第一次查询,因为不知道数据库表中的情况,Y1中的那些字段全部置为空:
1 | { |
把这个请求发到数据库中,表中有21条数据,查回来10条,我们这个时候接收到的Y1:
1 | { |
我们发现续传标志为Y,就表示表中是还存在记录的,我们继续查,将Y1原封不动返回回去:
1 | { |
得到传回来的Y1:
1 | { |
续传标志为N,代表已经没有数据,全部数据已经请求完了。
注意:这里我们每次传输的数量是10,自测的时候要验证
- 表中只有9条数据
- 表中只有10条数据
- 表中只有11条数据
等情况,不要有那种少了一条的查询。
数据库查询方法
- 第一种写法
1
2
3SELECT * FROM TABLE_A
WHERE UNIQUE_KEY_COLUMN >= #{键值}
FETCH NEXT 101 ROWS ONLY; - 第二种写法这里设定续传数量为100
1
2
3
4
5SELECT T1.* FROM (SELECT *
FROM TABLE_A
WHERE UNIQUE_KEY_COLUMN >= #{键值}
ORDER BY UNIQUE_KEY_COLUMN) T1
WHERE ROWNUM <= 100;
101: 每次查询101条,将最后一条记录中作为唯一键字段的值作为下一次查询的查询条件.
如果查询出来的记录数量 <= 续传数量,则说明可以不再进行查询。
例如:
1 | 第一次查询:101条,将最后一条作为下一次查询的条件 |