日期:2014-05-16 浏览次数:20627 次
Map<String, Object> _m = new LinkedHashMap(listRecord.get(0));//获取一条记录,作为过滤、分组依据
String[] tableFields = db.getFields(tableName);//表中的字段
String[] tableKeys = db.getKeys(tableName);//表中的主键
Object[] recordFields = (_m.keySet()).toArray(); //获取记录里的字段名的集合
for (int i = 0; i < recordFields.length; i++) {
if (!tool.isInFields(tableFields, recordFields[i].toString())) {
_m.remove(recordFields[i].toString());//移除无效字段, 查看记录中的字段在表中是否存在,如果不存在,则移除到
}
}
Object[] k0 = (_m.keySet()).toArray(); //过滤后的有效字段
Map<String, Object> key_m = new LinkedHashMap();//记录里的主键
if (!isUpdateKey) {
for (int i = 0; i < k0.length; i++) {
if (tool.isInFields(tableKeys, k0[i].toString())) {//记录中是否有主键
key_m.put(k0[i].toString(), _m.remove(k0[i].toString()));//将记录中的主键移到key_m中;保证不对主键更新
}
}
}
Object[] fields = (_m.keySet()).toArray(); //记录中不包含主键的有效字段;再次过滤掉主键字段的结果
Object[] keys = (key_m.keySet()).toArray(); //记录中包含的主键
if (isUpdateKey) {
if (keys.length == 0 || keys.length != tableKeys.length) {
return num;
}
}
String[] kss = new String[fields.length]; //保存"键名=?"
for (int i = 0; i < fields.length; i++) {
kss[i] = fields[i].toString() + "=?";
}
String n_v = tool.arryToString(kss, ",");
String preparedStatementUpdate = "update " + tableName + " set " + n_v + " ";
//System.out.println(preparedStatementUpdate);
完整的_preparedStatementUpdate代码
/**
* 使用PreparedStatement更新多条记录 本方法是根据JDBC API类名的判断