📄 objectdb.java
字号:
ku.setValue(rs.getString(ku.getOrders() + 1));
}
}
result.addElement(getObjectDb(keys));
}
} while(rs.next());
}
} catch (SQLException e) {
logger.error("list: " + e.getMessage());
} finally {
if (rs!=null) {
try { rs.close(); } catch (Exception e) {}
rs = null;
}
if (conn != null) {
conn.close();
conn = null;
}
}
return result;
}
public Vector list(int start, int end) {
return list(QUERY_LIST, start, end);
}
/**
* 类似于Hiebernate中的list,从缓存中取出对象,但又有所区别,因为总记录条数也是取自缓存
* 取得的记录在ResultSet中的索引为 start+1 ~ end+1,总共为end-start+1条
* @param sql String
* @param start int 从0开始算起
* @param end int 当能够取满end-start+1条数据时,list的最后一条记录在ResultSet中的索引为end+1
* @return Vector
*/
public Vector list(String sql, int start, int end) {
int total = 0;
ResultSet rs = null;
Vector result = new Vector();
Connection conn = new Connection(connname);
try {
// 取得总记录条数
total = getObjectCount(sql);
conn.prepareStatement(sql);
if (total != 0)
// sets the limit of the maximum number of rows in a ResultSet object
conn.setMaxRows(end + 1); // 尽量减少内存的使用
rs = conn.executePreQuery();
if (rs == null) {
return result;
} else {
// defines the number of rows that will be read from the database when the ResultSet needs more rows
int count = end - start + 1;
rs.setFetchSize(count); // rs一次从POOL中所获取的记录数
if (rs.absolute(start + 1) == false) {
return result;
}
int k = 0;
do {
if (primaryKey.getType()==PrimaryKey.TYPE_INT)
result.addElement(getObjectDb(new Integer(rs.getInt(1))));
else if (primaryKey.getType()==PrimaryKey.TYPE_STRING)
result.addElement(getObjectDb(rs.getString(1)));
else if (primaryKey.getType()==PrimaryKey.TYPE_LONG)
result.addElement(getObjectDb(new Long(rs.getLong(1))));
else if (primaryKey.getType() == PrimaryKey.TYPE_COMPOUND) {
HashMap keys = ((PrimaryKey)primaryKey.clone()).getKeys();
Iterator ir = keys.keySet().iterator();
while (ir.hasNext()) {
String keyName = (String) ir.next();
KeyUnit ku = (KeyUnit) keys.get(keyName);
if (ku.getType() == primaryKey.TYPE_INT) {
ku.setValue(new Integer(rs.getInt(ku.getOrders() + 1)));
} else if (ku.getType() == primaryKey.TYPE_LONG ) {
ku.setValue(new Long(rs.getLong(ku.getOrders() + 1)));
} else {
ku.setValue(rs.getString(ku.getOrders() + 1));
}
}
result.addElement(getObjectDb(keys));
}
k++;
//if (k>=count)
// break;
} while(rs.next());
}
} catch (SQLException e) {
logger.error("list: " + e.getMessage());
} finally {
if (rs!=null) {
try { rs.close(); } catch (Exception e) {}
rs = null;
}
if (conn != null) {
conn.close();
conn = null;
}
}
return result;
}
public void setBlockSize(int blockSize) {
this.blockSize = blockSize;
}
public String getTableName() {
return tableName;
}
public ListResult listResult(String listsql, int curPage, int pageSize) throws
ErrMsgException {
int total = 0;
ResultSet rs = null;
Vector result = new Vector();
ListResult lr = new ListResult();
lr.setTotal(total);
lr.setResult(result);
Connection conn = new Connection(connname);
try {
// 取得总记录条数
String countsql = SQLFilter.getCountSql(listsql);
rs = conn.executeQuery(countsql);
if (rs != null && rs.next()) {
total = rs.getInt(1);
}
if (rs != null) {
rs.close();
rs = null;
}
// 防止受到攻击时,curPage被置为很大,或者很小
int totalpages = (int) Math.ceil((double) total / pageSize);
if (curPage > totalpages)
curPage = totalpages;
if (curPage <= 0)
curPage = 1;
if (total != 0)
conn.setMaxRows(curPage * pageSize); // 尽量减少内存的使用
rs = conn.executeQuery(listsql);
if (rs == null) {
return lr;
} else {
rs.setFetchSize(pageSize);
int absoluteLocation = pageSize * (curPage - 1) + 1;
if (rs.absolute(absoluteLocation) == false) {
return lr;
}
do {
if (primaryKey.getType()==PrimaryKey.TYPE_INT) {
result.addElement(getObjectDb(new Integer(rs.getInt(1))));
}
else if (primaryKey.getType()==PrimaryKey.TYPE_STRING)
result.addElement(getObjectDb(rs.getString(1)));
else if (primaryKey.getType()==PrimaryKey.TYPE_LONG)
result.addElement(getObjectDb(new Long(rs.getLong(1))));
else if (primaryKey.getType() == PrimaryKey.TYPE_COMPOUND) {
HashMap keys = ((PrimaryKey)primaryKey.clone()).getKeys();
Iterator ir = keys.keySet().iterator();
while (ir.hasNext()) {
String keyName = (String) ir.next();
KeyUnit ku = (KeyUnit) keys.get(keyName);
if (ku.getType() == primaryKey.TYPE_INT) {
ku.setValue(new Integer(rs.getInt(ku.getOrders() + 1)));
} else if (ku.getType() == primaryKey.TYPE_LONG) {
ku.setValue(new Long(rs.getLong(ku.getOrders() + 1)));
} else {
ku.setValue(rs.getString(ku.getOrders() + 1));
}
}
result.addElement(getObjectDb(keys));
}
} while (rs.next());
}
} catch (SQLException e) {
logger.error("listResult:" + e.getMessage());
throw new ErrMsgException("数据库出错!");
} finally {
if (rs != null) {
try {
rs.close();
} catch (Exception e) {}
rs = null;
}
if (conn != null) {
conn.close();
conn = null;
}
}
lr.setResult(result);
lr.setTotal(total);
return lr;
}
private int blockSize = 100;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -