求快速插入记录

时间:2022-06-05 21:30:02
在一个循环中会获得要插入的一行记录
预想这样插入:

//前面准备好了statement
while(expression){
a=......;
b=......;
c=.......;
strsql="insert into t (a, b, c) values ("+a+","+b+","+c+")";
stmt.executeUpdate(strsql);
}


但是不知道为什么插入数据的操作很慢,插入9000条记录花了35秒,
而如果注释stmt.executeUpdate一行的话
只需1秒多
数据库是sqlserver,没有建索引,也没有设置关系,总之很普通的表,
有没有办法可以快速插入这些记录,建个缓冲什么的都好

7 个解决方案

#1


PreparedStatement ps = conn.prepareStatement("insert into t (a, b, c) values(?,?,?)";
while(expression){
a=......;
b=......;
c=.......;
ps.setInt(1,a);
ps.setInt(2,b);
ps.setInt(3,c);
ps.executeUpdate();
}

这样做绝对快  http://www.javayou.com

#2


如果是一次性插入这么多的话,建议你用批量更新!!

String preSql = "("insert into t (a, b, c) values(?,?,?)";
PreparedStatement preStm = con.prepareStatement(preSql);

Iterator normalIter = normalSet.iterator();
while(normalIter.hasNext()) {
a=......;
b=......;
c=.......;
preStm.setInt(1,a);
preStm.setInt(2,b);
preStm.setInt(3,c);

preStm.addBatch();
}

preStm.executeBatch();
con.commit();

#3


谢谢楼上两位
但是两种都试了几次,速度没有什么的提升,跟直接executeUpdate(strsql)一样慢
有没有其他的好办法啊

#4


每个stmt.executeUpdate都用一个新的连接,
并采用连接池,
试一试,或许会有提高。

#5


a b c 等于什么,如果是其他从数据库里面出来的数据,为什么不insert into...select from

#6


我用了多线程,相同条件下(条件基本相同,是从网页上取数据,然后存到数据库里),
从35秒提高到27秒
这个问题算解决了,因为也用了连接池,结帖拉

#7


你有没有用JavaBean???!

#1


PreparedStatement ps = conn.prepareStatement("insert into t (a, b, c) values(?,?,?)";
while(expression){
a=......;
b=......;
c=.......;
ps.setInt(1,a);
ps.setInt(2,b);
ps.setInt(3,c);
ps.executeUpdate();
}

这样做绝对快  http://www.javayou.com

#2


如果是一次性插入这么多的话,建议你用批量更新!!

String preSql = "("insert into t (a, b, c) values(?,?,?)";
PreparedStatement preStm = con.prepareStatement(preSql);

Iterator normalIter = normalSet.iterator();
while(normalIter.hasNext()) {
a=......;
b=......;
c=.......;
preStm.setInt(1,a);
preStm.setInt(2,b);
preStm.setInt(3,c);

preStm.addBatch();
}

preStm.executeBatch();
con.commit();

#3


谢谢楼上两位
但是两种都试了几次,速度没有什么的提升,跟直接executeUpdate(strsql)一样慢
有没有其他的好办法啊

#4


每个stmt.executeUpdate都用一个新的连接,
并采用连接池,
试一试,或许会有提高。

#5


a b c 等于什么,如果是其他从数据库里面出来的数据,为什么不insert into...select from

#6


我用了多线程,相同条件下(条件基本相同,是从网页上取数据,然后存到数据库里),
从35秒提高到27秒
这个问题算解决了,因为也用了连接池,结帖拉

#7


你有没有用JavaBean???!