開發中遇到的一些坑

數據庫(MySQL):

1、主鍵類型一致,涉及到外鍵的字段類型需要參考主鍵類型,不要這個表主鍵是int,在外鍵中就成了varchar。


2、在設計數據庫字段類型的時候,注意類型範圍,比如說數據庫字段類型爲Int,那麼這個字段存放的數據範圍就爲int類型範圍,超出範圍就會報錯。

所以int(11),有可能就會報錯,int(12)就失去意義了

順便記錄下:
tinyint 的範圍是-128~127;
int的範圍是-2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型數據(所有數字),存儲大小爲4個字節;
bigint的範圍是 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型數據(所有數字)。存儲大小爲 8 個字節;
smallint unsigned的範圍是 –2^15(2^15表示2的15次冪) 到2^15 – 1,即 –32768 到 32767;
smallint 的範圍是 0 到 2^16 – 1,即 0 到 65535,存儲的字節是2個字節。

 

3、DATE_FORMAT(start_date, '%Y-%m-%d') in (:dateStr)

     DATE_FORMAT(start_date, '%Y-%m-%d') in (?)

in查詢中,如果拼接的是字符串,比如dateStr = "'2018-05-07','2018-05-06','2018-05-05','2018-05-04'";

在Navicat客戶端上執行sql沒得問題,但是通過jpa查詢結果爲空。

DATE_FORMAT(start_date, '%Y-%m-%d') in ("'2018-05-07','2018-05-06','2018-05-05','2018-05-04'");很可能原因就是in查詢裏面的字符串默認添加了雙引號“”導出查詢爲空。

這是一個很隱形的坑,sql單獨執行沒得問題,但是程序中查詢就是爲空。

FIND_IN_SET(DATE_FORMAT(start_date, '%Y-%m-%d'),"2018-05-07,2018-05-06,2018-05-05,2018-05-04");能解決這個問題。FIND_IN_SET是mysql的函數。

FIND_IN_SET(DATE_FORMAT(start_date, '%Y-%m-%d'),:dateStr);

注意:FIND_IN_SET的第二個參數:"2018-05-07,2018-05-06,2018-05-05,2018-05-04"或者‘2018-05-07,2018-05-06,2018-05-05,2018-05-04’,而不是'2018-05-07','2018-05-06','2018-05-05','2018-05-04'。

 

Java開發:

1、String.equals()
equals方法的參數,也要String類型,不是String類型,也不報錯,但是返回就是false;


2、對象拷貝:
ConvertUtils.register(new DateConverter(null), java.util.Date.class);
BeanUtils.copyProperties(ompPostQueryListBean,bbsPostRespDto);
copyProperties方法兩個對象拷貝,必須保證字段名稱和類型一致。不一致也不會發生拷貝。
遇到空的日期類型,裝換報錯。

還有一個對象拷貝方法:

PropertyUtils.copyProperties(userInfo, userInfoBak);
涉及到對象的深拷貝問題

mybatis操作Oracle數據庫遇到一種錯誤:

error code [17004]; 無效的列類型;  

是因爲你傳入的參數的字段爲null對象無法獲取對應的jdbcType類型,而報的錯誤。

需要在SQL語句中的對象加上對應的jdbcType就可以了。

 

3、函數方法功能一定要簡單,單一。

一個函數只做一件事情。寫好註釋,方便其他人調用。別一個函數界限不明確。誰都可以用,誰都不可用。那就尷尬了。

4、JSONObject對象,如果對象是null,轉爲json就是{}。所以對於json對象不能用 jsonobject != null進行判斷。因爲{}!=null永遠爲ture。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章