最近做了一個中小企業(yè)網(wǎng)絡(luò)平臺,在操縱結(jié)果集時,在abstract() 和 next() 的使用上產(chǎn)生了沖突,以致于總是漏掉最開始的一條數(shù)據(jù)。因?yàn)槠渲袃?nèi)嵌了分頁程序,int pointer = (sp.getShowPage() - 1) * sp.getPageSize() + 1;
abstract(pointer)后指針指向第一條數(shù)據(jù)(開始時指針指向第一條的前面),然后我用while(rs.next())獲取并保存其中的sp.getPageSize() 個數(shù)據(jù)(實(shí)際上我只獲取了sp.getPageSize() -1個),因?yàn)樵谡{(diào)用rs.next()后,指針向下移動了一行,即此時指向第二條數(shù)據(jù)了。
這種指針的移動在所有數(shù)據(jù)庫中都是一樣的。因?yàn)镴DBC 驅(qū)動需要提前獲得一行來判斷當(dāng)前行是否是最后一行。
所以我換了一種新結(jié)構(gòu):
rs.absolute(pointer);
for (int i = 0; i < sp.getPageSize(); i++) {
//獲取并保存信息
if (!rs.next()) // next()在這即起到了移動指針,有起到了判斷剩余的數(shù)據(jù)不足sp.getPageSize()的作用,
有點(diǎn)類似于直接插入排序中的變量j
break;
}
這樣便不會漏掉數(shù)據(jù),而且提高了程序執(zhí)行效率!
abstract(pointer)后指針指向第一條數(shù)據(jù)(開始時指針指向第一條的前面),然后我用while(rs.next())獲取并保存其中的sp.getPageSize() 個數(shù)據(jù)(實(shí)際上我只獲取了sp.getPageSize() -1個),因?yàn)樵谡{(diào)用rs.next()后,指針向下移動了一行,即此時指向第二條數(shù)據(jù)了。
這種指針的移動在所有數(shù)據(jù)庫中都是一樣的。因?yàn)镴DBC 驅(qū)動需要提前獲得一行來判斷當(dāng)前行是否是最后一行。
所以我換了一種新結(jié)構(gòu):
rs.absolute(pointer);
for (int i = 0; i < sp.getPageSize(); i++) {
//獲取并保存信息
if (!rs.next()) // next()在這即起到了移動指針,有起到了判斷剩余的數(shù)據(jù)不足sp.getPageSize()的作用,
有點(diǎn)類似于直接插入排序中的變量j
break;
}
這樣便不會漏掉數(shù)據(jù),而且提高了程序執(zhí)行效率!