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

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

教材學習內容總結

JDBC入門

JDBC簡介

  • JDBC全名Java DataBase Connectivity,是java聯機數據庫的標準規範。它定義一組標準類與接口,應用程序須要聯機數據庫時調用這組標準API。
  • JDBC標準:JDBC應用程序開發者接口和JDBC驅動程序開發者接口。
  • 應用程序使用JDBC聯機數據庫:
·Connection conn = DriverManager.getConnection(...);
·Statement st = conn.createStatement();
·ResultSet rs = st.executeQuesry(...);

鏈接數據庫

  • 要鏈接數據庫系統,必需要有廠商操做的JDBC驅動程序,必須在CLASSPATH中設定驅動程序JAR文檔。
  • 操做Driver接口的對象是JDBC進行數據庫存取的起點。connection接口的操做對象是數據庫聯機表明對象,要取得Connection操做對象,能夠經過DriverManager的getConnection():
    Connection conn = DriverManager.getConnection(jdbcUrl, username, passwd);
  • 在操做完數據庫以後,若肯定再也不須要鏈接,則必須使用close()來關閉與數據庫的鏈接,以釋放鏈接時相關的必要資源,像是聯機相關對象、受權資源等。

使用Statement、ResultSet

  • 要執行SQL的話,必須取得java.sql.Statement操做對象。可以使用Connection的createStatement()創建Statement對象。
  • Statement的execute()用來執行SQL,並能夠測試SQL是執行查詢或更新,返回true表示SQL執行將返回ResultSet做爲查詢結果。
  • Resultset的next()可經過返回true或者false表示是否有下一筆數據。

使用PreparedStatement、CallableStatement

  • 使用Connection的prepareStatement()方法創建好預先編譯的SQL語句,當中參數會變更的部分先指定「?」這個佔位字符。PrepareStatement stmt = conn.prepareStatement("INSERT INTO t_message VALUES(?, ?, ?, ?)");
  • 等到須要真正指定參數執行時,再使用相對應的setInt()setString()等方法,指定「?」處真正應該有的參數。例如:
stmt.setInt(1,2);
stmt.setString(2,"momor");
stmt.executeUpdate();

JDBC進階

使用DataSource取得聯機

  • 當MessageDAO的用戶沒法告知DriverManager有關JDBC URL、用戶名稱、密碼等信息時,可讓MessageDAO依賴於javax.sql.DataSource接口,經過其定義的getConnection()方法取得Connection。html

    使用ResultSet捲動、更新數據

  • 在ResultSet時,默承認以使用next()移動數據光標至下一筆數據,而後使用getxxx()方法來取得數據。
  • ResultSet可使用previous()first()last()等方法先後移動數據光標,還能夠調用updatexxx()updateRow()等方法進行數據修改。
  • 結果集類型3種設定:
ResultSet.TYPE_FORWARD_ONLY(默認)(只能前進數據光標)
ResultSet.TYPE_SCROLL_INSENSITIVE(先後移動數據光標)
ResultSet.TYPE_SCROLL_SENSITIVE(先後移動數據光標,反映數據庫中的數據修改)
  • 更新設定的2種設定:
·ResultSet.CONCUR_READ_ONLY(默認)(進行數據讀取)
·ResultSet.CONCUR_UPDATABLE(進行數據讀取、更新)
  • 數據光標移動的API:

絕對位置移動:absolute()、afterLast()、beforeFirst()、first()、last()。java

相對位置移動:relative()、previous()、next()。git

判斷目前位置:isAfterLast()、isBeforeFirst()、isFirst()、isLast()。程序員

  • 數據修改的條件限制:必須選取單一表格;必須選取主鍵。;必須選取全部的NOT FULL的值。
  • 數據更新:調用updatexxx()方法,而後調用updateRow()方法。取消更新:調用cancelRowUpdates()
  • 新增數據:先調用moveToInsertRow(),以後調用updatexxx()設定要新增的數據各個字段,而後調用insertRow()新增數據。
  • 刪除數據列:調用deleteRow()

批次更新

  • 每次執行excuteUpdate(),都會向數據庫發送一次SQL。批次更新時可使用addBatch()方法來收集SQL,並使用executeBatch()方法將所收集的SQL傳送出去。

Blob與Clob

  • 要將文檔寫入數據庫,能夠在數據庫表格字段上使用BLOB或CLOB數據類型。
  • .BLOB用於存儲大量的二進制數據,像是圖檔、影音檔等。CLOB用於存儲大量的文字數據。
  • java.sql.Blobjava.sql.Clob兩個類分別表明BLOB與CLOB數據。

交易簡介

  • 交易的四個基本要求ACID:原子性、一致性、隔離行爲、持續性。
  • 髒讀:讀取到不乾淨、不正確的數據。若是要避免此類問題,能夠設定隔離層級爲「可讀取確認」,能夠經過Connection的setTransactionIsolation()設定爲TRANSACTION_COMMITTED來提示數據庫肯定此隔離行爲。

metadata簡介

  • Metadata即詮讀數據的數據。
  • 能夠經過Connection的getMetaD()方法取得DatabaseMetadata對象,經過這個對象提供的各類方法能夠取得數據庫總體信息,而ResultSet表示查詢到的數據,而數據自己的字段、類型等信息,能夠經過ResulSet的getMetaData對象,經過這個對象提供的相關方法就能夠取得域名、字段類型等信息。

