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

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

教材學習內容總結

JDBC入門

JDBC簡介html

  • 1.JDBC是java聯機數據庫的標準規範,它定義了一組標準類與接口,應用程序須要聯機數據庫時調用這組標準API。

  • 2.JDBC標準:JDBC應用程序開發者接口和JDBC驅動程序開發者接口。
  • 3.應用程序使用JDBC聯機數據庫:java

    ·Connection conn = DriverManager.getConnection(...);
      ·Statement st = conn.createStatement();
      ·ResultSet rs = st.executeQuesry(...);

鏈接數據庫mysql

  • 1.要鏈接數據庫系統,必需要有廠商操做的JDBC驅動程序,必須在CLASSPATH中設定驅動程序JAR文檔。
  • 2.操做Driver接口的對象是JDBC進行數據庫存取的起點。Connection接口的操做對象是數據庫聯機表明對象,要取得Connection操做對象,能夠經過DriverManagergetConnection():Connection conn = DriverManager.getConnection(jdbcUrl, username, passwd);
  • 3.在操做完數據庫以後,若肯定再也不須要鏈接,必須使用close()關閉與數據庫的鏈接,以釋放鏈接時相關的必要資源,如聯機相關對象、受權資源等。
    使用Statement、ResultSet
  • 1.使用Connection的createStatement()創建Statement對象。
  • 2.Statement的execute()用來執行SQL,並能夠測試SQL是執行查詢或更新,返回true表示SQL執行將返回ResultSet做爲查詢結果。

使用PreparedStatementCallableStatementgit

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

    ·stmt.setInt(1,2);
      ·stmt.setString(2,"momor");
      ·stmt.executeUpdate();

    JDBC進階

    使用DataSource取得聯機
  • 1.當MessageDAO的用戶沒法告知DriverManager有關JDBC URL、用戶名稱、密碼等信息時,可讓MessageDAO依賴於javax.sql.DataSource接口,經過其定義的getConnection()方法取得Connection。
    使用ResultSet捲動、更新數據
  • 1.在ResultSet時,默承認以使用next()移動數據光標至下一筆數據,而後使用getxxx()方法來取得數據。
  • 2.ResultSet可使用previous()、first()、last()等方法先後移動數據光標,還能夠調用updatexxx()、updateRow()等方法進行數據修改。
  • 3.結果集類型3種設定:sql

    ·ResultSet.TYPE_FORWARD_ONLY(默認)(只能前進數據光標)
      ·ResultSet.TYPE_SCROLL_INSENSITIVE(先後移動數據光標)
      ·ResultSet.TYPE_SCROLL_SENSITIVE(先後移動數據光標,反映數據庫中的數據修改)
  • 4.更新設定的2種設定:數據庫

    ·ResultSet.CONCUR_READ_ONLY(默認)(進行數據讀取)
      ·ResultSet.CONCUR_UPDATABLE(進行數據讀取、更新)
  • 5.數據光標移動的API:
    絕對位置移動:absolute()afterLast()beforeFirst()first()last()
    相對位置移動:relative()previous()next()
    判斷目前位置:isAfterLast()isBeforeFirst()isFirst()isLast()
  • 6.數據修改的條件限制:
    必須選取單一表格。
    必須選取主鍵。
    必須選取全部的NOT FULL的值。
  • 7.數據更新:調用updatexxx()方法,而後調用updateRow()方法。取消更新:調用cancelRowUpdates()
  • 8.新增數據:先調用moveToInsertRow(),以後調用updatexxx()設定要新增的數據各個字段,而後調用insertRow()新增數據。
  • 9.刪除數據列:調用deleteRow()
    批次更新
  • 1.每次執行excuteUpdate(),都會向數據庫發送一次SQL。批次更新時可使用addBatch()方法來收集SQL,並使用executeBatch()方法將所收集的SQL傳送出去。
    Blob與Clob
  • 1.要將文檔寫入數據庫,能夠在數據庫表格字段上使用BLOB或CLOB數據類型。
  • 2.BLOB用於存儲大量的二進制數據,像是圖檔、影音檔等。CLOB用於存儲大量的文字數據。
  • 3.java.sql.Blobjava.sql.Clob兩個類分別表明BLOB與CLOB數據。
    交易簡介
  • 1.交易的四個基本要求ACID:原子性、一致性、隔離行爲、持續性。
  • 2.更新遺失:某個交易對字段進行更新的消息,因另外一個交易的介入而遺失更新效力。若是要避免此類問題,能夠設定隔離層級爲「可讀取未確認」,能夠經過Connection的setTransactionIsolation()設定爲TRANSACTION_UNCOMMITTED來提示數據庫肯定此隔離行爲。
  • 3.髒讀:讀取到不乾淨、不正確的數據。若是要避免此類問題,能夠設定隔離層級爲「可讀取確認」,能夠經過Connection的setTransactionIsolation()設定爲TRANSACTION_COMMITTED來提示數據庫肯定此隔離行爲。
  • 4.沒法重複的讀取:某個交易兩次讀取同一字段的數據並不一致。若是要避免此類問題,能夠設定隔離層級爲「可重複讀取」,能夠經過Connection的setTransactionIsolation()設定爲TRANSACTION_REPEATABLE_READ來提示數據庫肯定此隔離行爲。
  • 5.幻讀:同一交易期間讀取到的數據筆數不一致。若是要避免此類問題,能夠設定隔離層級爲「可循序」,能夠經過Connection的setTransactionIsolation()設定爲TRANSACTION_SERIALIZABLE來提示數據庫肯定此隔離行爲。
    metadata簡介
  • 1.Metadata即詮讀數據的數據。
  • 2.能夠經過Connection的getMetaD()方法取得DatabaseMetadata對象,經過這個對象提供的各類方法能夠取得數據庫總體信息,而ResultSet表示查詢到的數據,而數據自己的字段、類型等信息,能夠經過ResulSetgetMetaData對象,經過這個對象提供的相關方法就能夠取得域名、字段類型等信息。
    RowSet簡介
  • 1.javax.sql.RowSet接口用以表明數據的類集合,數據能夠是電子表格數據、XML數據或任何具備列集合概念的數據源。可使用RowSet對列集合進行增刪查改。
  • 2.JdcRowSet是聯機式的RowSet,在操做期間會保持與數據庫的聯機,可視爲取得、操做的行爲封裝。
  • 3.CachedRowSet爲脫機式的RowSet,在查詢並填充完數據後就會斷開與數據源的聯機。學習

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

