1. 程式人生 > >JDBC學習與模式應用[20181107]

JDBC學習與模式應用[20181107]

問題:1.下圖中的list<Master>ArrayList<Master>的意思

 

  1. 為什麼放在裡面?

 

筆記:學習和練習程式碼在day14

一、JDBC

-》概述:JDBCJava Data Base Connectivity,java資料庫連線)是一種用於執行SQL語句

Java API,可以為多種關係資料庫提供統一訪問,它由一組用Java語言編寫的類

和介面組成。JDBC提供了一種基準,據此可以構建更高階的工具和介面,

使資料庫開發人員能夠編寫資料庫應用程式,同時,JDBC也是個商標名

-》應用:JDBC

可做三件事:與資料庫建立連線、傳送 操作資料庫的語句並處理結果

 

-》說明:

DriverManager:管理各種不同的Jdbc驅動

Connection:負責連線資料庫並擔任傳送資料的任務

Statement:由Connection產生,負責執行sql語句

ResultSet:負責儲存Statement執行後所產生的查詢結果

 

二、JDBC的連線

-》匯入的包

點選專案名--Build Path--add Ex..

-》載入驅動

Class.forName("com.mysql.jdbc.Driver");

說明:通過Class.forName載入驅動的路徑 :

com.mysql.jdbc.Driver

  在新增驅動後,通過com.運算子得到

-》獲得資料庫的連結

建立Connection變數快捷鍵導包:Ctrl+Shift+O)

通過DriverManager.getConnection(url,name,pass)獲得Connection物件

報錯選擇報sql異常,如下圖:

 

說明:

URLjdbc:mysql://localhost:3306/資料庫名

-127.0.1.1代表的是本機

localhost:代表的是本機

3306:連線資料庫的介面

name:登入名

pass:登入名對應的密碼

三、對資料庫的操作

-》相關類的順序

