膜拜!清華學霸親碼JDBC速成筆記,看完才知道源碼如此簡單

Hello,今天給各位童鞋們分享的是JDBC,趕忙拿出小本子記下來吧java

image.png

一、 簡介

JDBC(Java DataBase Connectivity,java數據庫鏈接)是一種用於執行SQL語句的Java API,能夠爲多種關係數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據此能夠構建更高級的工具和接口,使數據庫開發人員可以編寫數據庫應用程序mysql

Java 具備堅固、安全、易於使用、易於理解和可從網絡上自動下載等特性,是編寫數據庫應用程序的傑sql

出語言。所須要的只是 Java應用程序與各類不一樣數據庫之間進行對話的方法。數據庫

JDBC能夠在各類平臺上使用Java,如Windows,Mac OS和各類版本的UNIX。編程

JDBC庫包括一般與數據庫使用相關的下面提到的每一個任務的API。數組

鏈接數據庫。安全

建立SQL或MySQL語句。服務器

在數據庫中執行SQL或MySQL查詢。markdown

查看和修改生成的記錄。網絡

2 、JDBC體系結構

JDBC API支持用於數據庫訪問的兩層和三層處理模型,但一般,JDBC體系結構由兩層組成:

JDBC API:這提供了應用程序到JDBC管理器鏈接。

JDBC驅動程序API:這支持JDBC管理器到驅動程序鏈接。

JDBC API使用驅動程序管理器和特定於數據庫的驅動程序來提供與異構數據庫的透明鏈接。

三、JDBC核心組件

DriverManager: 此類管理數據庫驅動程序列表。使用通訊子協議未來自java應用程序的鏈接請求

與適當的數據庫驅動程序匹配。

Driver:此接口處理與數據庫服務器的通訊,咱們不多會直接與Driver對象進行交互。而是使用

DriverManager對象來管理這種類型的對象。

Connection:該界面具備用於聯繫數據庫的全部方法。鏈接對象表示通訊上下文,即,與數據庫

的全部通訊僅經過鏈接對象。

Statement:使用今後接口建立的對象將SQL語句提交到數據庫。除了執行存儲過程以外,一些派

生接口還接受參數。

ResultSet:在使用Statement對象執行SQL查詢後,這些對象保存從數據庫檢索的數據。它做爲一

個迭代器,容許咱們移動其數據。

SQLException:此類處理數據庫應用程序中發生的任何錯誤

四、CRUD語法介紹

SQL 是一種標準化的語言,它容許你在數據庫上執行操做,如建立項目,查詢內容,更新內容,並刪除條目等操做。

Create, Read, Update, and Delete 一般稱爲CRUD操做。

5 、使用步驟

構建JDBC應用程序涉及如下六個步驟:

導入包:須要包含包含數據庫編程所需的JDBC類的包。大多數狀況下,使用import java.sql.*就足夠

了。

註冊JDBC驅動程序:要求您初始化驅動程序,以便您能夠打開與數據庫的通訊通道。

SQL> CREATE DATABASE DATABASE_NAME;

SQL> DROP DATABASE DATABASE_NAME;

SQL> CREATE TABLE Employees (

id INT NOT NULL,

age INT NOT NULL,

first VARCHAR(255),

last VARCHAR(255),

PRIMARY KEY ( id )

);

SQL> DROP TABLE table_name;

SQL> INSERT INTO table_name VALUES (column1, column2, …);

SQL> SELECT column_name, column_name, … FROM table_name WHERE conditions;

SQL> UPDATE table_name

SET column_name = value, column_name = value, …

WHERE conditions;

SQL> DELETE FROM table_name WHERE conditions;

打開鏈接:須要使用DriverManager.getConnection()方法建立一個Connection對象,該對象表

示與數據庫的物理鏈接。

執行查詢:須要使用類型爲Statement的對象來構建和提交SQL語句到數據庫。

從結果集中提取數據:須要使用相應的ResultSet.getXXX()方法從結果集中檢索數據。

釋放資源:須要明確地關閉全部數據庫資源,而不依賴於JVM的垃圾收集。

六、JDBC鏈接步驟

創建JDBC鏈接所涉及的編程至關簡單。這是簡單的四個步驟

導入JDBC包:將Java語言的import語句添加到Java代碼中導入所需的類。

註冊JDBC驅動程序:此步驟將使JVM將所需的驅動程序實現加載到內存中,以便它能夠知足您的JDBC

請求。

數據庫URL配置:這是爲了建立一個格式正確的地址,指向要鏈接到的數據庫。

建立鏈接對象:最後,調用DriverManager對象的getConnection()方法來創建實際的數據庫連

接。

Class.forName();

註冊驅動程序最多見的方法是使用Java的Class.forName()方法,將驅動程序的類文件動態加載到內存

中,並將其自動註冊

image.png DriverManager.registerDriver()

第二種方法是使用靜態DriverManager.registerDriver()方法。

image.png 數據庫URL配置

