JAVA SE使用DBUtils批次新增資料

DBUtils批次新增資料範例

前言

DBUtils亦可使用batch累積欲寫入資料,再一次性的寫入DB內,以節省連線資源,不過若要使用batch方法,得先將參數封裝成二維陣列物件,之後再一次性進行傳入,所以在寫入資料前得進行一些處理動作。

實作

Java程式碼

DBUtilsInsertDataByBatchDemo.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package cc.artyang;

import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import cc.artyang.conf.DataSourceConf;

/**
 * DBUtils 批次新增資料範例
 *
 * @author Art Yang
 *
 */
public class DBUtilsInsertDataByBatchDemo {

	/**
	 * 主程式方法
	 *
	 * @param args 外部參數
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	public static void main(String[] args) throws SQLException, ClassNotFoundException {
		String sqlStmt = "insert into blog(blogName, author, remark, createdTime) values( ?, ?, ?, now())";
		Object[][] dataList = getDataSet();

		QueryRunner queryRunner = new QueryRunner(DataSourceConf.getDataSource());
		int[] insertResult = queryRunner.batch(sqlStmt, dataList);

		for (int i = 0; i < insertResult.length; i++) {
			System.out.printf(insertResult[i] > 0 ? "第 %d 筆資料新增成功%n" : "第 %d 筆資料新增失敗%n", i + 1);
		}
	}

	/**
	 * 欲新增資料之資料集
	 *
	 * @return 回傳育新增資料之資料集
	 */
	private static Object[][] getDataSet() {
		Object[][] dataSet = new Object[10][];

		for (int i = 0; i < dataSet.length; i++) {
			dataSet[i] = new Object[] { "楊藝的洋溢生活_" + i, "ArtYang_" + i, "生活記事、系統管理、程式設計、資料庫_" + i };
		}

		return dataSet;
	}
}

執行結果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
第 1 筆資料新增成功
第 2 筆資料新增成功
第 3 筆資料新增成功
第 4 筆資料新增成功
第 5 筆資料新增成功
第 6 筆資料新增成功
第 7 筆資料新增成功
第 8 筆資料新增成功
第 9 筆資料新增成功
第 10 筆資料新增成功