Do you have dynamic parts in your insert? First start transaction and only then use batch.
Maybe hsqldb doesn't support PreparedStatements in real? Add this parameter in your db url "cachePrepStmts=true" (for example, jdbc:mysql://localhost:3306/test?allowMultiQueries=true&cachePrepStmts=true). Maybe this can help Best, Aram ________________________________ Aram Mkhitaryan Developer Lycos Armenia CJSC 9 Alex Manukyan str, Yerevan 375070, Armenia Tel: +374 10 512411 Mobile: +374 91 518456 E-mail: [EMAIL PROTECTED] Web: www.lycos-europe.com -----Original Message----- From: Kenji Nakamura [mailto:[EMAIL PROTECTED] Sent: Wednesday, August 02, 2006 8:52 PM To: user-java@ibatis.apache.org Subject: Is PreparedStatement reused on insert? Hi, I'm evaluating iBatis 2.1.7, and encountered a performance problem. The benchmark is simply taking a sequential file with approximately 16,000 lines, and populate them into HSQLDB (1.8.0.1) with 20 lines of batch. I see iBatis version is two to three times slower than plain vanilla JDBC version. I put a profiler, and it indicates com.ibatis.sqlmap.engine.execution.SqlExecutor#excuteUpdate() creates an instance of PreparedStatement every time calling SqlMapClient#insert(), and it is actually created at line 77 of the method. Is there a way to keep an instance of PreparedStatement for an Id and reuse it? At least creation of PreparedStatement isn't a cheap operation in HSQLDB, which takes up 51% of whole execution time in my benchmark. Thanks in advance, Kenji