|
发表于 2007-4-3 10:08:32
|
显示全部楼层
提供sybase12.5之前的分页:采用临时表
public ArrayList<ArrayList> queryByPage(int intRecordsPerPage,
int intCurrentPage, String sql) throws Exception {
ArrayList<ArrayList> alPage = new ArrayList<ArrayList>();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
StringBuilder sbTtmpTableName = new StringBuilder(UUID.randomUUID()
.toString());
sbTtmpTableName.deleteCharAt(8);
sbTtmpTableName.deleteCharAt(12);
sbTtmpTableName.deleteCharAt(16);
sbTtmpTableName.deleteCharAt(20);
sbTtmpTableName.setCharAt(0, 't');
String tmpTableName = sbTtmpTableName.substring(0, 30);
try {
conn = getConnection();
stmt = conn.createStatement();
StringBuilder sqlCreTmpTable = new StringBuilder(sql);
int selectStartIndex = sql.indexOf("select");
sqlCreTmpTable.replace(selectStartIndex, selectStartIndex + 7,
"select _sybid=identity(12),");
int fromStartIndex = sqlCreTmpTable.indexOf("from");
sqlCreTmpTable.replace(fromStartIndex, fromStartIndex + 4,
"into tempdb.." + tmpTableName + " from");
System.out.println("*** " + sqlCreTmpTable.toString());
stmt.executeUpdate(sqlCreTmpTable.toString());
int start = (intCurrentPage - 1) * intRecordsPerPage;
int end = intCurrentPage * intRecordsPerPage;
String sqlPage = "select * from tempdb.." + tmpTableName
+ " where _sybid>" + start + " and _sybid<=" + end;
rs = stmt.executeQuery(sqlPage);
ResultSetMetaData rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount();
while (rs.next()) {
ArrayList<String> alRow = new ArrayList<String>();
for (int i = 1; i <= cols; ++i) {
if (rs.getString(i) == null) {
alRow.add("null");
} else {
alRow.add(rs.getString(i));
}
}
alPage.add(alRow);
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("数据库访问异常");
} finally {
stmt.executeUpdate("truncate table tempdb.." + tmpTableName);
stmt.executeUpdate("drop table tempdb.." + tmpTableName);
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("资源关闭异常");
}
}
return alPage;
} |
|