📄 qobjectdb.java
字号:
boolean re = false;
re = jt.executeUpdate(table.getQuerySave(), params) == 1;
// 刷新缓存
refreshSave(primaryKey);
return re;
}
public boolean save() throws ResKeyException {
return save(new JdbcTemplate(new Connection(table.getConnName())));
}
public synchronized boolean save(ParamChecker paramChecker) throws ResKeyException,
ErrMsgException {
String[] fieldsForSave = getFieldsFromQuerySave();
if (fieldsForSave == null)
throw new IllegalArgumentException("fieldsForSave is null.");
int len = fieldsForSave.length;
ResultRecord resultRecord = getResultRecord();
for (int i = 0; i < len; i++) {
resultRecord.set(fieldsForSave[i],
paramChecker.getValue(fieldsForSave[i]));
}
return save();
}
/**
* 根据resultRecord及primaryKey自动更新
* @param jt JdbcTemplate
* @return boolean
*/
public boolean save(JdbcTemplate jt) throws ResKeyException {
String[] fieldsForSave = getFieldsFromQuerySave();
if (fieldsForSave == null)
return false;
int len = fieldsForSave.length;
Object[] paramsPk = primaryKey.toObjectArray();
// System.out.println(getClass() + " save " + primaryKey);
Object[] params = new Object[fieldsForSave.length + paramsPk.length];
for (int i = 0; i < len; i++) {
params[i] = resultRecord.get(fieldsForSave[i]);
}
len = params.length;
int k = 0;
for (int i = fieldsForSave.length; i < len; i++) {
params[i] = paramsPk[k];
k++;
}
boolean re = false;
try {
re = save(jt, params);
} catch (SQLException e) {
LogUtil.getLog(getClass()).error("save:" + e.getMessage());
throw new ResKeyException(SkinUtil.ERR_DB);
}
return re;
}
public String[] getFieldsFromQueryCreate() {
String queryCreate = table.getQueryCreate();
int p = queryCreate.indexOf("(");
int q = queryCreate.indexOf(")");
if (p == -1)
return null;
if (q == -1)
return null;
String str = queryCreate.substring(p + 1, q);
// 替换掉空格
str = str.replaceAll(" ", "");
String[] ary = StrUtil.split(str, ",");
return ary;
}
/**
* 解析querySave,获取其中更新的字段名称及其顺序
* @return String[]
*/
public String[] getFieldsFromQuerySave() {
String querySave = table.getQuerySave();
int p = querySave.indexOf("set");
if (p == -1)
return null;
p += 4;
int q = querySave.indexOf("where");
// update *** set a=?,b=?,... where f=? and g=?"
// ^ ^
// 取得这一段的字符串
String str = querySave.substring(p, q - 1);
// 替换掉空格
str = str.replaceAll(" ", "");
// 替换掉=?
str = str.replaceAll("=\\?", "");
String[] ary = StrUtil.split(str, ",");
return ary;
}
/**
* 2007.1.7 添加,用于OA中sms_receive_record的处理(改为使用list(JdbcTemplate jt, String sql, Object[] params))
* @param sql String
* @param params Object[]
* @param curPage int
* @param pageSize int
* @return ListResult
* @throws ResKeyException
*/
public ListResult listResult(String connName, String sql, Object[] params, int curPage,
int pageSize) throws
ResKeyException {
int total = 0;
Vector result = new Vector();
ListResult lr = new ListResult();
lr.setTotal(total);
lr.setResult(result);
JdbcTemplate jt = new JdbcTemplate(new Connection(connName));
try {
// 取得总记录条数
String countsql = SQLFilter.getCountSql(sql);
ResultIterator ri = jt.executeQuery(countsql, params);
if (ri.hasNext()) {
ResultRecord rr = (ResultRecord) ri.next();
total = rr.getInt(1);
}
// 防止受到攻击时,curPage被置为很大,或者很小
int totalpages = (int) Math.ceil((double) total / pageSize);
if (curPage > totalpages)
curPage = totalpages;
if (curPage <= 0)
curPage = 1;
jt = new JdbcTemplate(new Connection(connName));
if (total != 0)
jt.getConnection().setMaxRows(curPage * pageSize); // 尽量减少内存的使用
ri = jt.executeQuery(sql, params, curPage, pageSize);
while (ri.hasNext()) {
ResultRecord rr = (ResultRecord) ri.next();
if (primaryKey.getType() == PrimaryKey.TYPE_INT) {
result.addElement(getQObjectDb(new Integer(rr.getInt(1))));
} else if (primaryKey.getType() == PrimaryKey.TYPE_STRING)
result.addElement(getQObjectDb(rr.getString(1)));
else if (primaryKey.getType() == PrimaryKey.TYPE_LONG)
result.addElement(getQObjectDb(new Long(rr.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(rr.getInt(ku.getOrders() + 1)));
} else if (ku.getType() == primaryKey.TYPE_LONG) {
ku.setValue(new Long(rr.getLong(ku.getOrders() + 1)));
} else {
ku.setValue(rr.getString(ku.getOrders() + 1));
}
}
result.addElement(getQObjectDb(keys));
}
}
} catch (SQLException e) {
LogUtil.getLog(this.getClass()).error("listResult:" + e.getMessage());
throw new ResKeyException(SkinUtil.ERR_DB);
}
lr.setResult(result);
lr.setTotal(total);
return lr;
}
public ListResult listResult(String sql, int curPage, int pageSize) throws
ResKeyException {
return listResult(new JdbcTemplate(new Connection(table.getConnName())),
sql, curPage, pageSize);
}
public ListResult listResult(JdbcTemplate jt, String sql, int curPage,
int pageSize) throws
ResKeyException {
int total = 0;
ResultSet rs = null;
Vector result = new Vector();
ListResult lr = new ListResult();
lr.setTotal(total);
lr.setResult(result);
Connection conn = jt.getConnection(); // new Connection(Global.defaultDB);
try {
// 取得总记录条数
String countsql = SQLFilter.getCountSql(sql);
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(sql);
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(getQObjectDb(new Integer(rs.getInt(1))));
} else if (primaryKey.getType() == PrimaryKey.TYPE_STRING)
result.addElement(getQObjectDb(rs.getString(1)));
else if (primaryKey.getType() == PrimaryKey.TYPE_LONG)
result.addElement(getQObjectDb(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(getQObjectDb(keys));
}
} while (rs.next());
}
} catch (SQLException e) {
LogUtil.getLog(this.getClass()).error("listResult:" + e.getMessage());
throw new ResKeyException(SkinUtil.ERR_DB);
} 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;
}
public Vector list() {
return list(new JdbcTemplate(new Connection(table.getConnName())),
table.getQueryList());
}
public Vector list(String sql) {
return list(new JdbcTemplate(new Connection(table.getConnName())), sql);
}
/**
* 全部的记录列表
* @return Vector
*/
public Vector list(JdbcTemplate jt, String sql) {
int total = 0;
ResultSet rs = null;
Vector result = new Vector();
Connection conn = jt.getConnection(); // Connection(Global.defaultDB);
try {
// 取得总记录条数
String countsql = SQLFilter.getCountSql(sql);
rs = conn.executeQuery(countsql);
if (rs != null && rs.next()) {
total = rs.getInt(1);
}
if (rs != null) {
rs.close();
rs = null;
}
conn.prepareStatement(sql);
if (total != 0)
// sets the limit of the maximum nuber of rows in a ResultSet object
conn.setMaxRows(total); // 尽量减少内存的使用
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
rs.setFetchSize(total); // rs一次从POOL中所获取的记录数
if (rs.absolute(1) == false) {
return result;
}
do {
if (primaryKey.getType() == PrimaryKey.TYPE_INT)
result.addElement(getQObjectDb(new Integer(rs.getInt(1))));
else if (primaryKey.getType() == PrimaryKey.TYPE_STRING)
result.addElement(getQObjectDb(rs.getString(1)));
else if (primaryKey.getType() == PrimaryKey.TYPE_LONG)
result.addElement(getQObjectDb(new Long(rs.getLong(1))));
else if (primaryKey.getType() == PrimaryKey.TYPE_COMPOUND) {
HashMap keys = ((PrimaryKey)primaryKey.clone()).getKeys();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -