方法

constructUpdateSQL

private static String constructUpdateSQL(String tableName, List<Map<String, Object>> maps, String primaryKeyName) {
/*update testMultiUpdateSQL set
remark = case id
when 1 then '是小明介绍来的'
when 2 then '比较有钱'
end,
realname = case id
when 1 then '田馥甄'
when 2 then '陈嘉桦'
end
where id in
( 1, 2 )*/ // 主键值合集
List<String> primaryKeyValues = new ArrayList<String>();
for (Map<String, Object> map : maps) {
primaryKeyValues.add(String.valueOf(map.get(primaryKeyName)));
} // 列名集合
List<String> keys = new ArrayList<String>();
Map<String, Object> sigleMap = maps.get(0);
for (Map.Entry<String, Object> sigleEntry : sigleMap.entrySet()) {
String key = sigleEntry.getKey();
if (key.equals(primaryKeyName)) {
continue;
} else {
keys.add(key);
}
} StringBuilder updateSQL = new StringBuilder();
updateSQL.append("UPDATE " + tableName + " SET "); for (String key : keys) {
updateSQL.append(key + " = case " + primaryKeyName + " ");
for (String pkv : primaryKeyValues) {
for (Map<String, Object> map : maps) {
if (map.get(primaryKeyName).equals(pkv)) {
String val = String.valueOf(map.get(key));
updateSQL.append("when '" + pkv + "' then '" + val + "'");
break;
}
} }
updateSQL.append("end,");
}
if (updateSQL.toString().endsWith(",")) {
updateSQL.deleteCharAt(updateSQL.length() - 1);
} updateSQL.append(" WHERE " + primaryKeyName + " in ");
updateSQL.append("(");
for (String primaryKeyValue : primaryKeyValues) {
updateSQL.append("'" + primaryKeyValue + "',");
}
if (updateSQL.toString().endsWith(",")) {
updateSQL.deleteCharAt(updateSQL.length() - 1);
}
updateSQL.append(")"); return updateSQL.toString();
}

  

constructInsertSQL

private static String constructInsertSQL(String tableName, List<Map<String, Object>> maps) {
if (maps == null || maps.size() == 0) {
return "";
}
StringBuilder sb1 = new StringBuilder();
sb1.append("INSERT INTO ");
sb1.append(tableName);
sb1.append("(");
Map<String, Object> allField = maps.get(0); // 获取第一个集合,用户获取字段名
for (Map.Entry<String, Object> soe : allField.entrySet()) {
String fieldName = soe.getKey();
sb1.append(fieldName + ",");
}
if (sb1.lastIndexOf(",") == sb1.length() - 1) {
sb1.deleteCharAt(sb1.length() - 1);
}
sb1.append(")");
sb1.append(" VALUES "); StringBuilder sb2 = new StringBuilder();
for (Map<String, Object> map : maps) {
StringBuilder t = new StringBuilder();
t.append("(");
for (Map.Entry<String, Object> filed : map.entrySet()) {
Object fieldValue = filed.getValue();
if (!PubString.isNullOrSpace(fieldValue)) {
t.append("'" + fieldValue + "',");
} else {
t.append("'',");
}
}
if (t.lastIndexOf(",") == t.length() - 1) {
t.deleteCharAt(t.length() - 1);
}
t.append("),");
sb2.append(t);
} if (sb2.lastIndexOf(",") == sb2.length() - 1) {
sb2.deleteCharAt(sb2.length() - 1);
}
sb1.append(sb2).append(";");
return sb1.toString();
}

  

测试

Map m1 = new HashMap();
m1.put("id", "7f758e9e4e1b47cf8fad39f022e0a425");
m1.put("remark", "按时");
m1.put("realname", "阿斯顿发多少"); Map m2 = new HashMap();
m2.put("id", "d629146efa804612a64860f1e85d1249");
m2.put("remark", "陈嘉阿斯顿发斯蒂芬桦");
m2.put("realname", "田阿斯顿发送到馥甄"); List<Map<String, Object>> maps = new ArrayList<Map<String, Object>>();
maps.add(m1);
maps.add(m2); String updateSQL = constructUpdateSQL("testMultiUpdateSQL", maps, "id");
System.out.println(updateSQL); String insertSQL = constructInsertSQL("testMultiUpdateSQL", maps);
System.out.println(insertSQL);

  

update
testMultiUpdateSQL
set
remark = case
id
when '7f758e9e4e1b47cf8fad39f022e0a425' then '按时'
when 'd629146efa804612a64860f1e85d1249' then '陈嘉阿斯顿发斯蒂芬桦'
end,
realname = case
id
when '7f758e9e4e1b47cf8fad39f022e0a425' then '阿斯顿发多少'
when 'd629146efa804612a64860f1e85d1249' then '田阿斯顿发送到馥甄'
end
where
id in ( '7f758e9e4e1b47cf8fad39f022e0a425', 'd629146efa804612a64860f1e85d1249' ) ================================================================================================== insert
into
testMultiUpdateSQL( remark, id, realname )
values ( '按时', '7f758e9e4e1b47cf8fad39f022e0a425', '阿斯顿发多少' ),
( '陈嘉阿斯顿发斯蒂芬桦', 'd629146efa804612a64860f1e85d1249', '田阿斯顿发送到馥甄' );

  

