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