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

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

教材學習內容總結

整合數據庫:

JDBC驅動程序,按照方式分4種類型:php

  • Type1 : JDBC-ODBC Bridge Driver
  • Type2 : Native API Driver
  • Type3 : JDBC-Net Driver
  • Type4 : Native Protocol Driverhtml

  • Connection是數據庫聯機的表明對象。
  • Connection是數據庫鏈接的表明對象,執行SQL的話,必須取得java.sql.Statement對象,可使用ConnectioncreateStatement()來創建Statement對象。
  • 會返回true或false表示是否有下一筆數據,接着可使用getxxx()來取得數據。
  • 使用Connection,StatementResultSet時,關閉釋放相關資源。
  • SQL語句當中某些的參數會有所不一樣,可使用java.sql.PreparedStatementjava

  • 第十六週整合數據庫,第十七章反射與類加載器,第十八章自定義泛型、枚舉與註釋。
  • 在本週學習中,最大的難點就是整合數據庫的學習,由於整合數據庫對我來講是一個很陌生的學習內容,尤爲是還須要我安裝SQL數據庫的一系列程序,xampp的安裝和配置方面卻是還能夠解決,可是涉及到網站方面的phpmyadmin更是讓我不知道怎麼辦,最後只能經過命令行的方式來完成第十六週的學習和代碼測試。mysql

  • 數據庫自己是個獨立運行的應用程序
  • 撰寫應用程序是利用通訊協議對數據庫進行指令交換,以進行數據的增刪查找
  • JDBC(Java DataBase Connectivity)是Java聯機數據庫的標準規範
  • 定義一組標準類與接口,應用程序須要聯機數據庫時調用這組標準API,標準API中接口會由數據庫廠商操做,稱爲JDBC驅動程序
  • 依操做方式可將驅動程序分爲四種類型:JDBC-ODBC Bridge Driver;Native API Driver;JDBC-Net Driver;Native Protocol Driver
  • Connection接口的操做對象是數據庫聯機表明對象,要取得Connection操做對象,能夠經過DriverManager的getConnection(),除了基本的用戶名稱、密碼以外,還必須提供JDBC URL,其定義了鏈接數據庫時的協議、子協議、數據源識別取得Connection對象以後,可使用isClosed()方法測試與數據庫鏈接是否關閉。在操做完以後,若肯定再也不須要鏈接,則必須使用close()來關閉與數據庫的鏈接,以釋放連接是相關的必要資源。
  • 鏈接數據庫,必需要有廠商操做的JDBC驅動程序,必須在CLASSPATH中設定驅動程序JAR文檔
  • 要取得數據庫聯機,必須的幾個動做
  • 註冊Driver操做對象
  • 取得Connection操做對象
  • 關閉Connection操做對象
  • 使用JDBC加載.class文件方法有四種:
  • (1)使用Class.forName()
  • (2)自行創建Driver操做接口類的實例(直接撰寫代碼java.sql.Driver driver = new com.mysql.jdbc.Driver())
  • (3)啓動JVM時指定jdbc.drivers屬性(執行java命令時java -Djdbc.drivers=com.mysql.jdbc.Driver;XXXDriver YourProgram)指定多個驅動程序類,用分號間隔
  • (4)設定JAR中/service/java.sql.Driver文檔
  • 取得Connection操做對象,「協議」在JDBC URL中老是jdbc開始,「子協議」是橋接的驅動程序、數據庫產品名稱或聯機機制,「數據源識別」標出數據庫的地址、端口號、名稱、用戶、密碼等信息
  • 使用Statement、ResultSet
  • 執行SQL,必須取得java.sql.Statement,使用Connection的createStatement()創建Statement對象
  • 取得Statement對象後,使用executeUpdate()(在表中插入一筆數據,返回int結果,表示數據變更的筆數)、executeQuery()(用於SELECT等查詢數據庫的SQL,返回java.sql.ResultSet對象,表明查詢結果,會是一筆一筆的數據),Statement或ResultSet不使用時,使用close()關掉,Statement關閉時,所關聯的ResultSet也會自動關閉
  • 日期時間在JDBC中,並非使用java.util.Date,這個對象可表明的日期時間格式是「年、月、日、分、秒、毫秒」,在JDBC中要表示日期,是使用java.sql.Date,其日期格式是「年、月、日」,要表示時間的話則是使用java.sql.Time,其格式時間爲」時、分、秒」,java.sql.Timestamp表示「時、分、秒、微秒」的格式。
  • 在ResultSet時,默承認以使用next()移動數據光標至下一筆數據,然後使用getXXX()方法來取得數據
  • 在數據光標移動的API上,可使用absolute()、afterLast()、beforeFirst()、first()、last()進行絕對位置移動,使用relative()、previous()、next()進行相對位置移動,移動成功返回true。
  • 可以使用isAfterLast()、isBeforeFirst()、isFrist()、isLast()判斷當前位置。
  • 使用addBatch()方法來收集SQL,並使用executeBatch()方法將所收集的SQL傳送出去
  • JDBC中提供了java.sql.Blob與java.sql.Clob兩個類分別表明BLOB與CLOB數據
  • 經過PreparedStatement的setBlob()來設定Blob對象,讀取數據時,能夠經過ResultSet的getBlob()取得Blob對象
  • 交易簡介:隔離行爲的支持上,JDBC能夠經過Connection的getTransactionIsolation()取得數據庫目前的隔離行爲設定,經過setTransactionIsolation()可提示數據庫設定指定的隔離行爲,可設定常數是定義在Connection上對交易不設定隔離行爲TRANSACTION_NONE。linux

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

  • 問題1:JDBC究竟是什麼?
  • 問題1解決方案:jdbc是 java數據庫鏈接(java DataBase Connectivity)技術的簡稱,由一組使用java語言編寫的類與接口組成,能夠爲多種關係數據庫提供統一訪問。
  • 問題2:eclipse軟件。鏈接SQL2008的時候con=DriverManager.getConnection("jdbc:odbc:testDataBase","sa","123");
    sql=con.createStatement();
    這樣鏈接是能夠鏈接的。
    而後
    con=DriverManager.getConnection("jdbc:sqlserver:"+
    "//localhost:1433;DatabaseName=testDatabase","sa","123");
    sql=con.createStatement();
    下面這種的時候就會出錯,出錯信息是:
    java.sql.SQLException: No suitable driver found for
    jdbc:sqlserver://localhost:1433;DatabaseName=testDatabase
    可是我在WebContent中的WEB-INF中的lib中我已經放了sqljdbc4.jar。
  • 問題2解決方案:
  • JDBC連接數據庫方式: 請把sqljdbc4.jar放在項目的存放jar包的文件夾下:右擊項目名--build path--configue path---add extend....差很少的路徑把jar導進去,不須要放在web-inf下。
    JNDI連接數據庫方式:除了上述操做之外,還要把sqljdbc4.jar放在tomcat文件下的lib文件夾中

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

  • 問題1:缺乏some類
  • 問題1解決方案:補充some類
  • 問題2:git

  • 問題2解決方案:第二個類中沒有buffer實例,並無引用第一個buffer實例,須要在第二個類中從新定義buffer類。

