利用Excel,Oracle裡批量導資料

來源:互聯網
上載者:User

本文轉自:http://www.cnblogs.com/heyanzheng/articles/1573636.html

 

 

這裡是將幾個醫院的所有醫生資訊,填寫入Excel後,匯入到Oracle。當然,oracle不能直接讀取Excel的內容,但我們可以轉彎來實現。

可以簡單的認為,Excel表中的內容一一對應於資料庫中一個表的欄位,一一插入即可。實際當中可能不會這麼簡單,但原理一樣,如果有關聯表,需要插入後產生的欄位id,則設定為主鍵,
利用索引,擷取當前值即可繼續操作;原理一樣。
如果你的團隊也是分工協作的,Excel裡面的格式如下所示:

每一行為一個醫生的資訊。如果你的團隊也是分工協作的,那將這個格式給相應的人員,讓他們將資料錄入其中即可。我們開始考慮怎麼讓他們匯入表中。
匯入表,無非是一系列的insert語句,每條語句中的資料為Excel中的每一行資料。所以我們需要將Excel中的資料匯出到一個檔案中,每個醫生的資料為一行,各個資料之間用一個標示符隔開,
可以很容易的得到每個醫生、每個對應項中的值。
Excel中內建有很多匯出方式。其中可以到處xml格式的資料,如果你有專門的工具可以讀取,或者自寫一個讀取此xml格式的程式,也可以。注意的是,轉為xml格式後,比如“醫生傳真”這項
沒有值,在xml結點樹中則無此項;也可以匯出為.txt格式的檔案,但匯出後保留了原有格式的樣子,利用定位字元,我們無法很輕鬆的獲得每項資料。最好是我們可以指定匯出時每項之間的間隔
標示符。所以我們想到了Access。
微軟的產品,相互之間匯入匯出是完全沒有問題的。將Excel的資料匯入Access中(Access中“開啟”),在Access中是以外部連結資料表的形式開啟的。這時不能在Access中修改資料,只能在對應連結的Excel中修改,
修改後,Access中的資料也會相應的改變。檢查Access中的資料無問題,則準備從Access中將資料匯出。
在外部連結資料表上單擊右鍵,選擇“匯出”,選擇好保持目錄,選擇“文字檔”,下一步;
選擇匯出格式,為了便於讀取各項值,當然選擇“帶分隔字元”,下一步;
選擇分隔字元,如果你要匯入的資料中資料不多,不雜,可以選擇分號或者逗號,但我要到的資料中包含文本,可能會有逗號等,所以我選“其他”,選擇一個不常用的,如"#";文本標示符可以去掉,我們在產生
批量sql語句時可以自己手動控制添加,下一步;
確定匯出即可。
匯出的資料如下所示:

到了這個時候,在讀取資料已經不難。定位該.txt檔案,利用檔案流一行一行的讀取,讀取後根據"#"分開,分別對應到insert語句中的每一個欄位,大量匯入的工作就算完成了。
其中有個很重要的問題就是,如果利用java的IO流直接從檔案中讀取後,中文全為亂碼。我們需要轉換檔編碼格式。利用newstr = new String(oldstr.getBytes("ISO-8859-1"), "GBK");轉化為GBK格式
即可正常使用了。
當然,做就做的完美點。中間或許有些對應項為空白等,如果要加判定的加上;要讀取圖片的,讀取圖片後記錄位置。Excel中原有存數位位置,從Access中匯出來後,每個都變為X.00了,這時如果資料庫中的
欄位為number(n)型,則資料匯入會出錯。所以這個也需要處理掉。等等等等。這些都是簡單的工作了,有了這個思路,剩餘的一切都很簡單。

這裡是將幾個醫院的所有醫生資訊,填寫入Excel後,匯入到Oracle。當然,oracle不能直接讀取Excel的內容,但我們可以轉彎來實現。

可以簡單的認為,Excel表中的內容一一對應於資料庫中一個表的欄位,一一插入即可。實際當中可能不會這麼簡單,但原理一樣,如果有關聯表,需要插入後產生的欄位id,則設定為主鍵,
利用索引,擷取當前值即可繼續操作;原理一樣。
如果你的團隊也是分工協作的,Excel裡面的格式如下所示:

每一行為一個醫生的資訊。如果你的團隊也是分工協作的,那將這個格式給相應的人員,讓他們將資料錄入其中即可。我們開始考慮怎麼讓他們匯入表中。
匯入表,無非是一系列的insert語句,每條語句中的資料為Excel中的每一行資料。所以我們需要將Excel中的資料匯出到一個檔案中,每個醫生的資料為一行,各個資料之間用一個標示符隔開,
可以很容易的得到每個醫生、每個對應項中的值。
Excel中內建有很多匯出方式。其中可以到處xml格式的資料,如果你有專門的工具可以讀取,或者自寫一個讀取此xml格式的程式,也可以。注意的是,轉為xml格式後,比如“醫生傳真”這項
沒有值,在xml結點樹中則無此項;也可以匯出為.txt格式的檔案,但匯出後保留了原有格式的樣子,利用定位字元,我們無法很輕鬆的獲得每項資料。最好是我們可以指定匯出時每項之間的間隔
標示符。所以我們想到了Access。
微軟的產品,相互之間匯入匯出是完全沒有問題的。將Excel的資料匯入Access中(Access中“開啟”),在Access中是以外部連結資料表的形式開啟的。這時不能在Access中修改資料,只能在對應連結的Excel中修改,
修改後,Access中的資料也會相應的改變。檢查Access中的資料無問題,則準備從Access中將資料匯出。
在外部連結資料表上單擊右鍵,選擇“匯出”,選擇好保持目錄,選擇“文字檔”,下一步;
選擇匯出格式,為了便於讀取各項值,當然選擇“帶分隔字元”,下一步;
選擇分隔字元,如果你要匯入的資料中資料不多,不雜,可以選擇分號或者逗號,但我要到的資料中包含文本,可能會有逗號等,所以我選“其他”,選擇一個不常用的,如"#";文本標示符可以去掉,我們在產生
批量sql語句時可以自己手動控制添加,下一步;
確定匯出即可。
匯出的資料如下所示:

到了這個時候,在讀取資料已經不難。定位該.txt檔案,利用檔案流一行一行的讀取,讀取後根據"#"分開,分別對應到insert語句中的每一個欄位,大量匯入的工作就算完成了。
其中有個很重要的問題就是,如果利用java的IO流直接從檔案中讀取後,中文全為亂碼。我們需要轉換檔編碼格式。利用newstr = new String(oldstr.getBytes("ISO-8859-1"), "GBK");轉化為GBK格式
即可正常使用了。
當然,做就做的完美點。中間或許有些對應項為空白等,如果要加判定的加上;要讀取圖片的,讀取圖片後記錄位置。Excel中原有存數位位置,從Access中匯出來後,每個都變為X.00了,這時如果資料庫中的
欄位為number(n)型,則資料匯入會出錯。所以這個也需要處理掉。等等等等。這些都是簡單的工作了,有了這個思路,剩餘的一切都很簡單。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.