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

04-06-20 testu
我写了一段小程序,想测试一下使用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();
<p>

以上代码,执行了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();
<p>

以上代码,执行了125秒

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

谢谢

cats_tiger
2004-06-21 11:32
15秒不错了,insert再复杂一些可能效果会明显一些。

把setObject改成setInt和setString试试。

麻烦你再试试addBatch,看看多少秒

猜你喜欢