JDBC核心技術(shù)詳解
一、JDBC概述
1、數(shù)據(jù)的持久化
持久化(persistence):把數(shù)據(jù)保存到可掉電式存儲(chǔ)設(shè)備中以供之后使用。大多數(shù)情況下,特別是企業(yè)級(jí)應(yīng)用,數(shù)據(jù)持久化意味著將內(nèi)存中的數(shù)據(jù)保存到硬盤上加以"固化”,而持久化的實(shí)現(xiàn)過(guò)程大多通過(guò)各種關(guān)系數(shù)據(jù)庫(kù)來(lái)完成。
持久化的主要應(yīng)用是將內(nèi)存中的數(shù)據(jù)存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)中,當(dāng)然也可以存儲(chǔ)在磁盤文件、XML數(shù)據(jù)文件中。

2、Java 中的數(shù)據(jù)存儲(chǔ)技術(shù) 在Java中,數(shù)據(jù)庫(kù)存取技術(shù)可分為如下幾類:
ØJDBC直接訪問數(shù)據(jù)庫(kù)
ØJDO技術(shù)
Ø第三方O/R工具,如Hibernate, mybatis 等JDBC是java訪問數(shù)據(jù)庫(kù)的基石,JDO, Hibernate等只是更好
的封裝了JDBC
3、JDBC基礎(chǔ)

連接數(shù)據(jù)庫(kù):


4、JDBC體系結(jié)構(gòu)
JDBC接口(API)包括兩個(gè)層次:
Ø 面向應(yīng)用的API:Java API,抽象接口,供應(yīng)用程序開發(fā)人員使用(連接數(shù)據(jù)庫(kù),執(zhí)行SQL語(yǔ)句,獲得結(jié)果)。
Ø 面向數(shù)據(jù)庫(kù)的API:Java Driver API,供開發(fā)商開發(fā)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序用。

5、JDBC API
JDBC API 是一系列的接口,它使得應(yīng)用程序能夠進(jìn)行數(shù)據(jù)庫(kù)聯(lián)接,執(zhí)行SQL語(yǔ)句,并且得到返回結(jié)果。

6、JDBC程序訪問數(shù)據(jù)庫(kù)步驟


二、獲取數(shù)據(jù)庫(kù)連接
1、Driver 接口
java.sql.Driver 接口是所有 JDBC 驅(qū)動(dòng)程序需要實(shí)現(xiàn)的接口。這個(gè)接口是提
供給數(shù)據(jù)庫(kù)廠商使用的,不同數(shù)據(jù)庫(kù)廠商提供不同的實(shí)現(xiàn)
在程序中不需要直接去訪問實(shí)現(xiàn)了 Driver 接口的類,而是由驅(qū)動(dòng)程序管理
器類(java.sql.DriverManager)去調(diào)用這些Driver實(shí)現(xiàn)
ØOracle的驅(qū)動(dòng):oracle.jdbc.driver.OracleDriver
ØmySql的驅(qū)動(dòng): com.mysql.jdbc.Driver
2、加載與注冊(cè) JDBC 驅(qū)動(dòng)

3、建立連接(Connection)

4、幾種常用數(shù)據(jù)庫(kù)的JDBC URL

連接mysql代碼實(shí)例:
import java.io.InputStream;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import org.junit.Test;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Driver;
public class testconnction01 {
/**
* @throws SQLException
*/
@Test
//方式一
public void testConnection011() throws SQLException {
Driver driver = new com.mysql.jdbc.Driver();
String url = "jdbc:mysql://localhost:3306/test";
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "root");
Connection collection = (Connection) driver.connect(url, info);
System.out.println(collection);
}
@Test
//方式二,對(duì)方式一的迭代,使得程序具有更好的可移植性
public void testConnection02() throws Exception {
//獲取Driver實(shí)現(xiàn)類對(duì)象;使用反射
Class clazz= Class.forName("com.mysql.jdbc.Driver");
Driver driver=(Driver) clazz.newInstance();
//提供要連接的數(shù)據(jù)庫(kù)
String url = "jdbc:mysql://localhost:3306/test";
//提供連接需要的用戶名和密碼
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "root");
//獲取連接
Connection collection = (Connection) driver.connect(url, info);
System.out.println(collection);
}
@Test
//方式三,使用DriverManager替換Driver
public void testConnection03() throws Exception {
Class clazz= Class.forName("com.mysql.jdbc.Driver");
Driver driver=(Driver) clazz.newInstance();
//提供另外三個(gè)連接的基本信息;
String url ="jdbc:mysql://localhost:3306/test";
String user ="root";
String password ="root";
//注冊(cè)驅(qū)動(dòng)
DriverManager.registerDriver(driver);
//獲取連接
Connection connection= (Connection) DriverManager.getConnection(url,user,password);
System.out.println(connection);
}
@Test
//方式四,可以只是加載驅(qū)動(dòng),不用是示的注冊(cè)驅(qū)動(dòng)過(guò)了。
public void testConnection04() throws Exception {
//提供另外三個(gè)連接的基本信息;
String url ="jdbc:mysql://localhost:3306/test";
String user ="root";
String password ="root";
Class.forName("com.mysql.jdbc.Driver");
// Class clazz= Class.forName("com.mysql.jdbc.Driver");
// Driver driver=(Driver) clazz.newInstance();
//
// //注冊(cè)驅(qū)動(dòng)
// DriverManager.registerDriver(driver);
//
//獲取連接
Connection connection= (Connection) DriverManager.getConnection(url,user,password);
System.out.println(connection);
}
@Test
//方式五,(final版):將數(shù)據(jù)庫(kù)連接需要的4個(gè)基本信息聲明在配置文件中,通過(guò)讀取配置文件的方式,獲取連接
//實(shí)現(xiàn)了數(shù)據(jù)和代碼的分離(解耦)
public void testConnection05() throws Exception {
//讀取配置文件的4個(gè)基本信息
InputStream is = testconnction01.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties p =new Properties();
p.load(is);
String user = p.getProperty("user");
String password = p.getProperty("password");
String url = p.getProperty("url");
String driverClass =p.getProperty("driverClass");
Class.forName(driverClass);
//獲取連接
Connection connection= (Connection) DriverManager.getConnection(url,user,password);
System.out.println(connection);
}
}
5、使用Statement操作數(shù)據(jù)表的弊端 a、需要拼寫SQL語(yǔ)句

