预想这样插入:
//前面准备好了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
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();
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)一样慢
有没有其他的好办法啊
但是两种都试了几次,速度没有什么的提升,跟直接executeUpdate(strsql)一样慢
有没有其他的好办法啊
#4
每个stmt.executeUpdate都用一个新的连接,
并采用连接池,
试一试,或许会有提高。
并采用连接池,
试一试,或许会有提高。
#5
a b c 等于什么,如果是其他从数据库里面出来的数据,为什么不insert into...select from
#6
我用了多线程,相同条件下(条件基本相同,是从网页上取数据,然后存到数据库里),
从35秒提高到27秒
这个问题算解决了,因为也用了连接池,结帖拉
从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
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();
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)一样慢
有没有其他的好办法啊
但是两种都试了几次,速度没有什么的提升,跟直接executeUpdate(strsql)一样慢
有没有其他的好办法啊
#4
每个stmt.executeUpdate都用一个新的连接,
并采用连接池,
试一试,或许会有提高。
并采用连接池,
试一试,或许会有提高。
#5
a b c 等于什么,如果是其他从数据库里面出来的数据,为什么不insert into...select from
#6
我用了多线程,相同条件下(条件基本相同,是从网页上取数据,然后存到数据库里),
从35秒提高到27秒
这个问题算解决了,因为也用了连接池,结帖拉
从35秒提高到27秒
这个问题算解决了,因为也用了连接池,结帖拉
#7
你有没有用JavaBean???!