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

news/2024/5/18 23:27:18 标签: 数据库, Sybase, jdbc, java

        虽然听说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">public 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.niftyadmin.cn/n/1319156.html

相关文章

Oracle\MS SQL Server Update多表关联更新

一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新。而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据。我们先来讨论根据其他表数据更新你要更新的表 一、MS SQL Server 多表关联更新 sql server提供了upd…

Invalid prop `children` of type `array` supplied to `Overlay`

最近在使用react-native-element 的Overlay 组件时有个报错&#xff1a; Invalid prop children of type array supplied to Overlay 原因是 Overlay 下要有一个父盒子包裹着 <Overlay <SafeAreaView style{{flex: 1}}>......</SafeAreaView> </Overlay&g…

一种Java调用Sybase存储过程实现取前N条数据的方法

一.在Sybase中创建存储过程如下&#xff1a;drop procedure getPageWiseData gocreate procedure getPageWiseData ( sqlStr varchar(8000), start int, limit int ) as DECLARE dt varchar(10) --生成临时表的随机数 BEGIN --# variable to hold the first…

最小生成树Kruskal算法

Kruskal算法 1.首先将G的n个顶点看成n个孤立的连通分支&#xff0c;将所有的边按权从小到大排序e1,e2,e3...em 2.从第一条边开始&#xff0c;依边权递增的顺序查看每一条边&#xff0c;并按下述方法连接两个不同的两同分支 3.当查看到第K条边ek(v,w)时&#xff0c;若v,w分别在两…

[] + [] = ““

其实是被隐式类型转换 如果操作数为对象和数组&#xff0c;会先转换成字符串&#xff0c;再拼接 String([]) // "" String({}) // "[object Object]" ! [] // !"" true true [] // true "" "true" 所以当boolen类…

MO、MT解读

MO Mobile originate&#xff0c;上行&#xff0c;即用户上发给SP的信息。MT Mobile Terminate&#xff0c;下行&#xff0c;即SP端下发给用户的信息&#xff1b; 上行:mo提交短信到短信中心下行:mt短信中心向特定的用户转发短信&#xff0c;你的短信是这样的&#xff0c;你所提…

DPDK环境配置以及代码编写的有关问题汇总

DPDK环境配置以及代码编写的有关问题汇总 文章目录 DPDK环境配置以及代码编写的有关问题汇总基础概念问题VMware上配置DPDK环境并运行实例程序DPDK网卡配置DPDK基础教程GitHub内容参考 基础概念问题 参考链接一 参考链接二 参考链接三 VMware上配置DPDK环境并运行实例程序 …

观察者模式之:一个游戏设想

版权问题先说明白&#xff0c;我本人的原创想法&#xff0c;本人将自己想法公开和各位分享&#xff0c;无侵权问题&#xff0c;免去各位的后顾之忧。 这是一个被公司束之高阁的建议&#xff0c;公司未曾考虑这个idea的可行之处。不过我还是认真思考了这个的可行之处与不可行之处…