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對象,可使用Connection
的createStatement()
來創建Statement
對象。
- 會返回true或false表示是否有下一筆數據,接着可使用getxxx()來取得數據。
- 使用
Connection,Statement
或ResultSet
時,關閉釋放相關資源。
SQL語句當中某些的參數會有所不一樣,可使用java.sql.PreparedStatement
java
- 第十六週整合數據庫,第十七章反射與類加載器,第十八章自定義泛型、枚舉與註釋。
在本週學習中,最大的難點就是整合數據庫的學習,由於整合數據庫對我來講是一個很陌生的學習內容,尤爲是還須要我安裝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程序發送數據)
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
結對及互評
評分標準
- 正確使用Markdown語法(加1分):
- 不使用Markdown不加分
- 有語法錯誤的不加分(連接打不開,表格不對,列表不正確...)
- 排版混亂的不加分
- 模板中的要素齊全(加1分)
- 缺乏「教材學習中的問題和解決過程」的不加分
- 缺乏「代碼調試中的問題和解決過程」的不加分
- 代碼託管不能打開的不加分
- 缺乏「結對及互評」的不能打開的不加分
- 缺乏「上週考試錯題總結」的不能加分
- 缺乏「進度條」的不能加分
- 缺乏「參考資料」的不能加分
教材學習中的問題和解決過程, 一個問題加1分sql
代碼調試中的問題和解決過程, 一個問題加1分數據庫
- 本週有效代碼超過300分行的(加2分)
- 其餘加分:
- 週五前發博客的加1分
- 感想,體會不假大空的加1分
- 排版精美的加一分
- 進度條中記錄學習時間與改進狀況的加1分
- 有動手寫新代碼的加1分
- 課後選擇題有驗證的加1分
- 代碼Commit Message規範的加1分
- 錯題學習深刻的加1分
- 點評認真,能指出博客和代碼中的問題的加1分
- 結對學習狀況真實可信的加1分
- 扣分:
- 有抄襲的扣至0分
- 代碼做弊的扣至0分
- 遲交做業的扣至0分
點評模板:
結對及互評
點評過的同窗博客和代碼
其餘(感悟、思考等,可選)
這周學習效率通常般,有待提升。不熟悉地方後面花些時間多看看。
學習進度條
目標 |
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小時
改進狀況:
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)
參考資料