教材學習有問題先去https://shimo.im/doc/1i1gldfsojIFH8Ip/看看,若是別人沒有提出相同問題,能夠編輯文檔添加,而後把本身提出的問題複製到下面:測試

  • 問題:對於教材509頁的代碼不是很理解,代碼以下:.net

    import java.sql.*;
      import static java.lang.System.out;
    
      public class ConnectionDemo {
          public static void main(String[] args)
              throws ClassNotFoundException,SQLException{
              Class.forName("com.mysql.jdbc.Driver");
              String jdbcUrl = "jdbc:mysql://localhost:3306/demo";
              String user = "root";
              String passwd = "openhome";
              try(Connection conn = DriverManager.getConnection(jdbcUrl,user,passwd)){
                  out.printf("已%s數據庫連機%n",conn.isClosed()?"關閉":"開啓");
              }
          }
      }
  • 解決:Connection使用嘗試自動關閉資源語法,因此執行完try區塊後,Connection的close()就會被調用...

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

教材中代碼調試有問題先去https://shimo.im/doc/1i1gldfsojIFH8Ip/看看,若是別人沒有提出相同問題,能夠編輯文檔添加,而後把本身提出的問題複製到下面:

  • 本週無明顯代碼問題。基本細節性問題已解決。

代碼託管

上週考試錯題總結

  • Linux中使用cp命令拷貝目錄時要加上(-r,-R)選項。我的理解:要成功複製目錄須要加上 -r 或者 -R 參數,表示遞歸複製。看書不夠認真。
  • 正則表達式 zo* 匹配()z,zo,zoo,zoooooo。我的理解: * 能夠是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

  • 參考示例

點評過的同窗博客和代碼

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

  • 本週咱們學習了Java學習筆記的最後三章,很驚訝本身能在短短九周的時間內學習完這本六百多頁,十八章的教材,雖然學的馬馬虎虎並不能變成一個java大神,相信本身能在接下來的時間有效利用本身學習到的內容。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 3000行 20篇 400小時
第一週 200/200 1/1 18/18
第二週 153/353 1/2 18/36
第三週 356/709 1/3 24/60
第四周 450/1259 1/4 28/85
第五週 479/1738 1/5 30/115
第六週 700/2438 1/6 30/145
第七週 450/2888 2/8 31/176
第八週 332/3220 1/9 32/208
第九周 662/3882 2/11 38/246

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

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

  • 計劃學習時間:40小時

  • 實際學習時間:38小時

  • 改進狀況:本週由於有實驗二,計劃比上週學習時間提升,學習時間有所提升。

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

參考資料

相關文章
相關標籤/搜索