問題:jdbc 批量插入數據是出現死等,沒法繼續插入數據 ,也不報錯 ,也不拋異常sql
使用 : session
execute 執行批量處理
public void save(Map<String, Object> fieldsMap, String tableName, DBConnectionObject connectObj) throws AppSQLException { Map<String, Object> SaveMap = insertFieldAndCondition(fieldsMap); String fields = SaveMap.get(DBConstants.DB_FIELDS).toString(); String fieldsLog = SaveMap.get(DBConstants.DB_FIELDS_LOG).toString(); String mapValues = SaveMap.get(DBConstants.DB_MAPVALUES).toString(); Object[] params = (Object[]) SaveMap.get(DBConstants.DB_PARAMS); StringBuilder INSERT_SQL = new StringBuilder(); INSERT_SQL.append(" INSERT INTO ").append(tableName).append("(").append(fields).append(") VALUES (").append(mapValues).append(")"); try { long startTime = DateUtils.getTimeStamp(); if (connectObj == null) { execute(INSERT_SQL.toString(), params); } else { execute(INSERT_SQL.toString(), params, connectObj); } long endTime = DateUtils.getTimeStamp(); log.info("【 果SQL】" + INSERT_SQL + "【字段】" + fieldsLog + "【花費時間】" + (endTime - startTime)); } catch (AppSQLException e) { e.printStackTrace(); } }
處理:app
executeBatch 使用執行批量處理
PreparedStatement ps = null; try { String sql = "INSERT INTO "+ TABLE_NAME +" (" + FIELDS + ") VALUES ( ?,?,?,?,?,?,?,?,? ) " ; Connection connection = connectObj.getCon(); ps = connection.prepareStatement(sql); for(Map<String, Object> Data : DataList) { ps.setString(1,DataTran.ObjectToString(Data, "StatId")); ps.setString(9, DataTran.ObjectToString(Data, "AddTime") ); ps.addBatch(); } long StartTime = DateUtils.getTimeStamp(); ps.executeBatch(); long EndTime = DateUtils.getTimeStamp(); log.info("【 查詢,所花時間】" + (EndTime - StartTime)); } catch (SQLException e) { sessionRollback(connectObj); e.printStackTrace(); throw new AppSQLException(info); } finally { if(ps != null ){ try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } } }