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資料庫
- JDBC之連線sqlserver資料庫JDBCSQLServer資料庫
- 資料庫連線異常處理思路資料庫
- 淺談JDBC和資料庫連線池JDBC資料庫
- JDBC連結資料庫JDBC資料庫
- openGauss資料庫JDBC環境連線配置(Eclipse)資料庫JDBCEclipse
- jdbc連線oracle rac資料庫的寫法JDBCOracle資料庫
- 資料庫連線分析(1)-從JDBC到MyBatis資料庫JDBCMyBatis
- JDBC中連線資料庫的常用jar包JDBC資料庫JAR
- java 資料庫程式設計(一)JDBC連線Sql Server資料庫Java資料庫程式設計JDBCSQLServer
- JDBC連線資料庫實現增刪改查JDBC資料庫
- 使用 SSL 加密的 JDBC 連線 SAP HANA 資料庫加密JDBC資料庫
- JDBC連線MySQL資料庫的方法和例項JDBCMySql資料庫
- python中多程式處理資料庫連線的問題Python資料庫
- MySQL下載安裝配置及JDBC連線資料庫MySqlJDBC資料庫
- Java的JDBC通過SSH Tunnel連線MySQL資料庫JavaJDBCMySql資料庫
- 使用ABAP(ADBC)和Java(JDBC)連線SAP HANA資料庫JavaJDBC資料庫
- 使用csv批量匯入、匯出資料的需求處理
- JDBC第一篇【介紹JDBC、使用JDBC連線資料庫、簡單的工具類】JDBC資料庫
- 【Mybatis原始碼解析】- JDBC連線資料庫的原理和操作MyBatis原始碼JDBC資料庫
- 【JDBC】java連線池模擬測試連線Oracle資料庫指令碼參考JDBCJavaOracle資料庫指令碼
- 分散式 | 資料庫連線如何正確處理 TCP 連線三次握手失敗分散式資料庫TCP
- JDBC 處理CLob和Blob型別資料JDBC型別
- Python 資料處理庫 pandas 入門教程Python
- JDBC連線資料庫實現增刪改查前端互動JDBC資料庫前端
- [轉載] 1.1Java使用JDBC原生方式連線MySql資料庫JavaJDBCMySql資料庫
- MySQL:JDBC批量插入資料的效率MySqlJDBC
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- 帶你進入資料庫連線池資料庫
- WebForm登入頁面(連線資料庫)WebORM資料庫
- 連線資料庫資料庫
- 資料庫本地,sqlplus和資料庫工具連線資料庫正常,但是JDBC連線資料庫出現了一直提示使用者名稱/密碼錯誤資料庫SQLJDBC密碼
- 連線資料庫失敗提示hba.conf不符合的處理方法資料庫
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- 連線資料庫-mysql資料庫MySql
- jmeter連線資料庫JMeter資料庫
- Mybatis連線資料庫MyBatis資料庫
- Android 連線資料庫Android資料庫