1.JDBC簡介html
JDBC是用於執行SQL的解決方案,開發人員使用JDBC的標準接口,數據庫廠商則對接口進行操做,開發人員無須接觸底層數據庫驅動程序的差別性,數據庫自己是個獨立運行的應用程序,你撰寫的應用程序是利用通訊協議對數據庫進行指令交換,以進行數據的增刪查找。一般你的應用程序會利用一組專門與數據庫進行通訊協議的連接庫,以簡化與數據庫溝通時的程序撰寫。有時候,更換數據庫的需求並非沒有,應用程序跨平臺也是常常的需求,JDBC基本上就是用來解決這些問題的。JDBC是Java聯機數據庫的標準規範。具體而言,它定義了一組標準類與接口,應用程序須要聯機數據庫時調用這組標準API,而標準API中的接口由數據庫廠商操做,一般稱爲JDBC驅動程序。JDBC標準主要分爲兩個部分:JDBC應用程序開發者接口以及JDBC驅動程序開發者接口。java
2.鏈接數據庫git
爲了要鏈接數據庫系統,必需要有廠商操做的JDBC驅動程序,必須在CLASSPATH中設定驅動程序JAR文檔。正則表達式
3.使用Statement、ResultSetsql
Connection
是數據庫鏈接的表明對象,接下來要執行SQL的話,必須取得java.sql.Statement
操做對象,它是SQL描述的表明對象。Statement
的execute()
能夠用來執行SQL,並能夠測試SQL是執行查詢或更新,返回true
表示SQL執行將返回ResultSet
做爲查詢結果。視需求而定,Statement
或者ResultSet
在不使用時,可使用close()
將之關閉,以釋放相關資源。Statement
關閉時,所關聯的ResultSet
也會自動關閉。數據庫
4.使用PreparedStatement
、CallableStatement
數組
若是有些操做只是SQL語句當中某些參數會有所不一樣,其他的SQL子句皆相同,則可使用java.sql.PreparedStatement
。可使用Connection
的PreparedStatement()
方法創建好預先編譯的SQL語句,當中參數會變更的部分,先指定「?」這個佔位字符。在JDBC裏要表示日期,是使用java.sql.Date
,其日期格式是「年、月、日」,要表示時間的話則是使用java.sql.Time
,其時間格式爲「時、分、秒」,若是要表示「時、分、秒、微秒」的格式,你可使用java.sql.Timestamp
。網絡
2、JDBC進階架構
1.使用ResultSet
捲動、更新數據ide
在ResultSet
時,默承認以使用next()
移動數據光標至下一筆數據,然後使用getXXX()
方法來取得數據。結果集類型能夠指定3種設定:ResultSet.TYPEFORWARDONLY
(默認)、ResultSet.TYPESCROLLINSENSITIVE
、ResultSet.TYPESCROLLSENSITIVE
。更新設定能夠有兩種指定:ResultSet.CONCURREADONLY
(默認)、ResultSet.CONCUR_UPDATABLE
。若是要使用ResultSet進行數據修改,則有些條件限制:必須選取單一表格、必須選取主鍵、必須選取全部NOT NULL的值。
2.批次更新
每一次執行executeUpdate
(),其實都會向數據庫發送一次SQL,若是大量更新的SQL有一萬筆,就等於經過網絡進行了一萬次的信息傳送,網絡傳送信息實際上必須打開I/O、進行路由等動做。因此最好就是全部收集的SQL,最後會串爲一句SQL,而後傳送給數據庫,既然是批次更新,顧名思義,就是僅用在更新上,因此批次更新的限制是,SQL不能是SELECT,不然會拋出異常。
3.Blob與Clob
若是要將文檔寫入數據庫,能夠在數據庫表格字段上使用BLOB或CLOB數據類型,BLOB用於存儲大量二進制數據,像是圖檔、影音檔等,CLOB用於存儲大量的文字數據。
4.交易簡介
交易的四個基本要求是原子性、一致性、隔離行爲與持續性。當多個交易並行時,可能引起的數據不一致問題有哪些呢?(1)更新遺失:基本上就是指某個交易對字段進行更新的信息,因另外一個交易的介入而遺失更新效力。(2)髒讀:兩個交易同時進行時,其中一個交易更新數據但未確認,另外一個交易就讀取數據,就有可能發生髒讀問題。(3)沒法重複的讀取:某個交易兩次讀取同一字段的數據並不一致。(4)幻讀:同一交易期間,讀取到的數據筆數不一致。
5.metadata簡介
Metadata即「詮讀數據的數據」,數據庫是用來存儲數據的地方,然而數據庫自己產品名稱爲什麼?數據庫中有幾個數據表格?表格名稱爲什麼?表格中有幾個字段等?這些都是metadata
。
6.RowSet簡介
JDBC定義了java.sql.RowSet
接口,用以表明數據的列集合,這裏的數據並不必定是數據庫中的數據,能夠是電子表格數據、XML數據或任何具備列集合概念的數據源。RowSet
定義了列集合基本行爲,其下有JdbcRowSet
、CachedRowSet
、FilteredRowSet
、JoinRowSet
,WebRowSet
五個標準列集合子接口。JdbcRowSet
是聯機式的RowSet
,也就是操做JdbcRowSet
期間,會保持與數據庫的聯機,可視爲取得、操做ResultSet
的行爲封裝,可簡化JDBC程序的撰寫,或做爲JavaBean
使用。CachedRowSet
爲脫機式的RowSet
,在查詢並填充完數據後,就會斷開與數據源的聯機,而不用佔據相關聯機資源,必要時也能夠再與數據源聯機進行數據同步。
P509的代碼
Connection使用嘗試自動關閉資源語法,因此執行完try區塊後,Connection的close()就會被調用。
A . 不匹配
B . 'Hello'
C . "World"
D . 'Hello',"World"
解釋:反向引用 \1 表明第一個()中的匹配內容
2.正則表達式 zo* 匹配(ABCD)
:
A . z
B . zo
C . zoo
D . zooooooooooooooooooooooooo
解析:* 能夠是0次
3.Suppose we have an array of String objects identified by the variable names. Which of the following for loops will not correctly process each element in the array.(假如咱們有一個名爲names的String對象數組,下面哪一個for循環不能遍歷數組中的每個元素?)
:(C)
A .
for(int i = 0; i < names.length; i++)
B .
for(String name : names)
C .
for(int i = 0; i < names.length(); i++)
D .
none of these will correctly process each element(以上都不能遍歷)
E .
all of these will correctly process each element(以上都能遍歷)
解析:因爲語法錯誤,選擇c不能正確處理每一個元素。長度變量不是方法,所以在它以後沒有圓括號。選擇b是使用foreach循環處理數組的示例,而且選擇a是循環的正確。
4.正則表達式「r.t」匹配字符串「rat」的Java 代碼表達式是(D)
A .
"rat".matcher("r.t")
B .
"r.t".matcher("rat")
C .
Pattern.compile("rat").matcher("r.t")
D .
Pattern.compile("r.t").matcher("rat")
5.Which of the statements is true about the following code snippet?(對於下面的代碼段,說法正確的是?)(D)
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. (代碼會產生運行時錯誤)
解析:此代碼將拋出一個對象的大小時拋出,由於這個數組中最後一個指數是24。這會致使運行時錯誤。
註冊Driver的操做對象
操做Driver
接口的對象是JDBC進行數據庫存取的起點。Connection
接口的操做對象是數據庫聯機表明對象,要取得Connection操做對象,能夠經過DriverManager的getConnection()
:Connection conn = DriverManager.getConnection(jdbcUrl, username, passwd);
除了基本的用戶名稱、密碼以外,還必須提供JDBC URL
,其定義了鏈接數據庫時的協議、自協議、數據源識別。
主機名能夠市本機或其餘聯機主機名、地址,MySQL
端口默認爲3306。
取得Connection
對象以後,可使用isClosed()
方法測試與數據庫的連接是否關閉。
在操做完數據庫以後,若肯定再也不須要鏈接,則必須使用close()
來關閉與數據庫的鏈接,以釋放鏈接時相關的必要資源,像是聯機相關對象、受權資源等。
我知道第16章、第17章和第18章跟以前同樣,仍是介紹一些類的應用,因而我採起和以前同樣的辦法,一邊看書,一邊總結,看書上總共介紹了多少種API,每一種API的架構是什麼,每一種API的做用與注意事項是什麼。就這樣有系統的去學習,感受效率十分高!並且頭腦思緒清晰。婁老師課上強調了數據庫這一章節內容的重要性,由於這部分知識與咱們大三要學習的內容息息相關,因而我刻意的在16章花更多的時間,更仔細的敲代碼,發現問題。其實這些知識不是難,咱們只是感到陌生而已。同窗們有了畏難情緒和厭學情緒,固然就學不進去了,還談什麼效率!這三章的知識不像以前的對象、封裝、繼承、多態那些概念那麼抽象難懂,都是活生生的具體的例子,接受起來其實也挺快的。婁老師說的很對,重要的不是要你學多少java知識,而是經過不斷的學習過程,來總結出一套適合本身的良好的學習方法,這將受用一輩子。
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 10/10 | 1/1 | 10/10 | |
第二週 | 100/100 | 2/2 | 19/25 | |
第三週 | 200/278 | 1/3 | 10/26 | |
第四周 | 660/938 | 1/4 | 10/36 | |
第五週 | 1100/2100 | 1/5 | 18/54 | |
第六週 | 740/2840 | 1/6 | 23/77 | |
第七週 | 352/3192 | 2/8 | 20/97 | |
第八週 | 631/3805 | 1/9 | 20/117 | |
第九周 | 2/11 | 20/137 |
計劃學習時間:30小時
實際學習時間:20小時
改進狀況:這周又作了實驗,感受本身對IDEA的理解比之前深刻了,好比一些小插件像junit這些能夠輔助咱們實現更高水平的代碼。
無0.0