我目前正在编写一个Java程序来维护与两个SQLlite数据库的连接。我需要从一个DB获取一个大的结果并将其插入另一个数据库的表中。
每个数据库都有自己的线程服务请求其数据库。目前,我从DB1的查询中获取结果,并将结果集转换为List<HashMap<String,Object>>
,其中列表中的每个项目都是一行,并且hashmap中的每个项目都是列名称和关联数据。每行包含时间戳和值列。我循环遍历List<HashMap<>>
并使用以下内容构造DB2的插入查询:
public String insertDataIntoTrend(ResultData a, int configId) {
String query = "";
String adder = "";
if (a.getData().isEmpty() == false) {
errorLog.info("Start");
for (HashMap<String, Object> b : a.getData()) {
adder = adder + "(" + configId + ", " + b.get("timestamp") + ", " + b.get("value") + "),";
}
errorLog.info("End");
// Remove extra comma
adder = adder.substring(0, adder.length() - 1);
query = "insert or ignore into TrendData (configId, timestamp, value) VALUES " + adder;
}
return query;
}
a.getData()
是List<HashMap>
。 63000个条目需要9分钟。
有更有效的方法吗?或者是否可以插入整个结果集而无需逐行构建新的插入查询?
TLDR:我试图在两个单独的数据库上执行Insert DB2.table VALUES(Select timestamp,value from DB1.table)
。有没有办法轻松地为整个结果集构建插入查询?