oracle、mysql、db2三大数据库分页方法的整理

时间:2022-06-01 17:13:58

最近项目中经常会涉及到代码中支持三种数据库的分页的功能,自己整理了关于三种数据库的分页的写法,分享给大家,以供大家使用。希望能帮到更多的码友!

先来看一个代码片段:

         String page = alarmCfgMessageForm.getPage();
String limit = alarmCfgMessageForm.getLimit();
long fromNum = 0;
long toNum = 0;
fromNum = ((Integer.parseInt(page) - 1) * Integer.parseInt(limit)) + 1;
toNum = Integer.parseInt(page) * Integer.parseInt(limit);

上面代码片段使用的是oracle和mysql分页显示的计算。引用后,再看下面的代码片段:

   if (JudgeDB.IEAI_DB_TYPE == oracle)
{
sql = "SELECT * FROM ( SELECT rownum AS RN , A.* FROM ( " + sql + " ) A "
+ " ) WHERE RN BETWEEN " + fromNum + " AND " + toNum;
} else if (JudgeDB.IEAI_DB_TYPE == db2)
{
sql = "SELECT * FROM ( SELECT ROW_NUMBER() OVER() AS RN , A.* FROM ( " + sql
+ ") A ) WHERE RN BETWEEN " + fromNum + " AND " + toNum;
} else if (JudgeDB.IEAI_DB_TYPE == mysql)
{
// 计算 mysql 分页最后一页显示条数不足时,取总数的余数为最后一页数量
long start = Long.parseLong(alarmCfgMessageForm.getPage());
long tolimit = Long.parseLong(alarmCfgMessageForm.getLimit());
long curpage = ((start - 1) * tolimit);
sql += " limit " + curpage + "," + tolimit;
}

上面代码段是分别写出了三个数据库各自的用法,而db2的语法与oracle的语法相似,因此,db2的判断也同样支持oracle的代码使用。

以上就是个人整理的三种数据库的写法,如果有什么不对的地方,欢迎指出。