RowSet簡介

  • javax.sql.RowSet接口用以表明數據的類集合,數據能夠是電子表格數據、XML數據或任何具備列集合概念的數據源。可使用RowSet對列集合進行增刪查改。
  • JdcRowSet是聯機式的RowSet,在操做期間會保持與數據庫的聯機,可視爲取得、操做的行爲封裝。
  • CachedRowSet爲脫機式的RowSet,在查詢並填充完數據後就會斷開與數據源的聯機。

java反射機制

JAVA反射機制是在運行狀態中,對於任意一個類,都可以知道這個類的全部屬性和方法;對於任意一個對象,都可以調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱爲java語言的反射機制。正則表達式

class與.class文檔

class

  • Class類自己表示Java對象的類型,咱們能夠經過一個Object(子)對象的getClass方法取得一個對象的類型,此函數返回的就是一個Class類。
  • 獲得Class類的方法:
    1.運用static method
Class.forName()(最常被使用)

Class c2 = Class.forName ("java.awt.Button");
Class c3 = Class.forName ("java.util.LinkedList$Entry");
Class c4 = Class.forName ("I");

2.運用.class 語法sql

Class c1 = String.class;數據庫

.class

  • 在咱們獲得一個類的Class類對象以後,就能夠操做class對象的公開方法取得基本類信息。能夠經過object的getclass()方法,或者是經過.class常量取得每一個對象的class對象。

JAVA的動態代理

  • 代理模式是經常使用的java設計模式,他的特徵是代理類與委託類有一樣的接口,代理類主要負責爲委託類預處理消息、過濾消息、把消息轉發給委託類,以及過後處理消息等。代理類與委託類之間一般會存在關聯關係,一個代理類的對象與一個委託類的對象關聯,代理類的對象自己並不真正實現服務,而是經過調用委託類的對象的相關方法,來提供特定的服務。
  • 按照代理的建立時期,代理類能夠分爲兩種。
    靜態代理:由程序員建立或特定工具自動生成源代碼,再對其編譯。在程序運行前,代理類的.class文件就已經存在了。
    可定義一個hello接口:
public Interface Hello{
void hello(String name);
}

動態代理:在程序運行時,運用反射機制動態建立而成。設計模式

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

  • 問題1:關於書上514頁的MessageDAODemo.java,拋出java.sql.SQLException``和No suitable driver found for jdbc```
  • 問題1解決方案:x須要事先Connection鏈接數據庫。

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

本週在教材代碼的學習中沒有遇到什麼大問題,關於實驗的問題參看第二次實驗報告。函數

代碼託管

上週考試錯題總結

  • ByteBuffer 調用了flip()以後,position的值必定是0。
  • 正則表達式」(‘|」)(.*?)\1」匹配 「'Hello',"World」」的結果是()
    A .
    不匹配
    B .
    'Hello'
    C .
    "World"
    D .
    'Hello',"World"
  • 答案:B、C,反向引用 \1 表明第一個()中的匹配內容。
  • 正則表達式 zo* 匹配()
    A .
    z
    B .
    zo
    C .
    zoo
    D .
    zooooooooooooooooooooooooooo
  • 答案:A、B、C、D,可使0次。

結對及互評

評分標準

  1. 正確使用Markdown語法(加1分):
    • 不使用Markdown不加分
    • 有語法錯誤的不加分(連接打不開,表格不對,列表不正確...)
    • 排版混亂的不加分
  2. 模板中的要素齊全(加1分)
    • 缺乏「教材學習中的問題和解決過程」的不加分
    • 缺乏「代碼調試中的問題和解決過程」的不加分
    • 代碼託管不能打開的不加分
    • 缺乏「結對及互評」的不能打開的不加分
    • 缺乏「上週考試錯題總結」的不能加分
    • 缺乏「進度條」的不能加分
    • 缺乏「參考資料」的不能加分
  3. 教材學習中的問題和解決過程, 一個問題加1分工具

  4. 代碼調試中的問題和解決過程, 一個問題加1分

  5. 本週有效代碼超過300分行的(加2分)
    • 一週提交次數少於20次的不加分
  6. 其餘加分:
    • 週五前發博客的加1分
    • 感想,體會不假大空的加1分
    • 排版精美的加一分
    • 進度條中記錄學習時間與改進狀況的加1分
    • 有動手寫新代碼的加1分
    • 課後選擇題有驗證的加1分
    • 代碼Commit Message規範的加1分
    • 錯題學習深刻的加1分
    • 點評認真,能指出博客和代碼中的問題的加1分
    • 結對學習狀況真實可信的加1分
  7. 扣分:
    • 有抄襲的扣至0分
    • 代碼做弊的扣至0分
    • 遲交做業的扣至0分

點評模板:

  • 博客中值得學習的或問題:
    • xxx
    • xxx
    • ...
  • 代碼中值得學習的或問題:
    • xxx
    • xxx
    • ...
  • 基於評分標準,我給本博客打分:XX分。得分狀況以下:xxx

  • 參考示例

點評過的同窗博客和代碼

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

相較於前幾周本週很大一部分時間用於實驗上,對課本的學習略有疏忽,須要在這幾天 繼續學習深刻。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 20/20 1/4 20/20
第二週 145/165 1/5 12/32
第三週 411/576 1/6 16/48
第四周 1021/1597 1/7 25/73
第五週 1115/2712 1/8 28/103
第六週 1126/3838 1/9 20/123
第七週 574/4412 2/11 18/141
第八週 421/4633 1/10 15 / 156
第九周 1189/5822 2/12 20/161

嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法

  • 計劃學習時間:18小時

  • 實際學習時間:20小時

  • 改進狀況:本週大部分時間用來實踐了。

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表
)

參考資料

相關文章
相關標籤/搜索