日期:2014-05-16  浏览次数:20515 次

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

??????? 虽然听说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以前的版本数据库中取数。
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;
   }
  }
 }
}
?