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