Statement Batch
Statement的execute等方法一次只能执行一条SQL语句,如果有多条SQL语句要执行的话,可以使用executeBatch()方法,在一次方法呼叫中执行多条SQL语句.来提高执行效率!先使用addBatch()方法将要执行的SQL语句加入,然后执行executeBatch()即可:
Statement stmt=conn.createStatement();
stmt.addBatch("INSERT INTO message VALUES(' Michael Chen'," +
"'blog.youkuaiyun.com/ybugchen','留言',"+
"'2005-2-4','欢迎')");
stmt.addBatch("INSERT INTO message VALUES(' Jim'," +
"'blog.youkuaiyun.com/ybugchen','留言',"+
"'2005-2-4','欢迎')");
stmt.addBatch("INSERT INTO message VALUES(' Susan'," +
"'blog.youkuaiyun.com/ybugchen','留言',"+
"'2005-2-4','欢迎')");
stmt.executeBatch();
在Connection的自动[认可](commit)为true的情况下,执行executeBatch()时,每执行一行SQL都立即更新数据库,如果中间有某行SQL有错误,则错误之前的SQL语句对数据库的更新已经生效,而错误之后的语句不会执行,如果要确保所有的Batch SQL语句都能执行,可以将Connection 的[许可]设置为false,在executeBatch()方法成功之后,在执行commit()方法确认对数据库的更新操作.
conn.setAutoCommit(false);
Statement stmt=conn.createStatement();
stmt.addBatch("INSERT INTO message VALUES(' Michael Chen'," +
"'blog.youkuaiyun.com/ybugchen','留言',"+
"'2005-2-4','欢迎')");
stmt.addBatch("INSERT INTO message VALUES(' Jim'," +
"'blog.youkuaiyun.com/ybugchen','留言',"+
"'2005-2-4','欢迎')");
stmt.addBatch("INSERT INTO message VALUES(' Susan'," +
"'blog.youkuaiyun.com/ybugchen','留言',"+
"'2005-2-4','欢迎')");
stmt.executeBatch();
conn.commit();
在执行executeBatch()时如果SQL发生错误,会抛出BatchUpdateException异常,可以由这个异常组件的getUpdateCounts()方法取得正确的SQL条数
try
{
conn.addBatch(...)
....
stmt.executeBatch();
}
catch(BatchUpdateException e)
{
System.out.println("成功执行SQL语句条数="+e.getUpdateCounts());
}
Statement的execute等方法一次只能执行一条SQL语句,如果有多条SQL语句要执行的话,可以使用executeBatch()方法,在一次方法呼叫中执行多条SQL语句.来提高执行效率!先使用addBatch()方法将要执行的SQL语句加入,然后执行executeBatch()即可:
Statement stmt=conn.createStatement();
stmt.addBatch("INSERT INTO message VALUES(' Michael Chen'," +
"'blog.youkuaiyun.com/ybugchen','留言',"+
"'2005-2-4','欢迎')");
stmt.addBatch("INSERT INTO message VALUES(' Jim'," +
"'blog.youkuaiyun.com/ybugchen','留言',"+
"'2005-2-4','欢迎')");
stmt.addBatch("INSERT INTO message VALUES(' Susan'," +
"'blog.youkuaiyun.com/ybugchen','留言',"+
"'2005-2-4','欢迎')");
stmt.executeBatch();
在Connection的自动[认可](commit)为true的情况下,执行executeBatch()时,每执行一行SQL都立即更新数据库,如果中间有某行SQL有错误,则错误之前的SQL语句对数据库的更新已经生效,而错误之后的语句不会执行,如果要确保所有的Batch SQL语句都能执行,可以将Connection 的[许可]设置为false,在executeBatch()方法成功之后,在执行commit()方法确认对数据库的更新操作.
conn.setAutoCommit(false);
Statement stmt=conn.createStatement();
stmt.addBatch("INSERT INTO message VALUES(' Michael Chen'," +
"'blog.youkuaiyun.com/ybugchen','留言',"+
"'2005-2-4','欢迎')");
stmt.addBatch("INSERT INTO message VALUES(' Jim'," +
"'blog.youkuaiyun.com/ybugchen','留言',"+
"'2005-2-4','欢迎')");
stmt.addBatch("INSERT INTO message VALUES(' Susan'," +
"'blog.youkuaiyun.com/ybugchen','留言',"+
"'2005-2-4','欢迎')");
stmt.executeBatch();
conn.commit();
在执行executeBatch()时如果SQL发生错误,会抛出BatchUpdateException异常,可以由这个异常组件的getUpdateCounts()方法取得正确的SQL条数
try
{
conn.addBatch(...)
....
stmt.executeBatch();
}
catch(BatchUpdateException e)
{
System.out.println("成功执行SQL语句条数="+e.getUpdateCounts());
}