先查询如有数据则计算从其他数据库查出来的数据与下面单数据库查出来的数据来进行比对。通过三个字段来判断如果都相同则进行更新,如果有不相同的则不相同的进行插入。
String url = "jdbc:postgresql://数据库地址";
String name = "org.postgresql.Driver";
String user = "postgres";
String password = "Aa123456";
Connection conn = null;
try {
Class.forName(name);
conn = DriverManager.getConnection(url, user, password);
conn.setAutoCommit(false);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
try {
StringBuffer suffix = new StringBuffer();
conn.setAutoCommit(false);
Statement statement = conn.createStatement();
String selecatdata = "select datatime,cityname,statype from county_ranking where datatime = "+"\'"+DateUtil.dateToStr((Date)obsTime1,"yyyy-MM-dd 00:00:00")+"\'"+" and statype = "+"\'"+statype+"\'"+"";
ResultSet resultSet = statement.executeQuery(selecatdata);
ArrayList<Map<String,Object>> list = new ArrayList<>();
while (resultSet.next()) {
Map<String,Object> map1 = new HashMap<>();
map1.put("datatime",resultSet.getString("datatime"));
map1.put("cityname",resultSet.getString("cityname"));
map1.put("statype",resultSet.getString("statype"));
list.add(map1);
}
List<Map<String, Object>> collect = new ArrayList<>();
if(!CollectionUtils.isEmpty(list)){
collect = mapList.stream().filter(v -> {
if (list.stream().map(u -> u.get("datatime")).collect(Collectors.toList()).contains(DateUtil.dateToStr((Date)(v.get("datatime")),"yyyy-MM-dd 00:00:00"))
&& list.stream().map(u -> u.get("cityname")).collect(Collectors.toList()).contains(v.get("cityname"))
&& list.stream().map(u -> u.get("statype")).collect(Collectors.toList()).contains(v.get("statype"))
) {
return true;
}else {
return false;
}
}).collect(Collectors.toList());
for (Map<String, Object> data : collect) {
String updatedata = "update county_ranking set comindex="+data.get("index")+",\"comindexImprove\"="+data.get("indexImprove")+",pm25="+data.get("pm25")+",\"pm25Improve\"="+data.get("pm25Improve")+",pm10="+data.get("pm10Improve")+",\"pm10Improve\"="+data.get("pm10Improve")+",o3_8h="+data.get("o3_8h")+",\"o3_8hImprove\"="+data.get("o3_8hImprove")+",no2="+data.get("no2")+",\"no2Improve\"="+data.get("no2Improve")+",so2="+data.get("so2")+",\"so2Improve\"="+data.get("so2Improve")+",co="+data.get("co")+",\"coImprove\"="+data.get("coImprove")+" where datatime="+"\'"+DateUtil.dateToStr((Date) data.get("datatime"),"yyyy-MM-dd 00:00:00")+"\'"+" and cityname="+"\'"+data.get("cityname")+"\'"+" and statype="+"\'"+data.get("statype")+"\'"+"";
statement.executeUpdate(updatedata);
}
}
if(!CollectionUtils.isEmpty(list)){
mapList.removeAll(collect);
}
if(!CollectionUtils.isEmpty(mapList)){
String prefix = "insert into county_ranking (id,datatime,cityname,statype,comindex,\"comindexImprove\",pm25,\"pm25Improve\",pm10,\"pm10Improve\",o3_8h,\"o3_8hImprove\",no2,\"no2Improve\",so2,\"so2Improve\",co,\"coImprove\",o3_1h,\"o3_1hImprove\") values";
for (Map<String, Object> m : mapList) {
suffix.append("('"+m.get("dataid")+"','"+m.get("datatime")+"','"+m.get("cityname")+"','"+m.get("statype")+"','"+m.get("index")+"','"+m.get("indexImprove")+"','"+m.get("pm25")+"','"+m.get("pm25Improve")+"','"+m.get("pm10")+"','"+m.get("pm10Improve")+"','"+m.get("o3_8h")+"','"+m.get("o3_8hImprove")+"','"+m.get("no2")+"','"+m.get("no2Improve")+"','"+m.get("so2")+"','"+m.get("so2Improve")+"','"+m.get("co")+"','"+m.get("coImprove")+"','-999"+"','-999'"+"),");
}
String sql = prefix + suffix.substring(0,suffix.length()-1);
statement.addBatch(sql);
statement.executeBatch();
}
suffix = new StringBuffer();
conn.commit();
statement.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}