一文徹底明白賈璉欲執事(JDBC)【1】

      網友投稿 853 2022-05-29

      一、持久化機制

      持久化(persistence): 把數據保存到可掉電式存儲設備中以供之后使用。大多數情況下,特別是企業級應用,數據持久化意味著將內存中的數據保存到硬盤上加以”固化”,而持久化的實現過程大多通過各種關系數據庫來完成。就是將內存中的數據存儲在關系型數據庫中,當然也可以存儲在磁盤文件、XML數據文件中。 而在 Java中,數據庫存取技術只能通過 JDBC 來訪問數據庫。

      JDBC 訪問數據庫的形式主要有兩種:

      直接使用 JDBC 的 API 去訪問數據庫服務器 (MySQL/Oracle)。

      間接地使用 JDBC 的 API 去訪問數據庫服務器,使用第三方O/R Mapping工具,如 Hibernate, MyBatis 等。(底層依然是 JDBC ,JDBC 是 Java 訪問數據庫的基石,其他技術都是對 JDBC 的封裝)

      二、JDBC概述

      JDBC (Java DataBase Connectivity)是一個獨立于特定數據庫管理系統、通用的SQL數據庫存取和操作的公共接口(一組API),定義了用來訪問數據庫的標準Java類庫,(java.sql,javax.sql)使用這些類庫可以以一種標準的方法、方便地訪問數據庫資源。

      JDBC為訪問不同的數據庫提供了一種統一的途徑,為開發者屏蔽了一些細節問題。

      JDBC 的目標是使 Java 程序員使用 JDBC 可以連接任何提供了 JDBC 實現 (驅動程序) 的數據庫系統,這

      樣就使得程序員無需對特定的數據庫系統的特點有過多的了解,從而大大簡化和加快了開發過程。

      一文徹底弄明白賈璉欲執事(JDBC)【1】

      簡單來說,JDBC 本身是 Java 連接數據庫的一個標準,是進行數據庫連接的抽象層,由 Java編寫的一組類和接口組成,接口的實現由各個數據庫廠商來完成。

      JDBC編寫的步驟如下:

      ODBC(Open Database Connectivity,開放式數據庫連接),是微軟在Windows平臺下推出的。使用者在程序中只需要調用ODBC API,由 ODBC 驅動程序將調用轉換成為對特定的數據庫的調用請求。

      三、獲取數據庫連接

      3.1、加載注冊驅動

      java.sql.Driver 接口是所有 JDBC 驅動程序需要實現的接口。這個接口是提供給數據庫廠商使用的,不同數據庫廠商提供不同的實現。在程序中不需要直接去訪問實現了 Driver 接口的類,而是由驅動程序管理器類(java.sql.DriverManager)去調用這些Driver實現。

      Oracle的驅動:oracle.jdbc.driver.OracleDriver

      mySql的驅動: com.mysql.jdbc.Driver

      加載驅動:加載 JDBC 驅動需調用 Class 類的靜態方法 forName(),向其傳遞要加載的 JDBC 驅動的類名

      Class.forName(“com.mysql.jdbc.Driver”);

      3.2、注冊驅動的原理

      注冊驅動:DriverManager 類是驅動程序管理器類,負責管理驅動程序

      使用DriverManager.registerDriver(com.mysql.jdbc.Driver)來注冊驅動

      通常不用顯式調用 DriverManager 類的 registerDriver() 方法來注冊驅動程序類的實例,因為 Driver 接口的驅動程序類都包含了靜態代碼塊,在這個靜態代碼塊中,會調用 DriverManager.registerDriver() 方法來注冊自身的一個實例。下圖是MySQL的Driver實現類的源碼:

      他通常有以下兩個步驟:

      1. 把 com.mysql.jdbc.Driver 這一份字節碼加載進 JVM。 2. 字節碼被加載進JVM,就會執行其靜態代碼塊.而其底層的靜態代碼塊在完成注冊驅動工作,將驅動注 冊到DriverManger 中。

      3.3、獲取連接對象

      我們一般使用 DriverManager 的 getConnection 方法創建 Connection 對象

      Connection conn = DriverManager.getConnection(url,username,password); // url=jdbc:mysql://localhost:3306/jdbcdemo // 如果連接的是本機的 MySQL,并且端口是默認的 3306 ,則可以簡寫: // url=jdbc:mysql:///jdbcdemo // username:當前訪問數據庫的用戶名 // password:當前訪問數據庫的密碼

      3.3.1、URL詳解

      JDBC URL 用于標識一個被注冊的驅動程序,驅動程序管理器通過這個 URL 選擇正確的驅動程序,從而建立到數據庫的連接。

      JDBC URL的標準由三部分組成(協議:子協議:子名稱),各部分間用冒號分隔。

      協議:JDBC URL中的協議總是jdbc(固定寫法)。

      子協議:子協議用于標識一個數據庫驅動程序。

      子名稱:一種標識數據庫的方法。子名稱可以依不同的子協議而變化,用子名稱的目的是為了定位數據庫提供足夠的信息。包含主機名(對應服務端的ip地址),端口號,數據庫名。

      url的常見寫法:

      jdbc:mysql://主機名稱:mysql服務端口號/數據庫名稱?參數=值&參數=值

      jdbc:mysql://localhost:3306/atguigu

      jdbc:mysql://localhost:3306/atguigu**?useUnicode=true&characterEncoding=utf8**(如果JDBC程序與服務器端的字符集不一致,會導致亂碼,那么可以通過參數指定服務器端的字符集)

      jdbc:mysql://localhost:3306/atguigu?user=root&password=123456

      3.4、數據庫連接方法

      3.4.1、方式一

      我們可以通過直接獲取注冊驅動,將數據庫信息寫在代碼中,這個的問題也是很明顯的,那就是一個硬編碼問題,當我們需要修改數據庫的時候,需要直接修改Java源代碼。

      @Test public void testConnection4() { try { //1.數據庫連接的4個基本要素: String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "admin"; String driverName = "com.mysql.jdbc.Driver"; //2.加載驅動 (①實例化Driver ②注冊驅動) Class.forName(driverName); //3.獲取連接 Connection conn = DriverManager.getConnection(url, user, password); System.out.println(conn); } catch (Exception e) { e.printStackTrace(); } }

      3.4.2、方式二

      我們為了解決方式一硬編碼的問題,需要將驅動信息放入配置文件,然后通過讀取的方式來進行賦值。

      @Test public void testConnection5() throws Exception { //1.加載配置文件 InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties pros = new Properties(); pros.load(is); //2.讀取配置信息 String user = pros.getProperty("user"); String password = pros.getProperty("password"); String url = pros.getProperty("url"); String driverClass = pros.getProperty("driverClass"); //3.加載驅動 Class.forName(driverClass); //4.獲取連接 Connection conn = DriverManager.getConnection(url,user,password); System.out.println(conn); }

      使用配置文件的好處:

      實現了代碼和數據的分離,如果需要修改配置信息,直接在配置文件中修改,不需要深入代碼。

      如果修改了配置信息,省去重新編譯的過程。

      四、DAO思想

      4.1、沒有DAO

      在沒有 DAO 的時候,我們的代碼存在大量的重復。

      4.2、DAO介紹

      DAO(Data Access Object) 數據訪問對象是一個面向對象的數據庫接口. 顧名思義就是與數據庫打交道,夾在業務邏輯與數據庫資源中間,將所有對數據源的訪問操作抽象封裝在一個公共 API 中。程序書寫就是建立一個接口,接口中定義了此應用程序中將會用到的所有事務方法。DAO 中的主要操作: 增刪改查(CRUD)。

      通過以上圖,DAO 作為組件,那其主要的是方法的設計,方法設計需要注意什么呢?

      在保存功能中,調用者需要傳遞多個參數進來,然后把這些數據保存到數據庫中。

      在查詢功能中,結果集的每行數據有多個列的值,然后把這些數據返回給調用者。

      在開發過程中,如果遇到需要傳遞的數據有多個的時候,通常需要使用 JavaBean 對其進行封裝

      4.3、DAO規范

      DAO本質就是一個可以重復使用的組件。他包括了兩個規范:

      分包規范(域名倒寫.項目模塊名.組件)

      cn.util; //存放工具類 cn.domain; //裝pss模塊的domain類,模型對象.(Student) cn.dao; //裝pss模塊的dao接口.調用者將需要保存的數據封裝到一個對象中,然后傳遞進來 cn.dao.impl; //裝dao接口的實現類. cn.test; //暫時存儲DAO的測試類,以后的測試類不應該放這里.

      命名規范

      DAO 接口 : 表示對某個模型的 CRUD 操作做規范,以 I 開頭,interface。例如: IStudentDAO

      DAO 實現類: 表示對某個 DAO 接口的實現,例如:EmployeeDAOImpl

      DAO 測試類: 測試 DAO 組件中的所有方法,例如:EmployeeDAOTest

      調用建議:面向接口編程

      傳統的做法 : EmployeeDAOImpl dao = new EmployeeDAOImpl();

      面向接口編程 : IEmployeeDAO dao = new EmployeeDAOImpl();

      JDBC 數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:簡單指令介紹
      下一篇:機器人編程趣味實踐02-程序(Hello World)
      相關文章
      亚洲 综合 国产 欧洲 丝袜| 亚洲精品9999久久久久无码| xvideos亚洲永久网址| 中文有码亚洲制服av片| 久久精品国产亚洲AV久| 亚洲国产日韩女人aaaaaa毛片在线| 亚洲av成人无码久久精品| 亚洲国产美女精品久久久久∴| 亚洲一区二区三区自拍公司| 亚洲午夜久久久久妓女影院| 亚洲熟妇丰满多毛XXXX| 亚洲国产另类久久久精品黑人| 亚洲欧洲无码AV电影在线观看 | 亚洲级αV无码毛片久久精品| 亚洲欧洲日产国码无码久久99| 亚洲日韩aⅴ在线视频| 亚洲国产精品无码久久一线 | 亚洲国产精品无码久久久秋霞1 | MM1313亚洲国产精品| 日韩亚洲精品福利| 久久亚洲高清综合| 亚洲AV无码成人网站久久精品大 | 国产成人高清亚洲| 亚洲精品无码成人片久久| 亚洲av午夜福利精品一区| 久久亚洲AV无码精品色午夜 | 青青草原亚洲视频| 亚洲AV无码乱码国产麻豆穿越| 亚洲国产综合专区在线电影 | 国内精品久久久久久久亚洲| 久久亚洲国产精品一区二区| 亚洲国产精品第一区二区 | 久久亚洲2019中文字幕| 午夜亚洲AV日韩AV无码大全| 91情国产l精品国产亚洲区| 精品亚洲AV无码一区二区三区| 亚洲欧美自偷自拍另类视| 亚洲黄片手机免费观看| 亚洲精品V欧洲精品V日韩精品 | 久久久无码精品亚洲日韩软件| 久久青青草原亚洲AV无码麻豆|