Java 第十四周總結
第十四周的做業。
java
目錄
1.本章學習總結
2.Java Q&A
3.碼雲上代碼提交記錄及PTA實驗總結
4.課後閱讀mysql
1.本章學習總結
以你喜歡的方式(思惟導圖或其餘)概括總結數據庫相關內容。
- JDBC API使程序員能夠經過這個API接口鏈接到數據庫,並使用SQL完成對數據庫的查找與更新。
- 根據API編寫的程序均可以與驅動管理器進行通訊,而驅動管理器則經過驅動程序與實際的數據庫進行通訊。
總之,JDBC最終是爲了實現如下目標:
1.經過使用標準的SQL語句,甚至是專門的SQL擴展,程序員就能夠利用Java語言開發訪問數據庫的應用,同時還依舊遵照Java語言的相關約定。
2.數據庫供應商和數據庫工具開發商能夠提供底層的驅動程序。所以,他們能夠優化各自數據庫產品的驅動程序。程序員
- 每一個Connection對象均可以建立一個或多個Statement對象,同一個Statement對象能夠用於多個不相關的命令和查詢。可是,一個Statement對象最多隻能有一個打開的結果集。若是須要執行多個查詢操做,且須要同時分析查詢結果,那麼必須建立多個statement對象。
- 使用完Resultset、Statement或Connection對象後,應當即調用close方法,由於他們使用了資源,須要及時釋放。
- Java SE7之後,在Statement上調用了closeOnCompletion方法,在其全部結果集都被關閉以後,該語句也會當即被自動關閉。
- 沒有必要再每次開始一個查詢時都創建新的查詢語句,而是準備一個帶有宿主變量的查詢語句,每次查詢時只需爲該變量填入不一樣的字符串就能夠反覆屢次使用該語句。這樣就能夠改進查詢性能,由於每當數據庫執行一個查詢時,它老是首先經過計算來查詢策略,以便高效地執行查詢操做。
- 在SQL中,描述數據庫或其組成部分的數據稱爲元數據(MetaData)。
2.Java Q&A
1. MySQL數據庫基本操做
創建數據庫,將本身的姓名、學號做爲一條記錄插入。(截圖,需出現本身的學號、姓名),在本身創建的數據庫上執行常見SQL語句(截圖)
建立名爲test的數據庫,而且新建名爲student的表,字段分別爲id、名字、年齡和成績。而後使用desc來顯示錶的結構,desc不能用於數據庫。sql
在後面追加一個名爲num的字段,表示學號,再將name字段放在num字段的後面。數據庫
將score改爲double類型,而後連續插入三條記錄,最後把本身的記錄給刪掉。數組
最後刪除整個數據庫,而後就用不了了。工具
2. 使用JDBC鏈接數據庫與Statement
2.1 使用Statement操做數據庫。(粘貼一段你認爲比較有價值的代碼,出現學號)
- 得到鏈接的同時也要指定用戶名和密碼,不然會拋出SQLException:Access denied for user ''@'localhost' (using password: NO)即沒有密碼沒法鏈接。
- 不能重複建立表,可是若是隻是單純使用create命令,就須要每次運行前還要把相應的數據庫刪掉,實在是太麻煩了,因此加上IF NOT EXISTS語句來解決這個問題。
- 鏈接的關閉放在finally塊中更好。
2.2 使用JDBC操做數據庫主要包含哪幾個步驟?
- 將所使用的數據庫的驅動程序的JAR文件包括到類路徑中去。這樣能夠自動註冊驅動器類。
- 使用主機名、端口號和數據庫名,這邊還有用戶名和密碼鏈接數據庫。
- 進行查詢準備,而後執行查詢或者更新。
- 處理結果。
- 關閉查詢和鏈接。
3. PreparedStatement與參數化查詢
3.1 使用PreparedStatement根據用戶指定的查詢條件進行查詢。(粘貼一段你認爲比較有價值的代碼,出現學號)
3.2 批量更新-批量插入1000個學生,統計整個操做所消耗的時間。(使用方法executeBatch)
4. JDBCUtil與DAO
4.1 粘貼一段你認爲比較有價值的代碼,出現學號
老師的就很好:
性能
4.2 使用DAO模式訪問數據庫有什麼好處?
數據訪問對象模式(Data Access Object Pattern)或 DAO 模式用於把低級的數據訪問 API 或操做從高級的業務服務中分離出來。如下是數據訪問對象模式的參與者。單元測試
- 數據訪問對象接口(Data Access Object Interface) - 該接口定義了在一個模型對象上要執行的標準操做。
- 數據訪問對象實體類(Data Access Object concrete class) - 該類實現了上述的接口。該類負責從數據源獲取數據,數據源能夠是數據庫,也能夠是 xml,或者是其餘的存儲機制。
- 模型對象/數值對象(Model Object/Value Object) - 該對象是簡單的 POJO,包含了 get/set 方法來存儲經過使用 DAO 類檢索到的數據。
使用DAO的好處就是能夠分離應用中不用相互瞭解的兩個部分,即不須要知道對方的具體信息,例如業務對象只應該關注業務邏輯,不該該關心數據存取的細節。存儲數據的細節在應用程序當中都是隱藏的,只要接口仍是正常工做的,那麼即便底層的實現發生了改變,那麼DAO的用戶也不會出現任何問題。DAO就像防護應用程序和數據庫的中介,數據在對象和數據庫的記錄中移動。還有就是進行分離能夠更容易進行單元測試。學習
DAO層使應用程序更加容易地遷移到一個不一樣的數據庫實現。業務對象不瞭解低層數據實現。於是,該遷移只涉及對DAO層的變化。更進一步說,若是使用工廠策略,則有可能爲每個低層存儲實現提供一個具體工廠實現。在這種狀況下,遷移到不一樣的遷移實現意味着給應用程序提供一個新的工廠實現。同時,抽象DAO工廠能夠指定須要建立的實例DAO,並交由不一樣的具體DAO工廠去建立。
5. 使用數據庫改造購物車系統
5.1 使用數據庫改造之前的購物車系統(應有圖形界面)。若是之前爲完成購物車系統,可編寫基於數據庫的學生管理系統。包括對學生的增刪改查,要求使用。
修改了一下全部商品的構造器。
運行界面和以前依然同樣,沒有差。
5.2 相比較使用文件,使用數據庫存儲與管理數據有何不同?
能夠直接和數據庫進行交互,而文件須要先把數據讀出來,而後用數組或者是列表來存放,數據庫的操做會更加方便。
6. 批量更新測試
數據庫課程上,須要測試索引對查找的加速做用。然而在幾百或幾千的數據量上進行操做沒法直觀地體驗到索引的加速做用。現但願編寫一個程序,批量插入1000萬條數據,且該數據中的某些字段的內容能夠隨機生成。
6.1 截圖你的代碼(出現學號)、統計運行時間
就10w,1kw跑不出來:
6.2 計算插入的速度到底有多快?(以條/秒、KB/秒兩種方式計算)
7. 事務處理
7.1 使用代碼與運行結果證實你確實實現了事務處理功能。(粘貼一段你認爲比較有價值的代碼,出現學號)
正常的是這樣的:
而後我把數據刪了,來個會出錯的語句:
增長和查詢共同組成一個事務,而後由於查詢出現了異常。因此並無任何數據
7.2 你以爲何時須要使用事務處理?
一組語句構建成一個事務。當全部語句都順利執行以後,事務能夠被提交。不然,若是其中某個語句遇到錯誤,那麼事務將被回滾,就好像沒有任何語句被執行同樣。
若是要確保數據庫完整性(database integrity),就要使用事務。舉個最淺顯的例子,好比轉錢,把錢取出來,正要存入其餘帳號的時候,系統GG了,那麼就須要撤銷取款操做。
若是把語句組合成一個事務,那麼事務要麼成功執行全部操做並提交,要麼在中間失敗了,而後就回滾,就是自動撤銷以前所作的更新操做以及其產生的影響。
在事務處理的時候,自動提交模式須要被關閉:'con.setAutoCommit(false);'。若是出現錯誤,就用rollback()方法,那麼就會回滾到最開始。
固然Java提供 了保存點來更細粒度地控制回滾操做。若是一個點被保存,那麼待會出錯的時候就能夠回滾到這個點,而不是事務的一開始。
還有,批量更新也是事務處理的常見方法,整個語句序列做爲一批操做一批操做整個提交上去。
咱們能夠批量地插入、更新或者是刪除,也能夠批量建立表、批量刪除表。可是,批量處理中添加選擇語句的時候就會拋出異常,由於批量處理的選擇語句沒有意義,選擇語句會返回結果集,而不是更新數據庫。
3.碼雲上代碼提交記錄
3.1 碼雲代碼提交記錄
在碼雲的項目中,依次選擇「統計-Commits歷史-設置時間段」, 而後搜索並截圖
4. 課外閱讀
4.1 JDBC(TM) Database Access
Lesson: JDBC Introduction
JDBC API能夠用來訪問任何表格數據,甚至是放在關係型數據庫中的數據。
JDBC可使咱們的Java程序:
- 鏈接到一個數據源,好比數據庫。DriverManager鏈接到數據庫的驅動而且登進去。
- 給數據庫發送查詢和更新語句。Statement發送這類的SQL語句。
- 數據庫根據咱們的查詢提供相應的數據,咱們能夠處理這些數據。ResultSet取回查詢的結果,而且能夠放在while循環中,獲得全部符合條件的結果。
JDBC包含四個東西:
- JDBC API
- JDBC驅動管理器
- JDBC測試套件
- JDBC-ODBC套件
根據API編寫的程序均可以與驅動管理器進行通訊,而驅動管理器則經過驅動程序與實際數據庫進行通訊。
關係型數據庫概覽
數據庫是用來存放信息的一種方式。用最簡單的話說,關係型數據庫就是用行列組成的表現信息的表格。一個表格是用來存放具備相同類型的對象的集合。根據常見的關係,表格中的數據能夠相互聯繫,關係型數據庫的基礎就是可以從表格最後那個取出相關的數據。DBMS處理存放、維護、取出數據的方式。RDBMS就是關係型數據庫中的DBMS。
4.2 代碼結構中Dao,Service,Controller,Util,Model是什麼意思,爲何劃分
【修真院「善良」系列之十六】代碼結構中Dao,Service,Controller,Util,Model是什麼意思,爲何劃分
爲了讓咱們的代碼寫出來不會是一坨的,讓代碼更容易閱讀,協做更容易進行,因此須要一些分類來肢解整個代碼結構。
- Model:用來抽象數據,Model的實例做爲純數據的集合,做爲一個整個的載體在程序中被組裝而且操做,即「業務邏輯映射成數據模型」。
- Util:用來描述和業務邏輯沒有關係的數據處理。Util這個工具類是公用的,與私有方法相區別,私有方法是專門針對數據在某種特定場景下使用的方法。Util通常有明確的輸入和明確的輸出,更適合用於單元測試。
- Service:望文生義,就是服務,提供服務。比Util的概念大,包括一系列的數據處理,或者Util,或者別的服務
- Dao:負責對數據庫的增刪改查(CRUD),並且只負責這些東西,數據怎麼來,去幹嘛都無論。通常會提供一個接口,而後能夠用不一樣的容器來存放這些數據,能夠是數組、列表或者是數據庫,固然對於大型的應用,前面兩種應該是用不上的。
- Controller:控制者,負責總的調度,發出命令,給各分類提供明確的任務。
下面我都看不懂了。
4.3 mysq數據庫管理工具navicat基本使用方法
其餘的操做就都差很少了,挺好用的,就是隻能試用14天。