原来PreparedStatement也可以做批处理,提高数据库插入或更新速度

0 views
Skip to first unread message

goes...@gmail.com

unread,
May 4, 2009, 5:22:08 AM5/4/09
to goeswind
下面是我写的测试代码:
public class TestDbBatch extends TestCase {
// 批处理提交数量
public static final int BATCH_COMMIT_COUNT = 2;

public void test11() {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = getConnection();
conn.setAutoCommit(false);
String sql = "insert into AM_ANNUAL_REVIEW
(SERVICEID,DWBH,GRBH,NAME) values(?,?,?,?)";
pstmt = conn.prepareStatement(sql);
List<String> lst = getData();
int i = 0;
for (String s : lst) {
// 开始设置参数
pstmt.setString(1, s.split(",")[0]);
pstmt.setString(2, s.split(",")[1]);
pstmt.setString(3, s.split(",")[2]);
pstmt.setString(4, s.split(",")[3]);
// 增加批处理
pstmt.addBatch();
// 计数器加1
i++;
// 当达到批处理提交数量时,执行一次执行批处理
if (i % BATCH_COMMIT_COUNT == 0) {
pstmt.executeBatch();
}
}
// 最后执行一次批处理
pstmt.executeBatch();
// 最终,提交事务
conn.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
// TODO 关闭数据库资源
}
}

public List<String> getData() {
List<String> lst = new ArrayList<String>();
Map m1 = new HashMap();
lst.add("1,1,1,1");
lst.add("2,2,2,2");
lst.add("3,3,3,3");
lst.add("4,4,4,4");
lst.add("5,5,5,5");
lst.add("6,6,6,6");
return lst;
}

public Connection getConnection() throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "esb";
String pwd = "esb";
return java.sql.DriverManager.getConnection(url, user, pwd);
}
}
Reply all
Reply to author
Forward
0 new messages