公司用的系统比较老,不能上框架,因此用原生jdbc。
原来的程序员写的一条一条插入,又慢又容易报error。
没办法,老夫上网找了资料,重新改写程序。
一、传入list,进行切割
// 数据传输,为提高插入效率,对数据进行切割
int ls = list.size();
int size = 1000;
if (ls <= size) {
// 若数据量小于size时,直接插入
insertDulDataForSqlServer(list);
} else {
int times = (int) Math.ceil(ls / size);
System.out.println("总插入批次 times: " + times);
for (int i = 0; i <= times; i++) {
System.out.println("截取的开始角标" + i * size + " 截止角标" + Math.min((i + 1) * size, ls) + " min"
+ (i + 1) * size + " max" + ls);
// Math.min()方法,取较小值
List<Policy> subList = list.subList(i * size, Math.min((i + 1) * size, ls));
// 插入
insertDulDataForSqlServer(subList);
}
}
二、执行bean转化并插入
private void insertDulDataForSqlServer(List<Policy> list) throws SQLException {
//连接数据库
Connection conn = DBConnection();
try {
PreparedStatement stmt = conn
.prepareStatement("insert into dbo.BC_CONTROL_INSURANCE values(?,?,?,?,?)");
// 执行
for (Policy bean : list) {
preparedStatementStringSetter(stmt, 1, bean.getNo());
preparedStatementStringSetter(stmt, 2, "");
preparedStatementStringSetter(stmt, 3, bean.getIn());
preparedStatementStringSetter(stmt, 4, bean.getPolicy());
preparedStatementDateSetter(stmt, 5, bean.getDat());
stmt.addBatch();
}
stmt.executeBatch();
System.out.println("执行插入语句:");
// 提交需要执行的语句
conn.commit();
stmt.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
到此基本结束,
后面最多给个jdbc连接
private Connection DBConnection() {
String url = "jdbc:microsoft:sqlserver://ip;databaseName=DB_TRANS";
String userString = "x";
String pwd = "123";
Connection conn = null;
try {
return conn = DriverManager.getConnection(url, userString, pwd);
} catch (SQLException e) {
//因为公司网络垃圾,怕连不上数据库,所以连接两次
try {
return conn = DriverManager.getConnection(url, userString, pwd);
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
return conn;
}