根据map键值对,生成update与select语句,单条执行语句的更多相关文章

  1. 用字典给Model赋值并支持map键值替换

    用字典给Model赋值并支持map键值替换 这个是昨天教程的升级版本,支持键值的map替换. 源码如下: NSObject+Properties.h 与 NSObject+Properties.m / ...

  2. java 把json对象中转成map键值对

    相关:Json对象与Json字符串的转化.JSON字符串与Java对象的转换 本文的目的是把json串转成map键值对存储,而且只存储叶节点的数据 比如json数据如下: {responseHeade ...

  3. 如何将Map键值的下划线转为驼峰

    本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客:如何将Map键值的下划线转为驼峰: 例,将HashMap实例extMap键值下划线转为驼峰: 代码: HashMap<String ...

  4. Java Map 键值对排序 按key排序和按Value排序

    一.理论准备 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. TreeMap:基于红黑树(Red-Black tre ...

  5. 枚举类返回Map键值对,绑定到下拉框

    有时候,页面的下拉框要显示键值对,但是不想从数据库取,此时我们可以写一个枚举类, Java后台代码 1.枚举类 import java.util.HashMap; import java.util.M ...

  6. ODAC(V9.5.15) 学习笔记(十九)主键值自动生成

    ODAC支持通过Oracle的序列来自动生成表的主键功能.这个过程允许在客户端自动完成,不需要过多代码.这个对一些要求自动增长字段做主键的场合非常有用.其实现步骤为: 1.数据库必须先建立生成主键的序 ...

  7. Java的map键值对的用法,map的遍历,Entry对象的使用

    思路: 1.定义集合 2.存储数据 3.添加元素 4.遍历 4.1将需要遍历的集合的键封装到set集合中(这用到了entrySet方法,和Entry对象) 4.2声明迭代器或者用for增强循环 4.3 ...

  8. a=av###b=bv###c=cv map键值对 (a,av) (b,bv) (c,cv)

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; impo ...

  9. list转map 键值对

    Map<Long,Account> map = new HashMap<Long,Account>(); for(int i=0;i<list.size();i++){ ...

随机推荐

  1. MIUI 们的发展蓝图:“罪恶”秘密背后的金钱和机遇

    (原文来自 AllThingsD)   听起来有点唬人,但是移动变革的确是这个时代最大的一次技术平台升级事件.这场趋势实在太浩大,不断地循环往复,对于创业者(还有像我这样的投资人来说),则意味着令人激 ...

  2. jmeter 的java请求代码在main方法里面执行

    1.新建一个java请求执行加法类 public class TestDemo { public int Tdemo(int a,int b){ int sum = 0; sum = a+b; ret ...

  3. dd-wrt 中继配置

    本配置方法在tp-link 703n v1.6上应用成功 1.首先把703n刷成dd-wrt.这里我刷的是 DD-WRT v24-sp2 (03/15/12) std版本,要刷两个固件,一个facto ...

  4. ios处理键盘

    #pragma mark - Keyboard - (void)addKeyboardNoti { [[NSNotificationCenter defaultCenter] addObserver: ...

  5. 关于如果从SQLSERVER中获取 数据库信息 或者 表信息

    1.首先呢.要明确一点.SQLSERVER中的系统信息一般都无从table中找到的.通常都在View中找到 这是重点. 2.接着我们打开算起来SQLSERVER,展开你某一数据库.看到类似 3.然后展 ...

  6. Java常考面试题(二)

    序言 昨天刚开始的”每日5题面试“这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了.就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看做过的面试题,试着用 ...

  7. Project Euler:Problem 32 Pandigital products

    We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly o ...

  8. 并发编程 – Concurrent 用户指南--转

    1. java.util.concurrent – Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Ja ...

  9. 安卓数据解析之 fastjson 的解析以及Gson解析

    在安卓开发过程中的.我们经常使用的数据传递是以json格式传递.安卓 亲爹提供了我们Gson解析工具.点击下载Gson.jar 阿里巴巴FastJson是一个Json处理工具包,包含"序列化 ...

  10. 转:在eclipse中 使用7.0及以上手机进行测试时logcat不打印日志的解决办法

    解决办法 替换ADT中的ddmlib.jar文件. 下载ADT对应的zip包,解压出ddmlib.jar文件 放到eclipse\configuration\org.eclipse.osgi\bund ...