20165228 2017-2018-2 《Java程序設計》第7周學習總結

20165228 2017-2018-2 《Java程序設計》第7周學習總結

教材學習內容總結

  • MySQL數據庫管理系統安裝和初始化
  • 使用MySQL創建鏈接和數據庫、表
  • 使用JDBC:(1)與一個數據庫創建鏈接。
    (2)向數據庫發送SQL語句。
    (3)處理數據庫返回的結果。
  • 應用程序負責加載的JDBC-MySQL數據庫驅動,代碼以下:
try{  Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e){}
  • 應用程序要和MySQL數據庫服務器管理的數據庫students(在11.3節創建的數據庫)創建鏈接
  • 使用Connection getConnection(java.lang.String) 方法創建鏈接的代碼以下:
Connection con;
String uri = 
"jdbc:mysql://192.168.100.1:3306/students?user=root&password=&useSSL=true";
try{
     con = DriverManager.getConnection(uri); //鏈接代碼
   }
catch(SQLException e){
      System.out.println(e);
}
  • 使用Connection getConnection(java.lang.String, java.lang.String, java.lang.String)方法創建鏈接的代碼以下:
Connection con;
String uri = "jdbc:mysql:// 192.168.100.1:3306/students? useSSL=true";
String user ="root";
String password ="";
try{  
      con = DriverManager.getConnection(uri,user,password); //鏈接代碼
   }
catch(SQLException e){
      System.out.println(e);
}
  • 若是數據庫的表中的記錄有漢字,那麼在創建鏈接時須要額外多傳遞一個參數characterEncoding,並取值gb2312或utf-8
String uri = 
"jdbc:mysql://localhost/students?useSSL=true&characterEncoding=utf-8";
 con = DriverManager.getConnection(uri, "root","");  //鏈接代碼
  • 查詢操做:
    一、獲得SQL查詢語句對象
try{  Statement sql=con.createStatement();
}
catch(SQLException e ){}

二、這個對象就能夠調用相應的方法實現對數據庫中表的查詢和修改,並將查詢結果存放在一個ResultSet類聲明的對象html

ResultSet rs = sql.executeQuery("SELECT * FROM students");

也就是說SQL查詢語句對數據庫的查詢操做將返回一個ResultSet對象,ResultSet對象是按「列」(字段)組織的數據行構成。java

  • 關閉鏈接:
    ResultSet對象和數據庫鏈接對象(Connection對象)實現了緊密的綁定,一旦鏈接對象被關閉,ResultSet對象中的數據馬上消失。這就意味着,應用程序在使用ResultSet對象中的數據時,就必須始終保持和數據庫的鏈接,直到應用程序將ResultSet對象中的數據查看完畢
con.close();

此後,程序將沒法獲取ResultSet對象中的數據mysql

  • 順序查詢:
    指ResultSet對象一次只能看到一個數據行,使用next()方法移到下一個數據行,next()方法最初的查詢位置,即遊標位置,位於第一行的前面。next()方法向下(向後、數據行號大的方向)移動遊標,移動成功返回true,不然返回false
  • 使用下述方法得到一個Statement對象,從而獲得一個可滾動的結果集
Statement stmt = con.createStatement(int type ,int concurrency);
  • 條件和排序查詢:
    1. where子語句
    通常格式:git

    select 字段 from 表名 where 條件
    2. 排序
      用order by子語句對記錄排序
    select * from mess where name like '%林%' order by name
  • 更新操做
update  表 set 字段 = 新值 where <條件子句>
  • 添加操做
insert into 表(字段列表) values (對應的具體的記錄)
或
insert into 表 values (對應的具體的記錄)
  • 刪除操做
delete from  表名 where <條件子句>
  • 使用預處理語句和通配符
  • 通用查詢:
    編寫一個類,只要用戶將數據庫名、SQL語句傳遞給該類對象,那麼該對象就用一個二維數組返回查詢的記錄。
  • 事務:
    事務由一組SQL語句組成,所謂事務處理是指:應用程序保證事務中的SQL語句要麼所有都執行,要麼一個都不執行
  • JDBC事務處理步驟:
    1.用setAutoCommit(booean b)方法關閉自動提交模式
    2.用commit()方法處理事務
    3.用rollback()方法處理事務失敗正則表達式

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

  • 問題1:教材中提到「JDBC操做不一樣的數據庫僅僅是鏈接方式上的差別而已」,鏈接方式有什麼差別呢?
  • 問題1解決方案:參考JDBC各類數據庫鏈接方式sql

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

  • 問題1:在按照配套PPT使用windows安裝MySqlt初始data時出錯
    數據庫

  • 問題1解決方案:進入C:/windows/system32 ,找到cmd,經過管理員身份運行cmd,在mysql目錄的bin子目錄下輸入mysqld --initialize-insecure能夠初始化成功windows

    代碼託管

(statistics.sh腳本的運行結果截圖)數組

