使用Oracle中的rownum实现分页
2011-07-31 10:17
615 查看
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Scanner; import jdbc.util.JDBCUtil; public class Page { private int start = 1;//页面的起始位置 private int size = 5;//每页显示的记录数 private int end = 5;//页面的终止位置 private int count = 0;//数据库中的记录数 private Connection con = null; private PreparedStatement ps = null; private ResultSet rs = null; private JDBCUtil jd;//数据库连接的工具包 public Page(){ jd = new JDBCUtil(); con = jd.getCon(); } public void getCount(){ String sqlCount = "select count(*) from student"; String sql = "select id,name,rnum from(select id,name,rownum rnum from student)" + "where rnum between ? and ?";//为了第一次显示页面 try { ps = con.prepareStatement(sqlCount); rs = ps.executeQuery(); while(rs.next()){ count = rs.getInt(1); } ps = con.prepareStatement(sql); ps.setInt(1,start); ps.setInt(2,end); rs = ps.executeQuery(); jd.printResultSet(rs); } catch (SQLException e) { e.printStackTrace(); } } public void showPage(String command) throws SQLException{ String sql = "select id,name,rnum from(select id,name,rownum rnum from student)" + "where rnum between ? and ?"; ps = con.prepareStatement(sql); if(command.equals("up")){ if(start - size <= 1){ System.out.println("已经是第一页了"); start = 1; end = 5; ps.setInt(1,start); ps.setInt(2,end); rs = ps.executeQuery(); jd.printResultSet(rs); }else{ start = start - size; end = start + size - 1; ps.setInt(1,start); ps.setInt(2, end); rs = ps.executeQuery(); jd.printResultSet(rs); } }else if(command.equals("next")){ if(count - start <= size ){ System.out.println("已经是最后一页"); end = count; start = end - count%size + 1; ps.setInt(1,start); ps.setInt(2,end); rs = ps.executeQuery(); jd.printResultSet(rs); }else{ start = start + size; end = end + size; ps.setInt(1, start); ps.setInt(2,end); rs = ps.executeQuery(); jd.printResultSet(rs); } }else if(command.equals("exit")){ System.exit(-1); } } public void insertData() throws SQLException{ int j = 0; for (int i = 1; i < 27; i++) { String sql = "insert into student values("+i+","+"'zhangsan"+i+"')"; ps = con.prepareStatement(sql); j += ps.executeUpdate(); } System.out.println(j+"条记录被执行"); } public static void main(String[] args) throws SQLException { Page page = new Page(); page.getCount(); // page.insertData(); Scanner scan = new Scanner(System.in); while(true){ System.out.println("输入next up exit指令"); String command = scan.next(); page.showPage(command.trim()); } } }
上面是控制显示页面的,下面提供JDBCUtil的工具包
package jdbc.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class JDBCUtil { static{ String driverName = "oracle.jdbc.driver.OracleDriver"; try { Class.forName(driverName); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public Connection getCon(){ Connection con = null; String url = "jdbc:oracle:thin:@localhost:1521:xe"; String user = "hr"; String password = "admin"; try { con = DriverManager.getConnection(url, user, password); } catch (SQLException e) { e.printStackTrace(); } return con; } public void printResultSet(ResultSet rs){ ResultSetMetaData rsmd = null; if(rs != null){ try { rsmd = rs.getMetaData(); System.out.println("rsmd ====== >"+rsmd.getColumnCount()); } catch (SQLException e) { e.printStackTrace(); } try { while(rs.next()){ for(int i=1;i <= rsmd.getColumnCount();i++){ System.out.print(rsmd.getColumnName(i)+"="); System.out.print(rs.getString(i)+"\t"); } System.out.println(); } } catch (SQLException e) { e.printStackTrace(); } } } public void release(ResultSet rs,Statement smt,Connection con){ if(rs != null) try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } if(smt != null) try { smt.close(); } catch (SQLException e) { e.printStackTrace(); } if(con != null) try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } public void release(Object...obj){ for (Object object : obj) { if(object instanceof ResultSet) try { ((ResultSet)object).close(); } catch (SQLException e) { e.printStackTrace(); } if(object instanceof Statement) try { ((Statement)object).close(); } catch (SQLException e) { e.printStackTrace(); } if(object instanceof Connection) try { ((Connection)object).close(); } catch (SQLException e) { e.printStackTrace(); } } } }
对于释放资源使用了两种方法,release(ResultSet rs,Statement smt,Connection con)和release(Object...obj),随便使用。
相关文章推荐
- ORACLE三层嵌套实现分页功能和ROWNUM的使用
- oracle中分页的实现方式.rownum的使用
- oracle 如何在group by 的语句中使用rownum,实现分页
- SQL分页排序的实现与分页数据重复问题——以Oracle rownum为例
- oracle 使用rownum进行分页
- 使用rownum对oracle分页
- oracle 使用存储过程实现分页(初学者,请各位大神指教)
- Oracle的rownum原理和使用(分页查询)
- oracle rownum 及分页处理的使用方法
- 解决oracle使用rownum排序分页排序字段不唯一导致分页错误
- oracle使用hibernate分页时,报找不到ROWNUM_属性解决!
- oracle rownum 原理及分页查询实现
- oracle分页sql(rownum伪列使用)
- oracle中如何用rownum实现分页
- 使用ROWNUM实现分页
- SQL分页排序的实现与分页数据重复问题——以Oracle rownum为例
- oracle rownum 及分页处理的使用方法
- sql 使用top 来分页, Oracle 用rownum来分页
- oracle实现类似mysql的LIMIT,也可以作为oracle分页使用
- oracle分页显示方法 rownum的使用