最近项目中经常会涉及到代码中支持三种数据库的分页的功能,自己整理了关于三种数据库的分页的写法,分享给大家,以供大家使用。希望能帮到更多的码友!
先来看一个代码片段:
1 String page = alarmCfgMessageForm.getPage(); 2 String limit = alarmCfgMessageForm.getLimit(); 3 long fromNum = 0; 4 long toNum = 0; 5 fromNum = ((Integer.parseInt(page) - 1) * Integer.parseInt(limit)) + 1; 6 toNum = Integer.parseInt(page) * Integer.parseInt(limit);
上面代码片段使用的是oracle和mysql分页显示的计算。引用后,再看下面的代码片段:
1 if (JudgeDB.IEAI_DB_TYPE == oracle) 2 { 3 sql = "SELECT * FROM ( SELECT rownum AS RN , A.* FROM ( " + sql + " ) A " 4 + " ) WHERE RN BETWEEN " + fromNum + " AND " + toNum; 5 } else if (JudgeDB.IEAI_DB_TYPE == db2) 6 { 7 sql = "SELECT * FROM ( SELECT ROW_NUMBER() OVER() AS RN , A.* FROM ( " + sql 8 + ") A ) WHERE RN BETWEEN " + fromNum + " AND " + toNum; 9 } else if (JudgeDB.IEAI_DB_TYPE == mysql) 10 { 11 // 计算 mysql 分页最后一页显示条数不足时,取总数的余数为最后一页数量 12 long start = Long.parseLong(alarmCfgMessageForm.getPage()); 13 long tolimit = Long.parseLong(alarmCfgMessageForm.getLimit()); 14 long curpage = ((start - 1) * tolimit); 15 sql += " limit " + curpage + "," + tolimit; 16 }
上面代码段是分别写出了三个数据库各自的用法,而db2的语法与oracle的语法相似,因此,db2的判断也同样支持oracle的代码使用。
以上就是个人整理的三种数据库的写法,如果有什么不对的地方,欢迎指出。