表查询中的续传

2022/08/11

前言: 关于表查询续传的注意事项。

todo 建一张测试表,里面插数据

InputX1.java

public class InputX1 {
    private String partitionNo;
    private String name;
    private String desc;
}

InputY1.java

public class InputY1 {
    private boolean continuationCode; // 续传标志
    private String partitionNo; // 续传标志-1
    private String name; // 续传标志-2
    private String specCode; // 冗余代码
}

注意:续传标志必须要为表的唯一键。

关于表的查询,有分页查询,也有续传查询,这里所说的是续传查询。

例如我们的Test_T中记录数为11,但是我们每次传输的数量为10,我们作为请求记录的一方,如果第一次请求得到的记录数为10,这个时候肯定想要知道表中是不是还有其他数据,这个时候续传的那些标志就起到的作用。

模拟请求第一次查询,因为不知道数据库表中的情况,Y1中的那些字段全部置为空 =

{
  "continuationCode" = "",
  "partitionNo" = "",
  "name" = "",
  "specCode" = ""
}

把这个请求发到数据库中,表中有21条数据,查回来10条,我们这个时候接收到的Y1 =

{
  "continuationCode" = "Y",
  "partitionNo" = "01",
  "name" = "Mike_10",
  "specCode" = ""
}

我们发现续传标志为Y,就表示表中是还存在记录的,我们继续查,将Y1原封不动返回回去:

{
  "continuationCode" = "Y",
  "partitionNo" = "01",
  "name" = "Mike_10",
  "specCode" = ""
}

得到传回来的Y1 =

{
  "continuationCode" = "N",
  "partitionNo" = "",
  "name" = "",
  "specCode" = ""
}

续传标志为N,代表已经没有数据,全部数据已经请求完了。

注意:这里我们每次传输的数量是10,自测的时候要验证

等情况,不要有那种少了一条的查询。

数据库查询方法

SELECT * FROM TABLE_A
WHERE UNIQUE_KEY_COLUMN >= #{键值}
FETCH NEXT 101 ROWS ONLY;
SELECT T1.* FROM (SELECT *
                  FROM TABLE_A
                  WHERE UNIQUE_KEY_COLUMN >= #{键值}
                  ORDER BY UNIQUE_KEY_COLUMN) T1
WHERE ROWNUM <= 100;

这里设定续传数量为100

101 = 每次查询101条,将最后一条记录中作为唯一键字段的值作为下一次查询的查询条件.

如果查询出来的记录数量 <= 续传数量,则说明可以不再进行查询。

例如:

第一次查询:101条,将最后一条作为下一次查询的条件
第二次查询:100条,说明数据库中只剩下100条了,因为我们每次去数据库中是拿的101条的,但是返回给我们的只有100
第三次查询:终止查询。