上週考試錯題總結

  • 錯題1:
    下列關於HashMap 泛型類經常使用方法的介紹,正確的是 ACD
    A.public boolean isEmpty()若是此映射不包含鍵-值映射關係,則返回 true。
    B.public V get(Object key)返回指定鍵所映射的值;若是此映射不包含該鍵的映射關係,則拋出異常。
    C.public V put(K key, V value) 在此映射中關聯指定值與指定鍵。若是該映射之前包含了一個該鍵的映射關係,則以先定義的值爲準。
    D.public Object clone()返回此 HashMap 實例的淺表副本:並不複製鍵和值自己。
  • 解析:查詢API。B項:若是此映射不包含該鍵的映射關係,則返回null。C項:若是該映射之前包含了一個該鍵的映射關係,則舊值被替換。
  • 錯題2:
    下列關於TreeSet 泛型類經常使用方法的介紹,正確的是 BCD
    A.public boolean contains(Object o) 若是此 set 包含指定的元素,則返回 true。若是指定對象沒法與該 set 中的當前元素進行比較,或不包含,則返回false。
    B.public boolean add(E e)將指定的元素添加到此 set。若是此 set 已經包含這樣的元素,則該調用不改變此 set 並返回 false。
    C.public boolean addAll(Collection<? extends E> c)將指定 collection 中的全部元素添加到此 set 中。若是此 set 因爲調用而發生更改,則返回 true。
    D.public E lower(E e) 返回此 set 中嚴格小於給定元素的最大元素;若是不存在這樣的元素,則返回 null。
  • 解析:A項:若是指定對象沒法與該 set 中的當前元素進行比較,則拋出ClassCastException異常。查詢API。B項:若是此映射不包含該鍵的映射關係,則返回null。C項:若是該映射之前包含了一個該鍵的映射關係,則舊值被替換。
  • 錯題3:
    String類中的length()方法用來獲取一個String對象的字符序列的長度,單位爲字節。 B
    A.true
    B.false
  • 解析:長度等於字符串中 Unicode 代碼單元的數量。
  • 錯題4:
    public boolean startsWith(String prefix)方法,若是參數是空字符串,則拋出異常。 B
    A.true
    B.false
  • 解析:返回的結果是true
  • 錯題5:
    下列關於public int compareTo(String anotherString)的說法,正確的是 ACDE
    A.按字典順序比較兩個字符串。該比較基於字符串中各個字符的 Unicode值。
    B.若是按字典順序此 String 對象位於參數字符串以前,則比較結果爲一個正整數。
    C.若是它們在一個或多個索引位置上的字符不一樣,假設 k 是這類索引的最小值,compareTo 返回這兩個字符串在位置 k 處兩個char 值的差,即值:this.charAt(k)-anotherString.charAt(k)
    D.若是沒有字符不一樣的索引位置,則較短字符串的字典順序在較長字符串以前。在這種狀況下,compareTo 返回這兩個字符串長度的差
    E.compareTo 只在方法 equals(Object) 返回 true 時才返回 0。
  • 解析:查詢API。B項:返回一個負整數。
  • 錯題6:
    下列關於substring方法的說法,正確的是 ACD
    A.public String substring(int beginIndex)返回的子字符串從指定索引處的字符開始,直到此字符串末尾。
    B.public String substring(int beginIndex, int endIndex) 子字符串從指定的 beginIndex 處開始,直到索引 endIndex處的字符。
    C."emptiness".substring(9)返回值爲""。
    D."smiles".substring(1, 5)返回值爲"mile"。
    E.若beginIndex 大於 endIndex,則substring(int beginIndex, int endIndex)返回-1。
  • 解析:查詢API。B項:直到索引 endIndex - 1 處的字符。E項:拋出IndexOutOfBoundsException異常
  • 錯題7:
    下列說法錯誤的是 D
    A.java.util包中的Data類重寫了toString()方法。
    B.Arrays和Point都繼承了toString方法。
    C.調用x.toString()方法的地方能夠用""+x代替。
    D.定義int[] Numbers = {1, 2, 3}; String s1 = ""+Numbers;,則System.out.println(s1);調用了toString方法,能夠將數組輸出。
  • 解析:D項:若想打印數組,數組必須調用靜態方法Arrays.toString,也就是將以上程序中的String s1 = ""+Numbers;改成String s1 = Arrays.toString(Numbers);。若是要打印多維數組,則須要調用Arrays.deepToString方法。
  • 錯題8:
    下列關於字符串與字符數組、字節數組的說法,正確的是 ACD
    A.getChars (int srcBegin, int srcEnd, char[] dst, int dstBegin)方法的返回值爲空。
    B.srcEnd是字符串中要複製的最後一個字符的索引。
    C.srcBegin 大於 srcEnd時,會拋出IndexOutOfBoundsException異常。
    D.要複製到 dst 子數組的字符從索引 dstBegin 處開始,並結束於索引dstbegin + (srcEnd-srcBegin) - 1
  • 解析:查詢API。B項:srcEnd是字符串中要複製的最後一個字符以後的索引。
  • 錯題9:
    下列關於正則表達式的說法,正確的是 ABDE
    A.\ba\w*\b匹配以字母a開頭的單詞
    B.\d+匹配1個或更多連續的數字。
    C.\b\w{6}\b 匹配6個及以上字符的單詞。
    D.[0-9]表明的含意與\d就是徹底一致的:一位數字
    E.\S+匹配不包含空白符的字符串。
    F.(\d{1,3}.){3}\d{1,3}用來匹配 IP地址。
  • 解析:C項:\b\w{6}\b 匹配恰好6個字符的單詞。F項: IP地址中每一個數字都不能大於255,該表達式忽略了這個約束條件。正確的是((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。服務器

    結對及互評

  • 博客中值得學習的或問題:
    要素全面
    很認真細緻
    排版簡介美觀
  • 代碼中值得學習的或問題:
    代碼中文件分類簡潔
    很認真

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

本週學習瞭如何安裝和使用MySQL數據庫管理系統,創建鏈接,關閉連接,以及查詢、添加、刪除等各類操做

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 25篇 400小時
第一週 235/235 1/1 15/15
第二週 224/459 2/3 15/30
第三週 443/902 1/4 15/73
第四周 577/1479 2/6 17/90
第五週 1222/2360 1/7 14/104
第六週 1527/3294 1/8 14/118
第七週 591/3883 1/9 14/132
  • 計劃學習時間:15小時
  • 實際學習時間:14小時
相關文章
相關標籤/搜索