20155236 2016-2017-2 《Java程序設計》第九周學習總結

20155236 2016-2017-2 《Java程序設計》第九周學習總結

教材學習內容總結

JDBC入門

1.JDBC簡介html

JDBC是用於執行SQL的解決方案,開發人員使用JDBC的標準接口,數據庫廠商則對接口進行操做,開發人員無須接觸底層數據庫驅動程序的差別性,數據庫自己是個獨立運行的應用程序,你撰寫的應用程序是利用通訊協議對數據庫進行指令交換,以進行數據的增刪查找。一般你的應用程序會利用一組專門與數據庫進行通訊協議的連接庫,以簡化與數據庫溝通時的程序撰寫。有時候,更換數據庫的需求並非沒有,應用程序跨平臺也是常常的需求,JDBC基本上就是用來解決這些問題的。JDBC是Java聯機數據庫的標準規範。具體而言,它定義了一組標準類與接口,應用程序須要聯機數據庫時調用這組標準API,而標準API中的接口由數據庫廠商操做,一般稱爲JDBC驅動程序。JDBC標準主要分爲兩個部分:JDBC應用程序開發者接口以及JDBC驅動程序開發者接口。java

2.鏈接數據庫git

爲了要鏈接數據庫系統,必需要有廠商操做的JDBC驅動程序,必須在CLASSPATH中設定驅動程序JAR文檔。正則表達式

3.使用Statement、ResultSetsql

Connection是數據庫鏈接的表明對象,接下來要執行SQL的話,必須取得java.sql.Statement操做對象,它是SQL描述的表明對象。Statementexecute()能夠用來執行SQL,並能夠測試SQL是執行查詢或更新,返回true表示SQL執行將返回ResultSet做爲查詢結果。視需求而定,Statement或者ResultSet在不使用時,可使用close()將之關閉,以釋放相關資源。Statement關閉時,所關聯的ResultSet也會自動關閉。數據庫

4.使用PreparedStatementCallableStatement
數組

若是有些操做只是SQL語句當中某些參數會有所不一樣,其他的SQL子句皆相同,則可使用java.sql.PreparedStatement。可使用ConnectionPreparedStatement()方法創建好預先編譯的SQL語句,當中參數會變更的部分,先指定「?」這個佔位字符。在JDBC裏要表示日期,是使用java.sql.Date,其日期格式是「年、月、日」,要表示時間的話則是使用java.sql.Time,其時間格式爲「時、分、秒」,若是要表示「時、分、秒、微秒」的格式,你可使用java.sql.Timestamp網絡

2、JDBC進階架構

1.使用ResultSet捲動、更新數據ide

ResultSet時,默承認以使用next()移動數據光標至下一筆數據,然後使用getXXX()方法來取得數據。結果集類型能夠指定3種設定:ResultSet.TYPEFORWARDONLY(默認)、ResultSet.TYPESCROLLINSENSITIVEResultSet.TYPESCROLLSENSITIVE。更新設定能夠有兩種指定:ResultSet.CONCURREADONLY(默認)、ResultSet.CONCUR_UPDATABLE。若是要使用ResultSet進行數據修改,則有些條件限制:必須選取單一表格、必須選取主鍵、必須選取全部NOT NULL的值。

2.批次更新

每一次執行executeUpdate(),其實都會向數據庫發送一次SQL,若是大量更新的SQL有一萬筆,就等於經過網絡進行了一萬次的信息傳送,網絡傳送信息實際上必須打開I/O、進行路由等動做。因此最好就是全部收集的SQL,最後會串爲一句SQL,而後傳送給數據庫,既然是批次更新,顧名思義,就是僅用在更新上,因此批次更新的限制是,SQL不能是SELECT,不然會拋出異常。

3.Blob與Clob

若是要將文檔寫入數據庫,能夠在數據庫表格字段上使用BLOB或CLOB數據類型,BLOB用於存儲大量二進制數據,像是圖檔、影音檔等,CLOB用於存儲大量的文字數據。

4.交易簡介

交易的四個基本要求是原子性、一致性、隔離行爲與持續性。當多個交易並行時,可能引起的數據不一致問題有哪些呢?(1)更新遺失:基本上就是指某個交易對字段進行更新的信息,因另外一個交易的介入而遺失更新效力。(2)髒讀:兩個交易同時進行時,其中一個交易更新數據但未確認,另外一個交易就讀取數據,就有可能發生髒讀問題。(3)沒法重複的讀取:某個交易兩次讀取同一字段的數據並不一致。(4)幻讀:同一交易期間,讀取到的數據筆數不一致。

5.metadata簡介

Metadata即「詮讀數據的數據」,數據庫是用來存儲數據的地方,然而數據庫自己產品名稱爲什麼?數據庫中有幾個數據表格?表格名稱爲什麼?表格中有幾個字段等?這些都是metadata

6.RowSet簡介

JDBC定義了java.sql.RowSet接口,用以表明數據的列集合,這裏的數據並不必定是數據庫中的數據,能夠是電子表格數據、XML數據或任何具備列集合概念的數據源。RowSet定義了列集合基本行爲,其下有JdbcRowSetCachedRowSetFilteredRowSetJoinRowSet,WebRowSet五個標準列集合子接口。JdbcRowSet是聯機式的RowSet,也就是操做JdbcRowSet期間,會保持與數據庫的聯機,可視爲取得、操做ResultSet的行爲封裝,可簡化JDBC程序的撰寫,或做爲JavaBean使用。CachedRowSet爲脫機式的RowSet,在查詢並填充完數據後,就會斷開與數據源的聯機,而不用佔據相關聯機資源,必要時也能夠再與數據源聯機進行數據同步。

