通过设置rowcount,从Sybase数据库中分页取数

http://bijian1013.iteye.com/blog/1830421

虽然听说Sybase12.5.3版本以上的已经支持top查询了,但现在还是有很多系统用的是比较老的Sybase数据库,这些版本的Sybase数据库不支持取前N条的查询语句。如Oracle的rownum,sql server的top,mysql的limit,db2与Derby的FETCH FIRST N ROWS ONLY(其中N即是你要取的前几条记录)。

  因为数据库能支持取前N条的查询语句,就可利用它很容易的实现分页取数。但针对Sybase12.5.3以前的版本,要实现分页取数就没有Oracle、sql server、mysql、db2、Derby等这些数据库方便了。
  如下是JAVA直接用jdts驱动,采用set rowcount方法实现从Sybase12.5.3以前的版本数据库中取数。
Java代码 
ublic class JdbcRowCountSybase { 
private static int pageSize = 10; 
 
public static void main(String[] args) { 
  
 Connection conn = null; 
 Statement stmt = null; 
 ResultSet rs = null; 
 try { 
   // Class.forName("com.sybase.jdbc3.jdbc.SybDriver").newInstance();//通过jdbc方式连接 
   Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance(); // 通过jtds方式连接 
   // String url 
   // ="jdbc:sybase:Tds:192.168.102.100:5000/test";//通过jdbc方式连接,test为数据库名 
   String url = "jdbc:jtds:sybase://192.9.190.98:4100/inner_dbs";// 通过jtds方式连接,test为数据库名 
   conn = DriverManager.getConnection(url, "emp", "empemp"); 
   stmt = conn.createStatement(); 
    
   //得到预取表的记录总条数 
   int count = 0; 
   String countSql = "select count(*) from lps_mst"; 
   rs = stmt.executeQuery(countSql); 
   if(rs.next()) { 
    count = rs.getInt(1); 
   }    
   //设置rowcount大小,即每页大小 
   String rowcountsql = "set rowcount " + pageSize; 
   stmt.execute(rowcountsql);    
   //定义变量,在输出时显示第几条记录 
   int i=1; 
   //分页的主键值 
   String pan = null; 
   //分页取数的动态sql脚本 
   String sql = null; 
   //得到取数的总次数 
   int top = count/pageSize + ((count%pageSize == 0) ? 0:1); 
   for(int num=0;num 
    if(pan != null) { 
     sql = "select * from lps_mst where pan > '" + pan + "' order by pan"; 
    }else { 
     sql = "select * from lps_mst order by pan"; 
    } 
    rs = stmt.executeQuery(sql); 
    while (rs.next()) { 
     //记录分页取数的主键值,用于得到动态的sql脚本语句 
     pan = rs.getString("pan"); 
     System.out.println("(" + i++ + ")" + "pan:" + pan); 
     //System.out.println(pan); 
    } 
   } 
    
   //设置rowcount大小为0,以便影响后续的取数 
   rowcountsql = "set rowcount 0"; 
   stmt.execute(rowcountsql); 
  } catch (InstantiationException e1) { 
   e1.printStackTrace(); 
  } catch (IllegalAccessException e1) { 
   e1.printStackTrace(); 
  } catch (ClassNotFoundException e1) { 
   e1.printStackTrace(); 
  } catch (SQLException e) { 
   e.printStackTrace(); 
  } finally { 
   try { 
    rs.close(); 
   } catch (SQLException e) { 
    e.printStackTrace(); 
   }finally { 
    rs = null; 
   } 
   try { 
    stmt.close(); 
   } catch (SQLException e) { 
    e.printStackTrace(); 
   }finally { 
    stmt = null; 
   } 
   try { 
    conn.close(); 
   } catch (SQLException e) { 
    e.printStackTrace(); 
   }finally { 
    conn = null; 
   } 
  } 
 } 

 

 

http://www.myexception.cn/sybase/1223507.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值