大量数据如何完成添加;
一、 多用于定时任务的情况, 当大量数据进入时,没有保存完成,而新的一轮定时任务就已经重复进入的情况下 ,该如何进行处理呢
import com.alibaba.fastjson.JSONObject;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class aca {
public static void main(String[] args) throws Exception {
try {
String driver = "com.mysql.cj.jdbc.Driver";
Class.forName(driver);
String url = "jdbc:mysql://110.110.10.100:3306/root?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2b8&allowMultiQueries=true";
String username = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, username, password);
PreparedStatement stmt = null;
// 关闭事务自动提交 ,这一行必须加上
conn.setAutoCommit(false);
//多用于定时任务;进入大量数据的时候, 先将之前的表根据条件删除,然后再进行添加;
String sql0 = "DELETE FROM SQL表名";
PreparedStatement stmt0 = conn.prepareStatement(sql0);
stmt0.execute();
//commit提交;
conn.commit();
String sql = "INSERT INTO `new_bus_gps`(`bus_id`, `self_no`, `ing`, `lat`,create_time) VALUES (?,?,?,?,?)";
stmt = conn.prepareStatement(sql);
//创建一个集合,假设其中有大量的数据
// 有人会想 Map怎么办呢?开动聪明的脑瓜吧
List<String> list = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Map<String, Object> map = JSONObject.parseObject(list.get(i).toString(), Map.class);
//这里对应sql语句, VALUES 后面的问号,五个问号写五条噢
stmt.setString(1, map.get("1").toString());
stmt.setString(2, map.get("1").toString());
stmt.setString(3, map.get("1").toString());
stmt.setString(4, map.get("1").toString());
stmt.setString(5, map.get("1").toString());
stmt.addBatch();
if (i != 0 && (i % 10 == 0 || list.size() - i == 1)) {
stmt.executeBatch();
conn.commit();
}
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
10秒钟运行的定时任务的话 , 6000条的数据量是可以完成的。