教材學習中的問題和解決過程

  • 區分不了幻讀與沒法重複的讀取,隔離層級「可重複讀取」、「可循序」
    解決:「可重複讀取」針對兩次交易讀取數據不一致,同一交易讀取數據必須相同的狀況,「可循序」針對同一交易期間讀取到的數據不一致,在數據不一致時,交易能夠照順序逐一進行
  • 默認會將註釋信息存儲於.class文檔,可被編譯程序或位碼分析工具讀取,但執行時期沒法讀取註釋信息,在執行時期讀取註釋信息,用什麼方式?
    可使用java.lang.annotation.Retention搭配java.lang.annotation.RetentionPolicy枚舉指定。

代碼調試中的問題和解決過程

  • P509的代碼

  • Connection使用嘗試自動關閉資源語法,因此執行完try區塊後,Connection的close()就會被調用。

代碼託管

上週考試錯題總結

  • 1.正則表達式」(‘|」)(.*?)\1」匹配 「'Hello',"World」」的結果是(D)
    :

A . 不匹配

B . 'Hello'

C . "World"

D . 'Hello',"World"

解釋:反向引用 \1 表明第一個()中的匹配內容

2.正則表達式 zo* 匹配(ABCD)
:

A . z

B . zo

C . zoo

D . zooooooooooooooooooooooooo

解析:* 能夠是0次

3.Suppose we have an array of String objects identified by the variable names. Which of the following for loops will not correctly process each element in the array.(假如咱們有一個名爲names的String對象數組,下面哪一個for循環不能遍歷數組中的每個元素?)
:(C)

A .
for(int i = 0; i < names.length; i++)

B .
for(String name : names)

C .
for(int i = 0; i < names.length(); i++)

D .
none of these will correctly process each element(以上都不能遍歷)

E .
all of these will correctly process each element(以上都能遍歷)

解析:因爲語法錯誤,選擇c不能正確處理每一個元素。長度變量不是方法,所以在它以後沒有圓括號。選擇b是使用foreach循環處理數組的示例,而且選擇a是循環的正確。

4.正則表達式「r.t」匹配字符串「rat」的Java 代碼表達式是(D)

A .
"rat".matcher("r.t")

B .
"r.t".matcher("rat")

C .
Pattern.compile("rat").matcher("r.t")

D .
Pattern.compile("r.t").matcher("rat")

5.Which of the statements is true about the following code snippet?(對於下面的代碼段,說法正確的是?)(D)

int[] array = new int[25];
     array[25] = 2;

A .
The integer value 2 will be assigned to the last index in the array.(整數2會賦給數組中最後一個元素)

B .
The integer value 25 will be assigned to the second index in the array.(整數25會賦給數組中的第2個索引)

C .
The integer value 25 will be assigned to the third value in the array. (整數25會賦給數組中的第3個元素)

D .
This code will result in a compile-time error.(代碼會產生編譯時錯誤)

E .
This code will result in a run-time error. (代碼會產生運行時錯誤)

解析:此代碼將拋出一個對象的大小時拋出,由於這個數組中最後一個指數是24。這會致使運行時錯誤。

結對及互評

  • 學習內容
  1. 註冊Driver的操做對象

    操做Driver接口的對象是JDBC進行數據庫存取的起點。
  2. 取得Connection操做對象
  • Connection接口的操做對象是數據庫聯機表明對象,要取得Connection操做對象,能夠經過DriverManager的getConnection():
  • Connection conn = DriverManager.getConnection(jdbcUrl, username, passwd);
  • 除了基本的用戶名稱、密碼以外,還必須提供JDBC URL,其定義了鏈接數據庫時的協議、自協議、數據源識別。

  • 主機名能夠市本機或其餘聯機主機名、地址,MySQL端口默認爲3306。

  1. 關閉connection操做對象
  • 取得Connection對象以後,可使用isClosed()方法測試與數據庫的連接是否關閉。

  • 在操做完數據庫以後,若肯定再也不須要鏈接,則必須使用close()來關閉與數據庫的鏈接,以釋放鏈接時相關的必要資源,像是聯機相關對象、受權資源等。

結對照片

點評過的同窗博客和代碼

其餘(感悟、思考等,可選)

我知道第16章、第17章和第18章跟以前同樣,仍是介紹一些類的應用,因而我採起和以前同樣的辦法,一邊看書,一邊總結,看書上總共介紹了多少種API,每一種API的架構是什麼,每一種API的做用與注意事項是什麼。就這樣有系統的去學習,感受效率十分高!並且頭腦思緒清晰。婁老師課上強調了數據庫這一章節內容的重要性,由於這部分知識與咱們大三要學習的內容息息相關,因而我刻意的在16章花更多的時間,更仔細的敲代碼,發現問題。其實這些知識不是難,咱們只是感到陌生而已。同窗們有了畏難情緒和厭學情緒,固然就學不進去了,還談什麼效率!這三章的知識不像以前的對象、封裝、繼承、多態那些概念那麼抽象難懂,都是活生生的具體的例子,接受起來其實也挺快的。婁老師說的很對,重要的不是要你學多少java知識,而是經過不斷的學習過程,來總結出一套適合本身的良好的學習方法,這將受用一輩子。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 10/10 1/1 10/10
第二週 100/100 2/2 19/25
第三週 200/278 1/3 10/26
第四周 660/938 1/4 10/36
第五週 1100/2100 1/5 18/54
第六週 740/2840 1/6 23/77
第七週 352/3192 2/8 20/97
第八週 631/3805 1/9 20/117
第九周 2/11 20/137
  • 計劃學習時間:30小時

  • 實際學習時間:20小時

  • 改進狀況:這周又作了實驗,感受本身對IDEA的理解比之前深刻了,好比一些小插件像junit這些能夠輔助咱們實現更高水平的代碼。

參考資料

無0.0

相關文章
相關標籤/搜索