環境資訊中心綜合外電;姜唯 編譯;林大利 審校
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線
※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益
※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象
※南投搬家前需注意的眉眉角角,別等搬了再說!
※新北清潔公司,居家、辦公、裝潢細清專業服務
摘錄自2019年12月3日中央通訊社報導
聯合國世界氣象組織(WMO)今天(3日)發表年度評估報告指出,氣候變遷已超出人類適應能力,今年(2019年)以來全球氣溫較工業革命前均溫高出攝氏1.1度,即將成為史上最熱10年。
世界氣象組織說,2019年可能成為歷來最熱的前3年。燃燒化石燃料、建造基礎設施、種植作物及運送產品等造成的人為排放,將讓今年打破大氣中二氧化碳濃度紀錄,地球勢必會進一步升溫。
海洋負責吸收溫室氣體新增的9成熱量,讓全球海水溫度也達歷史新高,如今海水也比150年前酸25%,威脅數以十億計民眾賴以維生的重要海洋生態系統。在格陵蘭過去12個月融冰3290億公噸助長下,全球平均海平面高度於去年10月達到歷來新高。
隨著過去40年的每10年都比前10年還熱,氣候變遷不只是未來世代要面臨的問題,因為人類無節制的慾望與不計代價的消費,已讓數以百萬計民眾身受其害。報告中說,今年上半年有超過1000萬人在自己國家內流離失所,其中700萬人直接受到諸如風暴、洪水及乾旱等極端氣候影響。世界氣象組織說,因極端氣候新增的無家可歸人口,到今年底可能增至2200萬人。
世界氣象組織秘書長塔拉斯(Petteri Taalas)表示:「2019年再度發生天氣及氣候相關風險重創事件。百年一遇的熱浪及水災變得愈來愈常發生。」
在只比工業革命前均溫高出攝氏1.1度的今年,歐洲、澳洲與日本已相繼出現致命熱浪,還有超級風暴重創非洲東南部,加州和澳洲也有失控野火肆虐。
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"
※網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線
※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整
※南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!
※教你寫出一流的銷售文案?
目錄
MyBatis是一個持久層框架,使用簡單,學習成本較低。可以執行自己手寫的SQL語句,比較靈活。但是MyBatis的自動化程度不高,移植性也不高,有時從一個數據庫遷移到另外一個數據庫的時候需要自己修改配置。
一個Mybatis最簡單的使用列子如下:
public class UserDaoTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() throws Exception{
ClassPathResource resource = new ClassPathResource("mybatis-config.xml");
InputStream inputStream = resource.getInputStream();
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void selectUserTest(){
String id = "{0003CCCA-AEA9-4A1E-A3CC-06D884BA3906}";
SqlSession sqlSession = sqlSessionFactory.openSession();
CbondissuerMapper cbondissuerMapper = sqlSession.getMapper(CbondissuerMapper.class);
Cbondissuer cbondissuer = cbondissuerMapper.selectByPrimaryKey(id);
System.out.println(cbondissuer);
sqlSession.close();
}
}
本博客只涉及創建SessionFactory,以及從SessionFactory獲取SqlSession的流程。具體執行Sql的流程會在其他博客中分析。
ClassPathResource resource = new ClassPathResource("mybatis-config.xml");
InputStream inputStream = resource.getInputStream();
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
通過上面代碼發現,創建SqlSessionFactory的代碼在SqlSessionFactoryBuilder中,進去一探究竟:
//整個過程就是將配置文件解析成Configration對象,然後創建SqlSessionFactory的過程
//Configuration是SqlSessionFactory的一個內部屬性
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
try {
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
return build(parser.parse());
} catch (Exception e) {
throw ExceptionFactory.wrapException("Error building SqlSession.", e);
} finally {
ErrorContext.instance().reset();
try {
inputStream.close();
} catch (IOException e) {
// Intentionally ignore. Prefer previous error.
}
}
}
public SqlSessionFactory build(Configuration config) {
return new DefaultSqlSessionFactory(config);
}
下面我們看下解析配置文件過程中的一些細節。
先給出一個配置文件的列子:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--SqlSessionFactoryBuilder中配置的配置文件的優先級最高;config.properties配置文件的優先級次之;properties標籤中的配置優先級最低 -->
<properties resource="org/mybatis/example/config.properties">
<property name="username" value="dev_user"/>
<property name="password" value="F2Fa3!33TYyg"/>
</properties>
<!--一些重要的全局配置-->
<settings>
<setting name="cacheEnabled" value="true"/>
<!--<setting name="lazyLoadingEnabled" value="true"/>-->
<!--<setting name="multipleResultSetsEnabled" value="true"/>-->
<!--<setting name="useColumnLabel" value="true"/>-->
<!--<setting name="useGeneratedKeys" value="false"/>-->
<!--<setting name="autoMappingBehavior" value="PARTIAL"/>-->
<!--<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>-->
<!--<setting name="defaultExecutorType" value="SIMPLE"/>-->
<!--<setting name="defaultStatementTimeout" value="25"/>-->
<!--<setting name="defaultFetchSize" value="100"/>-->
<!--<setting name="safeRowBoundsEnabled" value="false"/>-->
<!--<setting name="mapUnderscoreToCamelCase" value="false"/>-->
<!--<setting name="localCacheScope" value="STATEMENT"/>-->
<!--<setting name="jdbcTypeForNull" value="OTHER"/>-->
<!--<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>-->
<!--<setting name="logImpl" value="STDOUT_LOGGING" />-->
</settings>
<typeAliases>
</typeAliases>
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!--默認值為 false,當該參數設置為 true 時,如果 pageSize=0 或者 RowBounds.limit = 0 就會查詢出全部的結果-->
<!--如果某些查詢數據量非常大,不應該允許查出所有數據-->
<property name="pageSizeZero" value="true"/>
</plugin>
</plugins>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://10.59.97.10:3308/windty"/>
<property name="username" value="windty_opr"/>
<property name="password" value="windty!234"/>
</dataSource>
</environment>
</environments>
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql" />
<property name="Oracle" value="oracle" />
</databaseIdProvider>
<mappers>
<!--這邊可以使用package和resource兩種方式加載mapper-->
<!--<package name="包名"/>-->
<!--<mapper resource="./mappers/SysUserMapper.xml"/>-->
<mapper resource="./mappers/CbondissuerMapper.xml"/>
</mappers>
</configuration>
下面是解析配置文件的核心方法:
private void parseConfiguration(XNode root) {
try {
//issue #117 read properties first
//解析properties標籤,並set到Configration對象中
//在properties配置屬性后,在Mybatis的配置文件中就可以使用${key}的形式使用了。
propertiesElement(root.evalNode("properties"));
//解析setting標籤的配置
Properties settings = settingsAsProperties(root.evalNode("settings"));
//添加vfs的自定義實現,這個功能不怎麼用
loadCustomVfs(settings);
//配置類的別名,配置后就可以用別名來替代全限定名
//mybatis默認設置了很多別名,參考附錄部分
typeAliasesElement(root.evalNode("typeAliases"));
//解析攔截器和攔截器的屬性,set到Configration的interceptorChain中
//MyBatis 允許你在已映射語句執行過程中的某一點進行攔截調用。默認情況下,MyBatis 允許使用插件來攔截的方法調用包括:
//Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
//ParameterHandler (getParameterObject, setParameters)
//ResultSetHandler (handleResultSets, handleOutputParameters)
//StatementHandler (prepare, parameterize, batch, update, query)
pluginElement(root.evalNode("plugins"));
//Mybatis創建對象是會使用objectFactory來創建對象,一般情況下不會自己配置這個objectFactory,使用系統默認的objectFactory就好了
objectFactoryElement(root.evalNode("objectFactory"));
objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
reflectorFactoryElement(root.evalNode("reflectorFactory"));
//設置在setting標籤中配置的配置
settingsElement(settings);
//解析環境信息,包括事物管理器和數據源,SqlSessionFactoryBuilder在解析時需要指定環境id,如果不指定的話,會選擇默認的環境;
//最後將這些信息set到Configration的Environment屬性裏面
environmentsElement(root.evalNode("environments"));
//
databaseIdProviderElement(root.evalNode("databaseIdProvider"));
//無論是 MyBatis 在預處理語句(PreparedStatement)中設置一個參數時,還是從結果集中取出一個值時, 都會用類型處理器將獲取的值以合適的方式轉換成 Java 類型。解析typeHandler。
typeHandlerElement(root.evalNode("typeHandlers"));
//解析Mapper
mapperElement(root.evalNode("mappers"));
} catch (Exception e) {
throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
}
}
上面解析流程結束後會生成一個Configration對象,包含所有配置信息,然後會創建一個SqlSessionFactory對象,這個對象包含了Configration對象。
下面是openSession的過程:
private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {
Transaction tx = null;
try {
final Environment environment = configuration.getEnvironment();
final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);
tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
//獲取執行器,這邊獲得的執行器已經代理攔截器的功能(見下面代碼)
final Executor executor = configuration.newExecutor(tx, execType);
//根據獲取的執行器創建SqlSession
return new DefaultSqlSession(configuration, executor, autoCommit);
} catch (Exception e) {
closeTransaction(tx); // may have fetched a connection so lets call close()
throw ExceptionFactory.wrapException("Error opening session. Cause: " + e, e);
} finally {
ErrorContext.instance().reset();
}
}
//interceptorChain生成代理類,具體參見Plugin這個類的方法
public Executor newExecutor(Transaction transaction, ExecutorType executorType) {
executorType = executorType == null ? defaultExecutorType : executorType;
executorType = executorType == null ? ExecutorType.SIMPLE : executorType;
Executor executor;
if (ExecutorType.BATCH == executorType) {
executor = new BatchExecutor(this, transaction);
} else if (ExecutorType.REUSE == executorType) {
executor = new ReuseExecutor(this, transaction);
} else {
executor = new SimpleExecutor(this, transaction);
}
if (cacheEnabled) {
executor = new CachingExecutor(executor);
}
executor = (Executor) interceptorChain.pluginAll(executor);
return executor;
}
到此為止,我們已經獲得了SqlSession,拿到SqlSession就可以執行各種CRUD方法了。
對於MyBatis啟動的流程(獲取SqlSession的過程)這邊簡單總結下:
SQL的具體執行流程見後續博客。
一些重要類總結:
//TypeAliasRegistry
registerAlias("string", String.class);
registerAlias("byte", Byte.class);
registerAlias("long", Long.class);
registerAlias("short", Short.class);
registerAlias("int", Integer.class);
registerAlias("integer", Integer.class);
registerAlias("double", Double.class);
registerAlias("float", Float.class);
registerAlias("boolean", Boolean.class);
registerAlias("byte[]", Byte[].class);
registerAlias("long[]", Long[].class);
registerAlias("short[]", Short[].class);
registerAlias("int[]", Integer[].class);
registerAlias("integer[]", Integer[].class);
registerAlias("double[]", Double[].class);
registerAlias("float[]", Float[].class);
registerAlias("boolean[]", Boolean[].class);
registerAlias("_byte", byte.class);
registerAlias("_long", long.class);
registerAlias("_short", short.class);
registerAlias("_int", int.class);
registerAlias("_integer", int.class);
registerAlias("_double", double.class);
registerAlias("_float", float.class);
registerAlias("_boolean", boolean.class);
registerAlias("_byte[]", byte[].class);
registerAlias("_long[]", long[].class);
registerAlias("_short[]", short[].class);
registerAlias("_int[]", int[].class);
registerAlias("_integer[]", int[].class);
registerAlias("_double[]", double[].class);
registerAlias("_float[]", float[].class);
registerAlias("_boolean[]", boolean[].class);
registerAlias("date", Date.class);
registerAlias("decimal", BigDecimal.class);
registerAlias("bigdecimal", BigDecimal.class);
registerAlias("biginteger", BigInteger.class);
registerAlias("object", Object.class);
registerAlias("date[]", Date[].class);
registerAlias("decimal[]", BigDecimal[].class);
registerAlias("bigdecimal[]", BigDecimal[].class);
registerAlias("biginteger[]", BigInteger[].class);
registerAlias("object[]", Object[].class);
registerAlias("map", Map.class);
registerAlias("hashmap", HashMap.class);
registerAlias("list", List.class);
registerAlias("arraylist", ArrayList.class);
registerAlias("collection", Collection.class);
registerAlias("iterator", Iterator.class);
registerAlias("ResultSet", ResultSet.class);
https://blog.csdn.net/luanlouis/article/details/40422941
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"
※網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線
※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整
※南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!
※教你寫出一流的銷售文案?
數據庫有三級模型的概念,在這裏,數據倉庫也是有着三級模型並且是有着相似的思路。
1.概念模型
“信息世界”中的信息結構,也常常借用關係數據庫設計中的E-R方法,不過在數據倉庫的設計是以主題替代實體。
根據業務的範圍和使用來劃分主題
劃分的方法是首先要確定系統邊界,包括了解決策者需求(關注點),需求類型。通過對業務系統的詳細說明,確定數據覆蓋範圍,對數據進行梳理,列出數據主題詳細的清單,了解源數據狀況。
對每個數據主題都作出詳細的解釋,然後經過歸納、分類,整理成各個數據主題域,確定系統包含的主題。列出每個數據主題域包含哪些部分,並對每個數據主題域作出詳細的解釋,最後劃分成主題域概念模型。
2.邏輯模型
邏輯模型的設計是數據倉庫實施中最重要的一步,因為它直接反映了數據分析部門的實際需求和業務規則,同時對物理模型的設計和實現具有指導作用。它的特點就是通過實體和實體之間的關係勾勒出整個企業的數據藍圖和規劃。邏輯模型一般遵循第三範式,與概念模型不同,它主要關注細節性的業務規則,同時需要解決每個主題包含哪些概念範疇和跨主題域的繼承和共享的問題。
根據需求列出需要分析的主題,需求目標緯度指標,緯度層次分析的指標,分析的方法、數據來源等
對於一些緯度存在層次問題,比如說產品存在產品的類別,產品的子類別以及具體的產品
在邏輯模型設計中需要考慮粒度層次的劃分。數據倉庫的粒度層次劃分直接影響了數據倉庫模型的設計,通常細粒度的數據模型直接從企業模型選取實體作為邏輯模型的實體,而粗粒度的數據模型需要經過匯總計算得到相應的實體。粒度決定企業數據倉庫的實現方式、性能、靈活性和數據倉庫的數據量。
粒度指的是描述數據的綜合程度。粒度規定了數據倉庫潛在的能力和靈活性,如果沒有粒度級別的變化,數據倉庫將不能回答需要低於所採用細節級的問題。同時,粒度級別是數據庫規模的主要決定因素之一,對操作的開銷及性能都有顯著影響。
數據粒度越小,信息越細,數據量越大;顆粒粒度越大就忽略了眾多的細節,數據量越小。
3.物理模型
將邏輯模型轉變為物理模型包括以下幾個步驟:
(1)實體名(Entity) 轉變為表名(Table)。
(2)屬性名(Attribute) 轉換為列名(Column) ,確定列的屬性(Property) 。
(3)確定表之間連接主鍵和外鍵屬性或屬性組。
在物理模型設計中同時要考慮數據的存儲結構、存取時間、存儲空間利用率、維護代價等。根據數據的重要程度、使用頻率和響應時間將數據分類,不同類數據分別存放在不同存儲設備中,重要性高、經常存取並對反應時間要求高的數據存放在高速存儲設備上:存取頻率低或對存取響應時間要求低的數據可以存放在低速存儲設備上。根據數據量設定存儲塊、緩衝區大小和個數。
兩大類物理模型
數據倉庫的的數據模型相對數據庫更簡單一些,根據事實表和維度表的關係,主要有星形結構模型和雪花型結構模型兩種。
當所有維表都直接連接到“事實表”上時,整個圖解就像星星一樣,故將該模型稱為星型模型。
星型架構是一種非規範化的結構,多維數據集的每一個維度都直接與事實表相連接,所以數據有一定的冗餘,如在商店維度表中,存在省A的城市B以及省A的城市C兩條記錄,那麼省A的信息分別存儲了兩次,即存在冗餘。
雪花型架構相對於星形架構的優點是,能夠直接利用現有的數據庫建模工具進行建模,提高工作效率;以後對維度表的變更會更加靈活,而星形結構會牽涉到大量的數據更新:由於不存在數據冗餘,因此數據的裝載速度會更快。雪花型架構通過去除了數據冗餘,通過最大限度地減少數據存儲量以及聯合較小的維表來改善查詢性能。
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線
※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益
※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象
※南投搬家前需注意的眉眉角角,別等搬了再說!
※新北清潔公司,居家、辦公、裝潢細清專業服務
摘錄自2019年12月7日公共電視報導
馬拉威國家公園520隻大象,最近剛遷到新的野生動物保護區,希望能促進繁衍,但沒想到經常與大象共生的采采蠅,數量也大為增加,由於采采蠅會傳染寄生蟲,釀成致命的非洲昏睡病,附近民眾非常擔憂。
采采蠅不論公母都會吸血,被牠叮咬的話,就可能感染非洲錐蟲症,症狀跟瘧疾非常類似,很容易被誤診,釀成致命危險。「非洲錐蟲症」又稱為非洲昏睡病,主要出現在非洲撒哈拉以南的36個國家,初期症狀是發燒、頭痛,如果侵入腦部引起腦膜炎,可能導致神智不清,癲癇、昏睡不醒而死。非洲昏睡病在1890年代曾經造成數十萬人死亡,重創區域畜牧業跟農業,世界衛生組織直到2008年才控制住這種疾病。
動保NGO團體African Parks經營經理羅伯特說,「這有點諷刺,因為這是成功(大象遷移)的負面效應,動物數量增加所造成的後果之一,就是采采蠅的數量也增加了。」
為了防止非洲昏睡病擴散,動保團體跟馬拉威政府合作,在大象保護區內設置了600個陷阱與標靶,用采采蠅喜歡的藍色布料誘捕消滅牠們。此外也將增加醫療專業人手,並加強訓練,提高早期確診率,減少死亡病例。
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"
※網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線
※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整
※南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!
※教你寫出一流的銷售文案?
摘錄自2019年11月28日聯合新聞網報導
美國德州西北部傑佛遜郡(Jefferson County)內奇斯港(Port Neches)一間石油化學工廠在當地時間27日凌晨突然爆炸,現場烈焰沖天並且在約12小時後發生第二度爆炸,當局已下令附近六萬居民強制疏散。
出事的石油化學工廠屬於TPC集團(TPC Group),主要生產用來製造合成橡膠的易燃氣體丁二烯(Butadiene),以及丁烷(Butane)等化學品,距離休士頓約85英里(136公里)。
第一起爆炸發生在27日凌晨約1點,威力之大,連48公里外住宅都能感受到震動,不少居民形容,「自己被巨大爆炸聲驚醒」、「身上滿是玻璃碎片」、「我聽到並感覺到我的房子在搖晃」。當時共有約30名員工在現場,共造成三人受傷,分別是兩名雇員、一名承包商,在治療後已出院。
在第一起爆炸後約12個小時,燃燒中的化學工廠再度爆炸。
德州傑佛遜郡法官布蘭尼克(Jeff Branick)下令,TPC工廠半徑4英里範圍(約6.4公里)內的民眾全數強制疏散,大約六萬人。布蘭尼克表示,現場滅火相關單位目前無法估計現場化學殘存量以及火勢燃燒速度。《CNN》報導,TPC集團衛生安全保障主管特伊.蒙克(Troy Monk)表示,至少有三個燃料槽失火,目前團隊正在努力保持周遭燃料槽溫度不要上升。
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線
※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益
※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象
※南投搬家前需注意的眉眉角角,別等搬了再說!
※新北清潔公司,居家、辦公、裝潢細清專業服務
摘錄自2019年12月7日中央社報導
位於非洲南部尚比西河(Zambezi River)中游, 坐落於尚比亞與辛巴威的交界處,高108公尺、寬1708公尺,被認為是世界上最大的瀑布,是該區域最大旅遊景點,數十年來吸引了數百萬旅客造訪辛巴威及尚比亞一睹奇景。
然而,路透社與英國「每日郵報」報導,維多利亞瀑布(Victoria Falls),非洲南部在嚴重旱災衝擊下,水位降至25年來最低,這場世紀最嚴重旱災,造成維多利亞瀑布減緩為細流,加劇氣候變遷可能破壞瀑布的憂慮。通常於乾季瀑布水流會減少,但官員表示,今年水位下降程度前所未見。
Shocking before and after photos show Victoria Falls almost completely dried up
— Daily Mail Online (@MailOnline)
The Victoria Falls, which draws millions of holidaymakers to Zimbabwe and Zambia, has shrunk to a trickle, fuelling fears that climate change could kill one of the region’s biggest tourist attractions
— Reuters (@Reuters)
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"
※網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線
※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整
※南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!
※教你寫出一流的銷售文案?
摘錄自2019年12月9日自由時報烏干達報導
烏干達數周的降雨造成嚴重的水災,根據紅十字會8日表示,已發現17名屍體,死亡人口持續增加,目前仍有許多人失蹤。這也是上周暴雨,烏干達地區最新公告的死者數據。
綜合外媒報導,自10月起,東非各國遭到暴雨的侵襲,包括烏干達、肯亞等國。根據聯合國資料,過去兩個月中,洪水和山區滑坡摧毀了東非大部分地區,造成近300人死亡,數百萬人流離失所。
東非國家正在經歷第二個雨季,該雨季已在大部分地區達到頂峰。烏干達國家氣象局預測,整個12月將繼續出現強降雨。暴雨在烏干達低窪地區造成了破壞性的洪災,並在山區造成了滑坡。破壞性的災害襲擊了烏干達各地的種植園和農作物。
根據飢荒預警系統網絡(Famine Early Warning Systems Network)的數據,在過去的兩個月中,大雨使東非部分地區遭受嚴重破壞,非洲之角的降雨量比平均水平高出300%(10月至11月中旬)。
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"
※網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線
※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整
※南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!
※教你寫出一流的銷售文案?