加載驅動程序後,可使用DriverManager.getConnection()方法創建鏈接。爲了方便參考,讓我

列出三個重載的DriverManager.getConnection()方法 -

getConnection(String url)

getConnection(String url,Properties prop)

getConnection(String url,String user,String password)

|RDBMS | JDBC驅動程序名稱|網址格式|

|------------|--------------------------|-------------|

|MYSQL8| com.mysql.cj.jdbc.Driver| jdbc:mysql://hostname:3306/databaseName?serverTimezone=UTC|

MySQL |com.mysql.jdbc.Driver | jdbc:mysql://hostname:3306/databaseName |

建立數據庫鏈接對象

image.png 完整的鏈接地址:版本1:

image.png

版本2:

jdbc:mysql://localhost:3306/yhp2?serverTimezone=UTC

使用數據庫URL和屬性對象DriverManager.getConnection()方法的第三種形式須要一個數據庫URL和一個Properties對象

DriverManager.getConnection(String url, Properties info);

image.png 關閉數據庫鏈接爲確保鏈接關閉,您能夠在代碼中提供一個「finally」塊。一個finally塊老是執行,不論是否發生異常。要關閉上面打開的鏈接,你應該調用close()方法以下 -

conn.close();

6.1 JDBC執行SQL語句

一旦得到了鏈接,咱們能夠與數據庫進行交互。JDBC Statement和PreparedStatement接口定義了使

您可以發送SQL命令並從數據庫接收數據的方法和屬性。

6.2 Statement

建立語句對象

在使用Statement對象執行SQL語句以前,須要使用Connection對象的createStatement()方法建立

一個,以下例所示:

image.png 建立Statement對象後,您可使用它來執行一個SQL語句,其中有三個執行方法之一。

boolean execute(String SQL):若是能夠檢索到ResultSet對象,則返回一個布爾值true; 不然返

回false。使用此方法執行SQL DDL語句或須要使用真正的動態SQL時。

int executeUpdate(String SQL):返回受SQL語句執行影響的行數。使用此方法執行預期會影響

多個行的SQL語句,例如INSERT,UPDATE或DELETE語句。

ResultSet executeQuery(String SQL):返回一個ResultSet對象。當您但願得到結果集時,請使

用此方法,就像使用SELECT語句同樣。

關閉Statement對象

就像咱們關閉一個Connection對象以保存數據庫資源同樣,因爲一樣的緣由,還應該關閉Statement對象。

一個簡單的調用close()方法將執行該做業。若是先關閉Connection對象,它也會關閉Statement對象。可是,應始終顯式關閉Statement對象,以確保正確清理。

image.png

6.3 SQL注入

就是經過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執

行惡意的SQL命令。具體來講,它是利用現有應用程序,將(惡意的)SQL命令注入到後臺數據庫引擎

執行的能力,它能夠經過在Web表單中輸入(惡意)SQL語句獲得一個存在安全漏洞的網站上的數據

庫,而不是按照設計者意圖去執行SQL語句。好比先前的不少影視網站泄露VIP會員密碼大多就是經過

WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊。

七、PreparedStatement(預狀態通道)

該PreparedStatement的接口擴展了Statement接口,它爲您提供了一個通用的Statement對象有兩

個優勢附加功能。

此語句使您能夠動態地提供參數。

image.png JDBC中的全部參數都由?符號,這被稱爲參數標記。在執行SQL語句以前,必須爲每一個參數提供值。

所述的setXXX()方法將值綁定到所述參數,其中XXX表明要綁定到輸入參數的值的Java數據類型。若是忘記提供值,將收到一個SQLException。

每一個參數標記由其順序位置引用。第一個標記表示位置1,下一個位置2等等。該方法與Java數組索引不一樣,從0開始。

關閉PreparedStatement對象

就像關閉Statement對象同樣,因爲一樣的緣由,還應該關閉PreparedStatement對象。

一個簡單的調用close()方法將執行該做業。若是先關閉Connection對象,它也會關閉

PreparedStatement對象。可是,應始終顯式關閉PreparedStatement對象,以確保正確清理。

image.png

對比statement和PreparedStatement;

(1)statement屬於狀態通道,PreparedStatement屬於預狀態通道

(2)預狀態通道會先編譯sql語句,再去執行,比statement執行效率高

(3)預狀態通道支持佔位符?,給佔位符賦值的時候,位置從1開始

(4)預狀態通道能夠防止sql注入,緣由:預狀態通道在處理值的時候以字符串的方式處理

八、ResultSet

SELECT語句是從數據庫中選擇行並在結果集中查看行的標準方法。該java.sql.ResultSet中的接口表示

結果集數據庫查詢。

ResultSet對象維護指向結果集中當前行的遊標。術語「結果集」是指包含在ResultSet對象中的行和列數

據。

若是沒有指定任何ResultSet類型,您將自動得到一個TYPE_FORWARD_ONLY。

image.png

image.png 好啦,今天的文章就到這裏了,但願可以幫助到屏幕前迷茫的大家

相關文章
相關標籤/搜索