關於JDBC學習過程中的注意事項(分享自己犯過的錯誤,寫給初學JDBC的小夥伴的八條建議)
- 前言:最近在學習JDBC,總結了幾個小問題,特地分享給大家,讓大家不要犯這樣的錯誤,也希望大家養成學會總結的好習慣,由於本人水平有限如果有什麼錯誤還請指出,好讓我進行及時的更改。
一、注意事項
以下的出現的問題是按照我的學習進度進行排列的,可能這些問題很簡單但是我還是犯了很多次,所以特地總結出來。
(一) URL的時候經常少寫冒號(:)
這雖然是一個小問題,但是很多人可能寫的時候會不注意這一點,補充一下MySql的URL書寫格式:- 標準寫法 jdbc:mysql://localhost:3306/databaseName?user=ursername&password=password
- 改成IP地址寫法 jdbc:mysql://192.168.0.1:3306/databaseName?user=ursername&password=password
- 省略寫法 jdbc:mysql:///databaseName?user=ursername&password=password
(二) Properties的load方法書寫錯誤
Properties物件的load方法的格式不同那麼檔案的相對位置的書寫格式就是不一樣的,這裡我直接推薦一篇比較好的博文分享給大家。
(三) 使用事務前必須關閉自動提交
關閉事務自動提交的方法是conn.setAutoCommit(false),這裡的conn是Connection物件,這裡同樣推薦一篇博文給大家。
(四) 養成及時關閉資源的好習慣
如果我們不及時關閉資源,那麼MySQL中的連線程式是會一直存在的,這樣對效能和效率是有很大的影響的。以下是關流的基本格式。
1 //宣告 2 Connection conn = null; 3 Statement stat = null; 4 ResultSet rs = null; 5 try { 6 ... 7 } catch (SQLException e) { 8 e.printStackTrace(); 9 } finally{ 10 try { 11 //釋放資源 12 if(conn!=null)conn.close(); 13 if(stat!=null)stat.close(); 14 if(rs!=null)rs.close(); 15 } catch (SQLException e) { 16 e.printStackTrace(); 17 } 18 }
(五) 在書寫entity實體的屬性時推薦使用基本資料型別的包裝類
因為包裝類是引用資料型別可以有null值,而實際的表格中就有很多地方出現null值,這樣方便資料的接收,以及對圖片等非文字資料用byte陣列進行接收。比如下表就有null值。
1 +---------+-----------------+-----------------+------------+------------+----------+--------------+ 2 | vend_id | vend_name | vend_address | vend_city | vend_state | vend_zip | vend_country | 3 +---------+-----------------+-----------------+------------+------------+----------+--------------+ 4 | BRE02 | hhh | 500 Park Street | Anytown | OH | 44333 | USA | 5 | BRS01 | Bears R Us | 123 Main Street | Bear Town | MI | 44444 | USA | 6 | DLL01 | Doll House Inc. | 555 High Street | Dollsville | CA | 99999 | USA | 7 | FNG01 | Fun and Games | 42 Galaxy Road | London | NULL | N16 6PS | England | 8 | FRB01 | Furball Inc. | 1000 5th Avenue | New York | NY | 11111 | USA | 9 | JTS01 | Jouets et ours | 1 Rue Amusement | Paris | NULL | 45678 | France | 10 +---------+-----------------+-----------------+------------+------------+----------+--------------+
(六) 關於c3p0-config的xml配置檔案的問題
關於配置檔案的設定如果不注意的話,可能還是會出現很多的問題,推薦一篇部落格:
- 檔案中經常可能用到&邏輯與的符號,然而這個符號在xml中不能直接寫否則肯定會報錯,要用&代替。還有其他的符號也需要進行轉換。
- 關於檔名,這裡的檔名一定要和根元素的名稱一致,一般都是c3p0-config。
- c3po連線池的建立讀取配置檔案時,這裡直接寫入named-default節點中的name屬性值。
1 <c3p0-config> 2 <named-config name="mysql"> 3 <property name="driverClass">com.mysql.jdbc.Driver</property> 4 <property name="jdbcUrl">jdbc:mysql:///databaseName</property> 5 <property name="user">root</property> 6 <property name="password">root</property> 7 </named-config> 8 </c3p0-config>
(七) 注意書寫的sql語句的檢查
很多時候我們會不小心寫錯sql語句,那麼如果我們在寫sql語句之前在MySQL的視覺化軟體上先進行測試,或者在執行之前先將sql語句列印出來,那麼錯誤的機率就會減少。
(八) 使用BeanUtils.populate(bean,properties)方法時多個表格不要重名以及多個類變數名也不要重名
BeanUtils的populate的原理是通過傳入的引數的map中的String型別的key和物件的變數名進行比較,如果相同就為其賦值。那麼如果重名的話就會出現賦值錯誤,肯定會將第一次掃描到表的同列名資料直接賦值就會造成物件的賦值錯誤。
二、總結分析
以上的問題出現的原因多半是跟自己的不良習慣有關,那麼以下我們進行一下總結。
(一) SQL的基礎知識要牢固
在JDBC中將會多次要求書寫sql語句,如果SQL的基礎知識很不紮實,那麼將會很頭疼,因為寫錯sql語句就會報錯。所以在學習JDBC之前請將SQL的常用基本方法用熟練。
(二) 平時就需要養成嚴謹的編碼習慣
個人理解嚴謹的編碼習慣是書寫程式碼的時候要多寫註釋,然後寫的時候每寫完一行大概檢查一下,雖然這樣的效率很低,但是對於降低bug出現機率很有效。
(三) 平時多總結自己的錯誤
起始很多的錯誤都是相通的,平時多注意總結自己的程式碼錯誤,那麼這種型別的錯誤可能就不會經常出現了。