1. 程式人生 > >專案oracle轉mysql記錄

專案oracle轉mysql記錄

1,利用PowerDesigner設計好表,這個表適應需要轉型的資料庫(MySQL)。

在oracle中主鍵是採用的是序列知識,並且有些是uuid作為主鍵的。在Mysql主鍵用的是numeric(16,0),有些有小數位數的用numeric(5,2)(分數),日期型別採用的是datetime,在oracle中是date,字串varchar,字元char,oracle中blob型別(spring進行了blob處理),在mysql中用的text型別。出現問題的地方,比如numeric(5,2)在java語言進行強轉時出現一些問題,有些根據具體問題,直接在資料庫中把欄位型別修改為float型,或者numeric(5,0),這樣子做不是因為只是適應mysql,而是希望儘可能讓java語言適應兩套資料庫。(並沒有設計外來鍵約束,有很多索引;java語言根據需求,領試卷時採用(伺服器端快取)具體技術是spring的快取,並且@CachePut和@Cacheable以及@CacheEvict配合使用。由於答案的結構涉及太多東西,採用單例模式)

2,程式碼沒有怎麼動,只是在DAO的實現層進行了sql語句的修改。命名:介面+MySQLImpl。

oracle :to_char(),to_date(),decode(),sign(),length()字元數,lengthb()和substrb()位元組數,floor(),ceil()。有些是利用dual獲取到主鍵id。

mysql :date_format(),if()或者case when(),length(),利用unhex(substring(hex(aaa),pos1,pos2))處理位元組方式。mysql利用last_insert_id(exam_id) as id 方法取得。分頁,沒有動PagingHelper,在sql語句層面進行修改,有兩個方法,利用方法簽名進行區別。連線或者轉字符采用的是concat()。

3,測試用例。

JUnit,註解,ApplicationContext,把相應的配置檔案引入進來,只是進行sql語句層面的測試。測試只是看能否跑通sql語句就行了,並沒有作太多的思考。在刪除語句起別名的地方oracle和mysql有些不同。

4,出現問題,然後分析原因,找到原因後,就思考,我要做什麼,比如我想把BigDecimer轉成字串型別,直接找谷老師。原因如何找,鎮定閱讀報錯資訊,找到程式碼中具體的方法,以及方法程式碼中的具體位置,採用斷點,或者System.out.println()列印,或者自己寫個MyselfTest進行各種方法測試,看看問題出在哪兒,找到問題出現的原因。熟練使用firefox的F12看看各種資訊。解決問題不能單一,可以思考資料庫層面中的資料型別呀,可以思考程式碼層面上的,要考慮兩條資料庫是否都適用。還有出現問題,應該先動手測試一下,是不是自己按自己所想的,而不是丟擲問題。大膽修改,只要分析合理正確,都是可以修改的。