又是关于prepareStatement提高性能的问题,请帮忙看一下!

testu 04-06-20

我写了一段小程序,想测试一下使用prepareStatement到底比Statement快多少:(执行30万次insert)

conn = dataSource.getConnection();
conn.setAutoCommit(false);
pstmt = conn.prepareStatement("insert into test values(?,?)");
for(int i=0;i<300000;i++)
{
pstmt.setObject(1, new Integer(i+1));
pstmt.setObject(2,
"xxx"+i);
int rowCount = pstmt.executeUpdate();
if( rowCount !=1 ) throw new Exception(
"insert error:["+(i+1)+"].");
}
conn.commit();

以上代码,执行了110秒

我的运行环境是:
JDK 1.4.2
MYSQL 4.0
p4 1.7G 256M

之后,我改用Statement,做同样的事情:

conn = dataSource.getConnection();
conn.setAutoCommit(false);
stmt = conn.createStatement();
for(int i=0;i<300000;i++)
{
int rowCount = stmt.executeUpdate("insert into test values("+(i+1)+",'s"+(i+1)+"')");
if( rowCount !=1 ) throw new Exception(
"insert error:["+(i+1)+"].");
}
conn.commit();

以上代码,执行了125秒

请问,为什么使用Statement仅仅只慢了15秒?????????


谢谢

cats_tiger
2004-06-21 11:32

15秒不错了,insert再复杂一些可能效果会明显一些。
把setObject改成setInt和setString试试。
麻烦你再试试addBatch,看看多少秒