设为首页 加入收藏

TOP

实现通用的保存记录的方法(一)
2014-11-24 12:02:29 来源: 作者: 【 】 浏览:92
Tags:实现 通用 保存 记录 方法
在JadePool中,为了方便用户录入,核心类ProcessVO提供了两个通用的保存记录的方法。
1、public int save(String tableName, Map mapRecord) throws SQLException
2、public Object saveOne(String tableName, Map mapRecord) throws SQLException
save方法返回标准JDBC插入或者更新操作的返回值,即:插入或更新成功返回1,失败,返回0;
saveOne方法是从实际需要出发,返回插入或者更新记录的主键值。
这两个通用方法都调用底层的_preparedStatementInsert和_preparedStatementUpdate两个核心方法。
基本构思是:
如果该记录存在,则更新之,如果该记录不存在,则插入。如果第一个主键的值为null||"",则自动插入新的主键值,这个方法不适合对含多主键的表进行插入操作,但不影响对多主键的表进行更新。
save方法的源代码如下:
[java]
/**
* 保存一条记录.
* 如果该记录存在,则更新之,如果该记录不存在,则插入。如果第一个主键的值为null||"",则自动插入新的主键值,这个方法不适合对含多主键的表进行插入操作,但不影响对多主键的表进行更新
*
* @param tableName 是表名
* @param mapRecord 是准备插入到表中的一条记录的数据,其键名与字段名相同,顺序无关;
* @return 返回标准update方法返回的状态值
* @throws SQLException
*/
@Override
public int save(String tableName, Map mapRecord) throws SQLException {
int num = 0;
String _w = "";
String[] keys = db.getKeys(tableName);
if (keys.length == 0) {
return this.insert(tableName, mapRecord);//无主键的表可以直接插入
} else {
Object kv = mapRecord.get(keys[0].toString());
if (kv == null || "".equals(kv)) {
num = insert(tableName, mapRecord, true);//表有主键,但记录中不含主键记录||主键记录值是null||主键值是"",则插入,并自动插入主键
} else {
Object[] recordFields = mapRecord.keySet().toArray();
Map _key_m = new LinkedHashMap();
for (int i = 0; i < recordFields.length; i++) {
if (tool.isInFields(keys, recordFields[i].toString())) {
_key_m.put(recordFields[i].toString(), mapRecord.get(recordFields[i].toString()));//提取记录中的主键字段
}
}
if (!_key_m.isEmpty()) {
Object[] _k = _key_m.keySet().toArray();
if (_k.length != keys.length) {
return num;
} else {
Field f = db.getField(tableName, _k[0].toString());
if (f.getTypeClassName().equals("java.lang.String")) {
_w = " where " + _k[0] + " like '" + mapRecord.get(_k[0].toString()) + "'";
} else {
_w = " where " + _k[0] + " = " + mapRecord.get(_k[0].toString());
}
if (_k.length > 1) {
for (int i = 1; i < _k.length; i++) {
f = db.getField(tableName, _k[i].toString());
if (f.getTypeClassName().equals("java.lang.String")) {
_w = _w + " and " + _k[i] + " like '" + mapRecord.get(_k[i].toString()) + "'";
} else {
_w = _w + " and " + _k[i] + " = " + mapRecord.get(_k[i].toString());
}
}
}
Map rm = this.queryOne("select " + _k[0] + " from " + tableName + _w);
if (rm.isEmpty()) {
num = this.insert(tableName, mapRecord);//原原本本地插入
} else {
num = this.update(tableName, mapRecord, _w);//原原本本地更新
}
}
}
}
}
return num;
}
saveOne方法的源代码如下:
[java] view plaincopyprint
/**
* 保存一条记录.
* 如果该记录存在,则更新之,如果该记录不存在,则插入。如果第一个主键的值为null||"",则自动插入新的主键值,这个方法不适合对含多主键的表进行插入操作,但不影响对多主键的表进行更新
*
* @param tableName 是表名
* @param mapRecord 是准备插入到表中的一条记录的数据,其键名与字段名相同
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇快速排序<优化> 下一篇Java - 简易记事本

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: