jdbc PreparedStatement executeBatch方法执行效率低的问题

我知道PreparedStatement可以一次执行多条sql语句。通过addBatch方法添加sql,最后执行。我的代码如下(就是一个循环,每次添加一条sql,最后执行... 我知道PreparedStatement可以一次执行多条sql语句。通过addBatch方法添加sql,最后执行。
我的代码如下(就是一个循环,每次添加一条sql,最后执行。但是不知为什么,很耗时):

public void writeToDB(ArrayList<Item> wordList)
{
int i = 0,
size = 0;
Item item = null;
Connection conn = null;
PreparedStatement pStmt = null;
String sql = "insert into t_item(word,trans,phonetic,difficulty) values(?,?,?,?)";

size = wordList.size();
conn = DB.getConn();
pStmt = DB.getpStmt(conn, sql);

for(i=0;i<size;i++)
{
item = (Item) wordList.get(i);
try {
pStmt.setString(1, item.getWord());
pStmt.setString(2, item.getTrans());
pStmt.setString(3, item.getPhonetic());
pStmt.setInt(4, item.getDifficulty());
pStmt.addBatch();
} catch (SQLException e) {
e.printStackTrace();
continue;
}
}

try {
pStmt.executeBatch();
} catch (SQLException e) {
e.printStackTrace();
}

}
wordList里一共有800多个条目
我用ystem.currentTimeMillis()方法测得 for循环体执行时间大概是25毫秒,但是pStmt.executeBatch()这一条语句要22841毫秒!!!应该一共只有800多个sql语句啊。。。不知道为什么会用这么长时间。。。

个位大侠,有什么解决方案吗?是我的代码有问题,还是现实就是这么残酷?。。。
除了写存储过程,还有其他办法吗?

学习中,多谢!
展开
 我来答
angle01007
2011-06-19 · TA获得超过753个赞
知道小有建树答主
回答量:174
采纳率:0%
帮助的人:189万
展开全部
按说效率不会低到这种地步,你执行的是insert语句 我很想知道 你目前的代码有没有开启手动提交事务,如果你是自动提交事务那么可能会导致这800多条会执行一条 提交一次事务,导致时间全部浪费在这里了,你可以尝试一下手动提交事务,等executebatch执行了 然后提交事务。
conn.setAutoCommit = false;
//...............
代码
conn.commit();
就是上面
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式