,顺序无关;
* @return 返回第一个主键值。【注:原返回int型update返回值,更改为第一个主键值,将更方便应用】
* @throws SQLException
*/
@Override
public Object saveOne(String tableName, Map mapRecord) throws SQLException {
Object firstKeyValue = null;
int n = 0;
String _w = "";
String[] keys = db.getKeys(tableName);
String[] fields = db.getFields(tableName);
if (keys.length == 0) {
n = this.insert(tableName, mapRecord);//无主键的表可以直接插入
if (n > 0) {
firstKeyValue = mapRecord.get(fields[0]);
}//没有主键,则返回第一个字段值
} else {
firstKeyValue = mapRecord.get(keys[0].toString());
if (firstKeyValue != null & !"".equals(firstKeyValue)) {
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 null;//如果有多个主键,而记录中缺少多个主键,则不保存
} 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()) {
n = this.insert(tableName, mapRecord);//原原本本地插入
} else {
n = this.update(tableName, mapRecord, _w);//原原本本地更新
}
}
}
} else {// if (firstKeyValue == null || "".equals(firstKeyValue))
Field f = db.getField(tableName, keys[0]);
String className = f.getTypeClassName();
if (className.equals("java.lang.Long")) {
firstKeyValue = insertKey(tableName);
mapRecord.put(keys[0], firstKeyValue);
n = update(tableName, mapRecord);//表有主键,但记录中不含主键记录||主键记录值是null||主键值是"",则插入,并自动插入主键
}
if (className.equals("java.lang.Integer") || className.equals("java.lang.Short") || className.equals("java.lang.Float") || className.equals("java.lang.Double") || className.equals("java.lang.String")) {
firstKeyValue = insertAutoKey(tableName);
mapRecord.put(keys[0], firstKeyValue);
n = update(tableName, mapRecord);//表有主键,但记录中不含主键记录||主键记录值是null||主键值是"",则插入,并自动插入主键
}
}
}
return firstKeyValue;