免費(fèi)建網(wǎng)站哪個好站長工具seo綜合查詢工具
前言:在上節(jié)入門程序當(dāng)中我們見到了JDBC所提供的API,本節(jié)來詳細(xì)說明一下。
一、JDBC--API詳解
1.1DriverManager(驅(qū)動管理器)
回顧:作用獲取連接,調(diào)用它里面的getConnection。即如下
作用
1.注冊驅(qū)動解析
思考: 注冊驅(qū)動跟DriverManager有什么關(guān)系?
解答:根據(jù)注冊驅(qū)動里面的核心(原理)。其實(shí)注冊驅(qū)動嚴(yán)格來說需要調(diào)用DriverManager里面的一個方法叫DriverManager.registerDriver(...),但是我們只調(diào)用class.forname將指定的類加載在JDM當(dāng)中,就完成注冊驅(qū)動了,沒有調(diào)用上面那個代碼。因?yàn)镈river類源碼里面有個靜態(tài)方法包含了,這個靜態(tài)方法在類加載的時候就運(yùn)行了。
補(bǔ)充:class.forname可以省略的
運(yùn)行結(jié)果
思考:這又是為啥呢?咱們又省了一步
首先精確找到咱們引入的jar包
確定后發(fā)現(xiàn)驅(qū)動類
往上走能找到一個META-INF文件夾,其中包含了咱們需要的內(nèi)容。在java當(dāng)中提供了一個機(jī)制,如果你在jar包當(dāng)中定義了一個META-INT文件,下面有個services,然后這塊通過它的接口名字定義了這么一個文件的話,它會自動加載到這個文件當(dāng)中所定義的那個類。(前提的需要jar包中定義了這個文件才能用)(有點(diǎn)繞,建議還是不省略哈哈)
2.獲取數(shù)據(jù)庫連接解析
小結(jié)
1.2 Connection(連接對象) & Statement(執(zhí)行對象)
Connection 的作用:獲取執(zhí)行 SQL 的對象
? ? ? ? 1.執(zhí)行普通 SQL 對象 Statement : connection.createStatement()
? ? ? ? 2.執(zhí)行預(yù)編譯 SQL 對象 PreparedStatement : connection.preparedStatement()
Statement 的作用:執(zhí)行 SQL
????????1.執(zhí)行 DDL 、 DML 語句: executeUpdate(sql) ; 如果是執(zhí)行 DML 語句完畢,返回值 int 代表 DML 語句影響的函數(shù)。
小結(jié)
????????2.執(zhí)行 SQL 語句: executeQuery(sql) ; 返回值為 ResultSet ,里面封裝了查詢結(jié)果。
1.3 ResultSet (結(jié)果集)
以需求為例來演示
如何獲取里面的數(shù)據(jù)
擴(kuò)展:我們模擬登錄操作,不可能把賬戶密碼寫死,應(yīng)該是用戶輸入是什么,我們就根據(jù)什么來查
修改如下(這兩個注解我忘記了,需要大家課外補(bǔ)充)
小結(jié)
1.4 PreparedStatement
作用
? ? ? ? 預(yù)編譯 SQL 語句并執(zhí)行,可以防止 SQL 注入問題。
什么是SQL注入?
是sql攻擊當(dāng)中的一種,是常見的問題。
SQL 注入
? ? ? ? 通過控制輸入來修改事先定義好的 SQL 語句,以達(dá)到執(zhí)行代碼對服務(wù)器進(jìn)行攻擊的方法。
模擬演示,第一次接觸有點(diǎn)東西說不準(zhǔn)
先導(dǎo)入兩個jar包,再運(yùn)行jar包
根據(jù)如圖數(shù)據(jù)來登錄
賬戶密碼正確能正常登錄
如果輸入一個錯誤的賬戶密碼呢
也是成功登錄,這是為什么呢,將賬戶密碼代入看看