1. 程式人生 > >java學習之路——第四十七---第五十一天

java學習之路——第四十七---第五十一天

前段時間,這個坑公司又把網給斷了,所以就一直沒發,今天把之前的都發一下吧,請允許我複製。。。。

12.27:連線池

一、資料庫連線池:

         為什麼要連線池技術?

                   傳統的連線,一次物理連線一次關閉連線資源,極度的消耗資源。連線池技術能很好的解決這個問題。

 

         開發中常用的連線池技術為:

                   DBCP

                   C3P0

連線池使用的規範和原則:

1.服務啟動時建立一定的初始化連線數。

2.當無連線可用或達到最小連線數的時候,按照指定的增量新增連線數

3.如何取判斷達到最小連線數:

         1、動態檢查:定時的去檢查連線數是否小於最小連線數,小於就會自行建立

         2、靜態檢查:當空閒連線不足的時候,系統才去檢測是否小於最小連線數

4.按需配置,超時釋放,用過的時候及時歸還。

 

二、PreparedStatement介面 繼承statement

         作用:提升java對資料的處理效率

因為statement使用的是靜態(每次操作sql語句都要進行編譯和執行)的處理方式,效率較低

 

PS工作原理:對sql語句進行預編譯,sql語句中的值全部用佔位符(?)替換,在執行sql語句之前設定各個佔位符的值用ps.setXXX。這樣sql語句就可以編譯一次執行多次,大大的提升了執行效率。

 

 

 

12.28:PS

一、PraparedStatement

作用:

1.提升效能

2.防止sql注入

3.批量處理資料

 

sql注入:在用Statement處理sql語句的時候,你傳入的引數值可能會改變sql語句的邏輯結構。例:password=’a’ or 1=1;導致任何一個都會正確,就會存在注入問題。

praparedStatement就能防止sql注入,因為在執行sql語句的時候不允許更改語句的邏輯結構       

 

二、ResultSetMataData:資料結果集的元資料

主要是針對ResultSet而言,從中獲取相關的元資料

 

三、可滾動結果集

         Statement  s = conn.createStatement(type,con)

 

 

12.29:事務

事務:保證資料庫資料操作的準確性的一種可靠機制

事務在操作的時候得看所使用的儲存引擎是否支援

mysql中我們預設使用的儲存引擎為Innobd支援事務,有些儲存引擎是不支援的

事務的特徵(ACID):

         1、原子性:事務必須是原子工作單元;對於其資料修改,要麼全都執行,要麼全都不執行。      

         2、一致性:事務在完成時,必須使所有的資料都保持一致狀態。

         3、隔離性:由併發事務所作的修改必須與任何其他併發事務所作的修改隔離。

         4、永續性:事務完成之後,它對於系統的影響是永久性的。

 

二、批量處理資料

         Statement和PreparedStatement都提供了批量處理資料的方法

批處理的思想:將多條sql語句新增到sql列表中去,然後一次處理或少次處理資料。

         addBatch(sql);Statement類提供的方法

         addBatch();PreparedStatement提供的方法

執行sql列表的語句方法:executeBatch();

 

案例:插入1000條資料

備註:批處理資料,如果資料過大可能會導致記憶體溢位的情況。

此時你可以分批次進行,不用一次處理

 

1.3  Sevlet Day01

一、servlet

         什麼是servlet:

                   一種擴充套件web功能的元件規範

                   元件規範:開發的程式符合一定規範,且部署在一定容器才能執行的程式模組

                   容器:提供執行環境的一個程式                            

下載安裝Tomcat:最好用的是Tomcat7.0

開發servlet步驟:

         1.建立一個web專案

         2.建立一個繼承HttpServlet類或者實現Servlet介面的類,重寫service方法

3.配置XML配置檔案

         一個標準的servlet,配置檔案中需要配置兩個標籤。

                  <servlet>

                            <servlet-name>隨便命名</servlet-name>

                            <servlet-class>servlet類的相對路徑(帶上包名)</servlet-class>

                  </servlet>

                  <servlet-mapping>

                   <servlet-name>要與上面的name一致</servlet-name>

                   <url-pattern>以斜槓/開頭的隨便名字,用於找到對應的類,訪問的類名其實就是這裡的名字</url-pattern>

                  <servlet-mapping>

4.將專案部署在Tomcat伺服器中

5.啟動Tomcat伺服器,訪問相關內容

 

在執行過程中可能會出現的幾個狀態碼:

         404:找不到路徑

         500:一般servlet程式碼寫錯

         405:一般很少見,是service方法的錯誤

         200:一切正常

 

二、HTTP協議

什麼是http協議?

         超文字傳輸協議,是由W3C制定的一種應用層協議,用來定義瀏覽器與web伺服器之間如何通訊以及通訊的資料格式

         如何通訊:

         瀏覽器傳送請求到伺服器,伺服器解析請求資料包執行相應的內容,然後伺服器將執行的結果響應給瀏覽器,瀏覽器解析響應包將結果顯示在頁面中。

         資料格式:

         請求資料包:

                   請求行:請求方式(get/post)+http協議版本號+請求資源路徑

                   訊息頭:一般自動生成

                   實體內容:只有post才有具體的值(引數資訊)

         響應資料包:

                   狀態行:http協議版本號+狀態碼

                   訊息頭:一般自動生成

                   實體內容:將伺服器處理的結果用頁面形式返回

 

1.4

一、Servlet中獲取請求引數值

         1.請求引數為一個值的時候:getParameter

         2.請求引數為多個值的時候:getParameterValues

 

二、Servlet中的請求方式

         get   post

         get提交方式的使用場景:

                   1.位址列直接輸入地址

                   2.超連結

                   3.表單中的預設提交方式

         get提交方式的特點:

         1.將請求資料新增在請求資源路徑後面,往往只能提交少量的資料,(往往不超過4kb),且只能提交文字。

         2.會將請求引數顯示在位址列後面,安全性不高!

 

         post提交方式的使用場景:

         1.修改表單中的method屬性

         post提交方式的特點:

         1.請求引數提交到實體內容中可以新增大量的引數,且格式沒有限制。

         2.不會將請求引數顯示在位址列後面,相對安全。

 

面試題:

get和post的區別:二個特點

 

 

 

三、頁面中的中文亂碼問題

         為什麼會有中文亂碼?

瀏覽器提交請求的時候會對請求資料進行編碼(編碼格式為:在表單中設定的字元編碼)

而web伺服器預設情況下使用ISO-8859-1進行解碼,當編碼和解碼格式不一致的時候就會導致亂碼。

         如何解決亂碼:

         讓編碼和解碼的字符集一樣即可。

post請求解決亂碼問題:

         第一步:查看錶單中的編碼格式

         第二步:在service方法中處理具體的業務邏輯前,將解碼格式設定為和表單中的編碼格式一致即可。

         方法:request.setCharacterEncoding(“text/html;charset=utf-8”);

在響應頁面的時候得告訴瀏覽器使用什麼資料型別和編碼格式對資料進行包裝。瀏覽器根據指定的資料型別和編碼格式作出解碼操作。

         方法:response.setContentType(“text/html;charset=utf-8”);

 

get請求解決亂碼問題:

         第一步:查看錶單中的編碼格式

         第二步:獲取相應的請求引數的值

通過String類中的建構函式String(byte[] bytes,Charset charset)

通過使用指定的charset解碼指定的byte陣列,構造一個新的String。