載入驅動(Class.forname()

管理驅動(DriverManager

產生連線(Connection

命令(Statement

執行()

結果集(ResultSet

釋放資源

Next()使用方法

1、.next()方法的作用:指標指向下一條記錄,有記錄(有值)返回true並把記錄內容存入到對應的物件中,也就是obj.next()的obj中。如果沒有返回false。

2、.next()方法的應用:一般和ResultSet物件和while迴圈一起使用,去迭代結果集,並在迴圈中呼叫getXXX(intfieldIndex)/getXXX(String columnName)方法獲取欄位值。

 

-》資料庫的新增,修改,刪除

Class.forName("com.mysql.jdbc.Driver");--載入驅動

Connection conn=Class.forName("com.mysql.jdbc.Driver");--獲得連結物件

Statement stat=conn.createStatement();--獲得命令物件

String sql="";

int Line=statement.executeUpdate(sql_update);--執行獲得結果

說明:

更新:int ExecuteUpdateString SQL):

以執行插入、刪除、更新等操作,返回值int型別,是執行該操作所影響的行數。

 

-》資料庫的讀取;

-》結果集:ResultSet

Statement.executeQuery()===ResultSet物件

返回型別是:ResultSet

-ResultSet結果集的方法

next():返回的是Boolean型別 檢視下一行是不是資料(判斷結果集是否有元素)

獲得字串:getString()

獲得Int型別:getInt():

說明:獲取元素時:下標從1 開始

Private 加和不加的區別:

加了就是私有的能在這個類裡面使用,如果要在別的類裡面也可以使用的話就要寫屬性對應的getset方法,如下圖。

 

 

tostring方法

 

 

-》獲得結果集顯示的方法

登入:if(){}

遍歷:while();

四、PreparedStatement:預編譯命令

-》說明:

Statement :Sql注入式攻擊沒有進行優化處理,安全性較差

PreparedStatement繼承了Statement,在Statement的基礎上進行擴張,

對注入式的攻擊進行了很好的保護

-》解決方案:

PreparedStatement:預編譯命令

-》使用

-String sql = "update commoditytype set ct_name = ? where ct_id = ?;"

說明:將具體的資料用?佔位符表示

-》獲得PrepardStatement物件

建立物件:conn.prepareStatement(sql);請注意,是在建立物件的時候將SQL命令放入其中

-》佔位符:?====》需要解析佔位符

解析方式:ptmt.setString(1,name);//解析字串

ptat.setDouble(佔位符(問號)的位置, 要傳入的值);//解析double型別

ptat.setInt(佔位符(問號)的位置,要傳入的值);//解析int型別

說明:1代表的是第一個在佔位符的位置====不像下標一樣從0開始

 

持久化

含義:持久化是將程式中的資料在瞬時狀態和持久狀態間轉換的機制

持久化的方式:資料庫,普通檔案,xml檔案

持久化的主要操作:

讀取,查詢,保持,修改,刪除

 

一、模式:

    1Java中一共有23種模式

    2、模組: "套路""管理程式碼的一種方式"

 

二、Java中的設計模式:

   說明:共有23種,其中DAO模式;

        備註:

三層開發框架是比較有名的開發框架(框架與模式區別),三層不是模式

                  表示層(UI)

            三層  業務層(BIZ)

                  資料訪問層(DAO)

 

DAO模式:

DAO(Data Access Object資料儲存物件)是一個數據訪問介面,資料訪問:顧名思義就是與資料庫打交道。夾在業務邏輯與(持久化資料)資料庫資源中間的訪問

組成:資料庫連線類(連線資料庫)vO類(entity(實體)Dao介面,Dao的實現類及Dao的工廠類;

說明:  1234表示建立順序)

1.資料庫連線類(util):作用:連線並獲得連線物件以及關閉資料庫,通過資料庫連線可以大大簡化開發,在需要進行資料庫連線時,只需建立該類的例項,並呼叫其中的方法,就可以獲得資料庫連線物件,不必進行重複的操作

2.vo(實體類):是一個包含屬性與表中欄位完全對應的類並在該類中提供SetterGetter方法來設定並獲得該類中的屬性

3.Dao介面類:interface為介面

該類中定義了所有使用者操作如新增刪除查詢記錄等;不過因為是介面僅僅是定義,需要子類來實現

4.dao實現(implement)類:實現某個介面

Dao實現類實現了Dao介面並實現了介面中定義的所有方法,在Dao實現類中通過連線資料庫進行操作,

說明:Daoimpl

繼承DaoMaster,方法如下圖。

 

Tips:快速try catch

選擇程式碼塊,然後按快捷鍵(Alt+Shift+Z),選擇Try/catch block

 

模組的進化

ADao模式===三層=====MVC模式=====框架(SSH

資料連線類:資料來源

A:資料來源的優點:一次定義處處使用

B:資料來源:資料實體工具

包:util  類名  

C:資料來源的構成

   1、驅動連線

   2、管理建構函式,static模組

   3、資源釋放destory();

 

介面:資料登陸

儲存過程:cellableStatement

解析:Cstmt.SetString(索引,繫結值);

測試類:rs.next();判斷是否存在值

問題:實現結果獲取禁止使用ResultSet作為返回值

異常:

 

登入得優化

A:標準 Boolean===登陸的標準

B:資源釋放Destory

 

結果集的查詢

A:實體表示實體:vo entity  bean

B:返回值:List list

C:實體:因為每條記錄不一樣,所以實體的物件也應該是不一樣,將實體的例項化放在while迴圈裡;

 

結果集的查詢(泛型)

A:實體:實體就是一張表是一個物件

B:屬性是私有的,方法是公有的 建構函式  對欄位進行封裝、

C:思想

1Sql語句  Select 欄位 form 表明

2、泛型集合 List<Student> list    //Student:類名

持久化:查詢全部資料的返回值型別 List<Student>

3:物件:集合新增的元素物件==實體

4:實體的讀寫:ResultSet中獲取資料

5:結果集:stmt.executeQuery();方法中獲取值

6:編譯命令:Statement是通過Connection獲取資料

7:資料來源的公共方法的提取

D:測試獲取的資料便利

 

什麼是分層:

含義:一種化大為小,分而治之的軟體開發方法

分層的特點

每一層都有自己的職責

上一層不用關心下一層的實現細節,上一層通過下一層提供的對外介面來使用其功能

上一層呼叫下一層的功能,下一層不能呼叫上一層功能

分層開發的好處:

各層專注於自己功能的實現,便於提高質量

便於分工協作,提高開發效率

便於程式碼複用

便於程式擴充套件