6、Statement操作會(huì)導(dǎo)致SQL注入攻擊

數(shù)據(jù)庫(kù)連接被用于向數(shù)據(jù)庫(kù)服務(wù)器發(fā)送命令和SQL語(yǔ)句,并接受數(shù)據(jù)庫(kù)服務(wù)器返回的結(jié)果。其實(shí)一個(gè)數(shù)據(jù)庫(kù)連接就是一個(gè)Socket連接。
在java.sql包中有3個(gè)接口分別定義了對(duì)數(shù)據(jù)庫(kù)的調(diào)用的不同方式:
Statement :用于執(zhí)行靜態(tài)SQL語(yǔ)句并返回它所生成結(jié)果的對(duì)象。PrepatedIatement : SQL語(yǔ)句被預(yù)編譯并存儲(chǔ)在此對(duì)象中,可以使用此對(duì)象多次高效地執(zhí)行該語(yǔ)句。CallableStatement :用于執(zhí)行SQL存儲(chǔ)過(guò)程
-


到此這篇關(guān)于JDBC核心技術(shù)詳解的文章就介紹到這了,更多相關(guān)JDBC核心技術(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java基礎(chǔ)之JDBC的數(shù)據(jù)庫(kù)連接與基本操作
- Java Spring5學(xué)習(xí)之JdbcTemplate詳解
- JavaWeb實(shí)戰(zhàn)之用Servlet+JDBC實(shí)現(xiàn)用戶登錄與注冊(cè)
- java使用JDBC連接數(shù)據(jù)庫(kù)的五種方式(IDEA版)
- Java連接 JDBC基礎(chǔ)知識(shí)(操作數(shù)據(jù)庫(kù):增刪改查)
- Java構(gòu)建JDBC應(yīng)用程序的實(shí)例操作
- Java JDBC自定義封裝工具類的步驟和完整代碼
- Java 如何使用JDBC連接數(shù)據(jù)庫(kù)
- Java如果通過(guò)jdbc操作連接oracle數(shù)據(jù)庫(kù)
- JDBC-idea導(dǎo)入mysql連接java的jar包(mac)的方法
- java項(xiàng)目中讀取jdbc.properties文件操作
相關(guān)文章
springboot+mybatis+枚舉處理器的實(shí)現(xiàn)
在Spring?boot項(xiàng)目開發(fā)中經(jīng)常遇到需要使用枚舉的場(chǎng)景,本文就介紹了springboot+mybatis+枚舉處理器的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
SpringBoot集成IJPay實(shí)現(xiàn)微信v3支付的示例代碼
本文主要介紹了SpringBoot集成IJPay實(shí)現(xiàn)微信v3支付的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
SpringMVC表單提交參數(shù)400錯(cuò)誤解決方案
這篇文章主要介紹了SpringMVC表單提交參數(shù)400錯(cuò)誤解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
IDEA利用jclasslib 修改class文件的實(shí)現(xiàn)
這篇文章主要介紹了IDEA利用jclasslib 修改class文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
Intellij IDEA 配置Subversion插件實(shí)現(xiàn)步驟詳解
這篇文章主要介紹了Intellij IDEA 配置Subversion插件實(shí)現(xiàn)步驟詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05
java文件刪除不了File類的delete方法刪不掉文件的原因以及分析
這篇文章主要介紹了java文件刪除不了File類的delete方法刪不掉文件的原因以及分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
使用Spring Security集成手機(jī)驗(yàn)證碼登錄功能實(shí)現(xiàn)
本文詳細(xì)介紹了如何利用SpringSecurity來(lái)實(shí)現(xiàn)手機(jī)驗(yàn)證碼的注冊(cè)和登錄功能,在登錄過(guò)程中,同樣需通過(guò)驗(yàn)證碼進(jìn)行驗(yàn)證,文章還提供了相關(guān)的代碼實(shí)現(xiàn)2024-10-10