代碼託管

上週考試錯題總結

- Linux中使用rm刪除文件時,若是想忽略提示,直接刪除文件,可使用()選項強制刪除。
  • A .-r
  • B .-R
  • C .-c
  • D .-f
  • 正確答案: D
- Linux中使用cp命令拷貝目錄時要加上()選項。
  • A .-r
  • B .-directory
  • C .-all
  • D .-R
  • 正確答案: A D
- 正則表達式」(‘|」)(.*?)\1」匹配 「'Hello',"World」」的結果是()
  • A .不匹配
  • B .'Hello'
  • C ."World"
  • D .'Hello',"World"
  • 正確答案: B C
- 正則表達式 zo* 匹配()
  • A .z
  • B .zo
  • C .zoo
  • D .zooooooooooooooooooooooooooo
- 如下代碼,第五行和第七行設爲()結果只會出現兩條日誌信息:
  • 1 import java.util.logging.*;
  • 2 public class LoggerDemo {
  • 3 public static void main(String[] args) {
  • 4 Logger logger = Logger.getLogger(LoggerDemo2.class.getName());
  • 5 logger.setLevel(XXX);
  • 6 for(Handler handler : logger.getParent().getHandlers()) {
  • 7 handler.setLevel(XXX);
  • 8 }
  • 9 logger.log(Level.WARNING, "WARNING 訊息");
  • 10 logger.log(Level.INFO, "INFO 訊息");
  • 11 logger.log(Level.CONFIG, "CONFIG 訊息");
  • 12 logger.log(Level.FINE, "FINE 訊息");
  • 13 }
  • 14 }web

  • A .Level.FINE
  • B .Level.CONFIG
  • C .Level.INFO
  • D .Level.WARNING
  • 正確答案: C正則表達式

- It is possible to send in data to a Java program via the command-line.(能夠在命令行中給Java程序發送數據)
  • A .True
  • B .False
  • 正確答案: A
Which of the following array declarations are invalid? (下面哪一個數組聲明是不合法的)
  • A .int[] grades = new int[5];
  • B .int grades[] = new int[5];
  • C .int[] grades = { 91, 83, 42, 100, 77 };
  • D .all of the above are valid(以上三個都合法)
  • E .none of the above are valid(以上三個都不合法)
  • 正確答案: D
Which of the statements is true about the following code snippet?(對於下面的代碼段,說法正確的是?)
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. (代碼會產生運行時錯誤)
  • 正確答案: E

結對及互評

評分標準

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

  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小時
第4周 200/1000 1/9 20/20
第5周 300/1300 1/10 18/38
第6周 500/1800 1/11 22/70
第7周 200/2100 2/13 7/77
第8周 400/2700 1/14 7/77
第9周 900/3500 2/16 12/90     |

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

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

  • 計劃學習時間:11小時

  • 實際學習時間:12小時

  • 改進狀況:

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

參考資料

相關文章
相關標籤/搜索