JDBC連線批量處理資料入庫
public class JdbcTemplate {
private static String DRIVER_CLASS_NAME = "*";
private static String URL = "*";
private static String USERNAME = "*";
private static String PASSWORD = "*";
/**
*
* <Description> 獲取資料庫連線<br>
*
* @return
* @throws Exception
* <br>
*/
public static Connection getConnection() throws Exception {
Class.forName(DRIVER_CLASS_NAME);
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
return connection;
}
/**
*
* <Description> 提交事務<br>
*
* @param connection
* <br>
*/
public static void commit(Connection connection) {
try {
connection.commit();
}
catch (SQLException e) {
e.printStackTrace();
}
}
/**
*
* <Description> 開啟事務<br>
*
* @param connection
* <br>
*/
public static void beginTx(Connection connection) {
try {
connection.setAutoCommit(false);
}
catch (SQLException e) {
e.printStackTrace();
}
}
/**
*
* <Description> 回滾<br>
*
* @param connection
* <br>
*/
public static void rollback(Connection connection) {
try {
connection.rollback();
}
catch (SQLException e) {
e.printStackTrace();
}
}
/**
*
* <Description> TODO<br>
*
* @param statement
* @param connection
* <br>
*/
public static void releaseDb(Statement statement, Connection connection) {
try {
if(statement != null){
statement.close();
}
if(connection != null){
connection.close();
}
}
catch (SQLException e) {
e.printStackTrace();
}
}
public static void insertData(List<String> sqlList) {
Connection connection = null;
Statement statement = null;
try {
connection = JdbcTemplate.getConnection();
JdbcTemplate.beginTx(connection);
statement = connection.createStatement();
for (String sql : sqlList) {
statement.addBatch(sql);
}
statement.executeBatch();
statement.clearBatch();
JdbcTemplate.commit(connection);
} catch (Exception ex) {
JdbcTemplate.rollback(connection);
ex.printStackTrace();
} finally {
JdbcTemplate.releaseDb(statement, connection);
}
}
}
呼叫(執行緒池處理):
public Boolean intoDB(List<List<InsertSqlEntity>> lists, String handle, String strTime) throws InterruptedException {
System.out.println("資料入庫執行緒任務執行開始");
// 開始時間
long start = System.currentTimeMillis();
// 執行緒數
int threadNum = 50;
// 建立一個執行緒池
ExecutorService exec = Executors.newFixedThreadPool(threadNum);
// 定義一個任務集合
List<Callable<Integer>> tasks = new ArrayList<Callable<Integer>>();
Callable<Integer> task = null;
List<Map<String, Object>> cutList = null;
// 確定每條執行緒的資料
for (List<InsertSqlEntity> list : lists) {
task = new Callable<Integer>() {
@Override
public Integer call() throws Exception {
try {
List<String> sqlList = new ArrayList<>();
for (InsertSqlEntity insertSqlEntity : list) {
String insertHeadSql = "";
if (handle.intern() == "update") {
try {
String[] keys = insertSqlEntity.getColumns().split(",");
String[] vals = insertSqlEntity.getValues().split(",");
insertHeadSql = "update " + insertSqlEntity.getTableName() + " set ";
for (int i = 2; i < keys.length - 1; i++) {
insertHeadSql += keys[i] + " = " + vals[i] + ",";
}
insertHeadSql = insertHeadSql.substring(0, insertHeadSql.length() - 1);
insertHeadSql += " where sb_id = " + vals[0] + " and type = " + vals[1] + " and READABLE_DATE = to_date('" + strTime + "','yyyy-mm-dd')";
} catch (Exception exception) {
exception.printStackTrace();
}
} else {
insertHeadSql = "insert into " + insertSqlEntity.getTableName() + "(" + insertSqlEntity.getColumns() + ") values(" + insertSqlEntity.getValues() + ")";
}
sqlList.add(insertHeadSql);
}
JdbcTemplate.insertData(sqlList);
sqlList.clear();
} catch (Exception exception) {
exception.printStackTrace();
}
return 1;
}
};
// 這裡提交的任務容器列表和返回的Future列表存在順序對應的關係
tasks.add(task);
}
List<Future<Integer>> results = exec.invokeAll(tasks);
// 關閉執行緒池
exec.shutdown();
System.out.println("資料入庫執行緒任務執行結束");
System.err.println("執行任務消耗了 :" + (System.currentTimeMillis() - start) + "毫秒");
return true;
}
實體類:
public class InsertSqlEntity {
private String tableName;
private String columns;
private String values;
private List<String> valueList;
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getColumns() {
return columns;
}
public void setColumns(String columns) {
this.columns = columns;
}
public String getValues() {
return values;
}
public void setValues(String values) {
this.values = values;
}
public List<String> getValueList() {
return valueList;
}
public void setValueList(List<String> valueList) {
this.valueList = valueList;
}
}
相關文章
- JDBC連線資料庫JDBC資料庫
- java jdbc連線資料庫JavaJDBC資料庫
- JDBC、JDBC框架、資料庫事務、資料庫連線池JDBC框架資料庫
- 【JavaWeb】JDBC連線MySQL資料庫JavaWebJDBCMySql資料庫
- JDBC之連線sqlserver資料庫JDBCSQLServer資料庫
- JDBC連線資料庫步驟JDBC資料庫
- JDBC連線資料庫經驗JDBC資料庫
- JDBC 連線資料庫的類JDBC資料庫
- JDBC連線各資料庫大全JDBC資料庫
- jdbc獲取資料庫連線JDBC資料庫
- java Jdbc連線oracle資料庫連線測試JavaJDBCOracle資料庫
- 資料庫連線異常處理思路資料庫
- JDBC資料庫連線池實現JDBC資料庫
- 常用資料庫JDBC連線寫法資料庫JDBC
- JDBC---jsp資料庫連線JDBCJS資料庫
- JDBC連線三種資料庫例子JDBC資料庫
- jdbc-odbc連線資料庫 (轉)JDBC資料庫
- 淺談JDBC和資料庫連線池JDBC資料庫
- JDBC連線各種資料庫的字串JDBC資料庫字串
- jdbc獲取各種資料庫連線JDBC資料庫
- 常用資料庫JDBC連線寫法 (轉)資料庫JDBC
- jdbc連線oracle rac資料庫的寫法JDBCOracle資料庫
- 資料庫連線分析(1)-從JDBC到MyBatis資料庫JDBCMyBatis
- JDBC【資料庫連線池、DbUtils框架、分頁】JDBC資料庫框架
- JDBC中連線資料庫的常用jar包JDBC資料庫JAR
- JDBC連線MySQL資料庫及演示樣例JDBCMySql資料庫
- [ 轉載]常用資料庫JDBC連線寫法資料庫JDBC
- JAVA資料庫處理(連線,資料查詢,結果集返回)Java資料庫
- 使用 SSL 加密的 JDBC 連線 SAP HANA 資料庫加密JDBC資料庫
- JDBC連線MySQL資料庫的方法和例項JDBCMySql資料庫
- JDBC連線各種資料庫的方法(經典)JDBC資料庫
- java連線資料庫時jdbc設定編碼Java資料庫JDBC
- java開發中JDBC連線資料庫程式碼JavaJDBC資料庫
- 【轉載】JDBC連線各種資料庫的字串JDBC資料庫字串
- jdbc獲取對各種資料庫的連線JDBC資料庫
- Java 的JDBC 資料庫連線池實現方法JavaJDBC資料庫
- JDBC連線資料庫時,Oracle9i的連線引數配置JDBC資料庫Oracle
- 海量資料處理_批量插入