mysql and oracle 分页开始下标不同,造成的问题

本文探讨了MySQL与Oracle数据库在分页查询时的不同之处,重点在于它们起始索引的差异。MySQL从0开始,而Oracle从1开始。这可能导致在编写跨数据库的代码时出现潜在问题,如果不注意,可能会导致数据丢失或不一致。示例代码展示了这种差异如何影响查询结果,提醒开发者在进行数据库操作时需留意此类细节。

这个区别不容忽视, 是个不显眼的坑.

mysql and oracle 分页开始下标不同,造成的问题

mysql 第一页从0开始

oracle是第一页从1开始算

要是使用时,刚好调过来,就会出现问题.

 //    mysql 第一页从0开始, 虽然还是返回5条,但会跳过第0条记录.  oracle正确
List<Orders> list = suidRich.select(new Orders(), (page - 1) * rows+1, rows); 
//      oracle 第1页会少一个记录(一页5条,但首页却只有4条). 因oracle是从1开始算开始记录的.  mysql正常

List<Orders> list = suidRich.select(new Orders(), (page - 1) * rows, rows); 

package org.teasoft.exam.bee.osql;

import java.util.List;

import org.teasoft.bee.osql.SuidRich;
import org.teasoft.exam.bee.osql.entity.Orders;
import org.teasoft.exam.comm.Printer;
import org.teasoft.honey.osql.core.BeeFactoryHelper;

/**
 * @author Kingstar
 * @since  1.9
 */
public class NotPageBug {
	
	private static SuidRich suidRich = BeeFactoryHelper.getSuidRich();
	public static void main(String[] args) {
		int rows = 5;
		for (int i = 1; i <= 4; i++) {
			int page=i;
//			mysql 第一页从0开始, 虽然还是返回5条,但会跳过第0条记录.  oracle正确
//			List<Orders> list = suidRich.select(new Orders(), (page - 1) * rows+1, rows); 
//			oracle 第1页会少一个记录(一页5条,但首页却只有4条). 因oracle是从1开始算开始记录的.  mysql正常
			List<Orders> list = suidRich.select(new Orders(), (page - 1) * rows, rows); 
			Printer.printList(list);

			
		}

	}

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值