导入jar包: sqljdbc4-4.2.jar 提取码:ifti — maven导入方法
import java.sql.*;
public class BatchInsertUtil {
/**
* @param list 要保存的对象集
* @throws Exception 插入对象失败
*/
public void batchInsert(List<Object> list) throw Exception{
CachedRowSetImpl crs = getCachedRowSet(tableName);
for (Object obj: list) {// 将对象转化为行数据
crs.moveToInsertRow();// 以动指针到插入行(虚拟行)
// 设置虚拟行相应的字段与数值;注意:字符串中的字段名与类型要与数据表中的一致
crs.updateLong("id", obj.getId());
crs.updateString("name", obj.getName());
crs.updateString("remark", obj.getRemark());
......
crs.insertRow();// 将虚拟行插入缓存
crs.moveToCurrentRow();// 将指针移动到当前行
}
SQLServerBulkCopy bulkCopy = getSqlServerBulkCopy(tableName, crs,list.size());
}
/**
* @param con 链接对象
* @param tableName 表名字
* @return 数据表字段初始化的数据对象
* @throws SQLException
*/
public CachedRowSetImpl getCachedRowSet(String tableName){
Connection con = connection(url,username,password);// 链接方式固定(配置)
String sql = "select * from " + tableName + " where 1=0";
PreparedStatement ps = con.prepareStatement(sql);// 执行sql语句封装
ResultSet rs = ps.executeQuery();// 执行语句
CachedRowSetImpl crs = new CachedRowSetImpl();// 创建行操作对象
crs.populate(rs);// 设置表字段
rs.close();// 关闭流资源
con.close();// 关闭数据库链接
return crs;// 返回含有表字段的行操作对象
}
/**
* @param url 链接URL
* @param username 用户名
* @param password 密码
* @return 链接对象
* @throws Exception 建立链接失败异常
*/
public Connection connection(url,username,password) throws Exception{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
return DriverManager.getConnection(url,username,password);
}
/**
* @param tableName 表名字
* @param crs 链接对象
* @return 数据表字段初始化的数据对象
* @throws SQLException
*/
public void saveRows(String tableName,CachedRowSetImpl crs,int size){
String url = String url = "jdbc:sqlserver://localhost:1433;DatabaseName=datebaseName;user=userName;password=userPassword";
SQLServerBulkCopyOptions copyOptions = new SQLServerBulkCopyOptions();
copyOptions.setKeepIdentity(true);
copyOptions.setBatchSize(size);// 设置批量插入的数量
copyOptions.setUseInternalTransaction(true);// 开启事务
SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(url);// 配置url
bulkCopy.setBulkCopyOptions(copyOptions);// 设置批量操作参数
bulkCopy.setDestinationTableName(tableName);// 设置要操作的表名
bulkCopy.writeToServer(crs);// 将数据保存到数据库
crs.close();// 释放资源
bulkCopy.close();// 释放资源
}
}