??????? 虽然听说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; } } } }?