jdbc插入百万数据

seqjiji 2013-12-27 02:00:26
我使用以下代码插入5W数据要2分钟,100W就得40分钟左右,大家有没有更好的方法,提高速度。。。。
表T有70个字段。
conn = getConnection();
conn.setAutoCommit(false);
stat = conn.createStatement();
String sql = "insert T .......";
for(int i=0;i<50000;i++){
stat.addBatch(sql);
}
stat.executeBatch();
conn.commit();

private Connection getConnection()throws Exception{
String dataSourcePath = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
if(dataSourcePath.indexOf("WEB-INF")>0){
dataSourcePath = dataSourcePath.substring(0,dataSourcePath.indexOf("WEB-INF/classes"));
}
//将属性文件加载到内存
Properties properties = new Properties();
FileInputStream in = new FileInputStream(dataSourcePath+"WEB-INF/config/jdbc.properties");
properties.load(in);
in.close();
//读取属性文件
String classname = properties.getProperty("jdbc.driverClassName");
String url = properties.getProperty("jdbc.url");
String username = properties.getProperty("jdbc.username");
String password = properties.getProperty("jdbc.password");
//DBUtil dbUtil = DBUtil.getInstance();
Connection conn = DriverManager.getConnection(url, username, password);
//返回连接
return conn;
}
...全文
262 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolbamboo2008 2013-12-30
  • 打赏
  • 举报
回复
多线程,PreparedStatement
suciver 2013-12-27
  • 打赏
  • 举报
回复
1.使用PreparedStatement 2.利用多线程 3.批处理不要一次就来5w的addBatch(),有人专门做过测试addBatch的数量在1000是最好的
cao_yunfei 2013-12-27
  • 打赏
  • 举报
回复
插入数据多那转换成 PreparedStatement 中有 startBatch()!
seqjiji 2013-12-27
  • 打赏
  • 举报
回复
引用 3 楼 cao_yunfei 的回复:
没在方法前面加stat.startBatch()! 用这种方法10W 条记录应该在20S以内!
Statement 里面没有startBatch
cao_yunfei 2013-12-27
  • 打赏
  • 举报
回复
没在方法前面加stat.startBatch()! 用这种方法10W 条记录应该在20S以内!
forgetsam 2013-12-27
  • 打赏
  • 举报
回复
1 用PreparedStatement。 2 用,分割数据写到文件里,用sqlloader加载。
tony4geek 2013-12-27
  • 打赏
  • 举报
回复
多线程呢? 可不可以写个存储过程。数据库处理里。

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