单条SQL语句是具有原子性的,即本身就是一个事务,读取时为共享锁,更新时为更新锁。(不知道复合语句的情况)
SQLServer 使用的分页查询语句如下(本人使用2014版)
use BookDB
Select * from (select * ,row_number() over(order by bookNo) as line from Book ) as t where t.line>=5 and t.line<=8
其中bookNo是列名,Book是表
显示的结果如下

其中的注意 函数“row_number”必须有 OVER 子句。 其中row_number() over(order by bookNo)的意思是按照bookNo的顺序依次返回一个数字,从1开始。
然后将其重命名为line,这个line是自己启动新分组的名字。再将整体作为新表t,供外层select使用。
还可以这样 row_number() over (partition by column1 order by column2)
表示先分组在排序,这时候的t.line表示的是组内的排序值,即在一个组内是依次排序,但不同的组互不影响,每个组都是从1开始排序
显示的结果如下

我的使用
@Override public List<Orders> findAllByStatus(String status, Integer currentPages, Integer rows) throws Exception { List<Orders> all = new ArrayList<Orders>(); String sql = "Select * from (select *,row_number() over(order by o_id) as lines from orders where status = ?) as pages " + "where pages.lines>=? and pages.lines<=?"; Integer start = (currentPages-1)*rows+1; //分页起始值 Integer end = currentPages*rows; //结束 值 this.pstmt = this.conn.prepareStatement(sql); this.pstmt.setString(1, status); this.pstmt.setInt(2, start); this.pstmt.setInt(3, end); ResultSet rs = this.pstmt.executeQuery(); while(rs.next()) { Orders order = new Orders(); order.setO_id(rs.getInt(1)); order.setC_id(rs.getString(2)); order.setTime(rs.getTimestamp(3)); order.setTotal(rs.getDouble(4)); order.setStatus(rs.getString(5)); order.setS_name(rs.getString(6)); order.setS_phone(rs.getString(7)); all.add(order); } return all; }
还有一个是返回自增函数的自增值
@Override public Integer create(Orders pojo) throws Exception { String sql = "insert into orders values (?, ?, ?, ?, ?, ?) select SCOPE_IDENTITY()"; //select SCOPE_IDENTITY()是关键 this.pstmt = this.conn.prepareStatement(sql); this.pstmt.setString(1, pojo.getC_id()); this.pstmt.setTimestamp(2, pojo.getTime()); this.pstmt.setDouble(3, pojo.getTotal()); this.pstmt.setString(4, pojo.getStatus()); this.pstmt.setString(5, pojo.getS_name()); this.pstmt.setString(6, pojo.getS_phone()); this.pstmt.executeUpdate(); ResultSet rs = this.pstmt.getGeneratedKeys(); //这里是获取的地方 if(rs.next()) { return rs.getInt(1); }else { return -1; } }
原文:https://www.cnblogs.com/ant-xu/p/11101847.html