最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你快速學(xué)會(huì)JDBC及獲取連接的五種方式

 更新時(shí)間:2022年09月26日 16:15:16   作者:不遇言熙  
JDBC(Java Database Connectivity)是一個(gè)獨(dú)立于特定數(shù)據(jù)庫管理系統(tǒng)、通用的SQL數(shù)據(jù)庫存取和操作的公共接口,下面這篇文章主要給大家介紹了關(guān)于如何通過一文帶你快速學(xué)會(huì)JDBC及獲取連接的五種方式,需要的朋友可以參考下

快速學(xué)會(huì)JDBC及獲取連接的五種方式

1. JDBC基本介紹

  • JDBC為訪問不同的數(shù)據(jù)庫提供了統(tǒng)一的接口,為使用者屏蔽了細(xì)節(jié)問題
  • Java程序員使用JDBC,可以連接任何提供了JDBC驅(qū)動(dòng)程序的數(shù)據(jù)庫系統(tǒng),完成對(duì)數(shù)據(jù)庫的各種操作。
  • JDBC基本原理圖

2. JDBC快速入門

2.1 JDBC程序編寫步驟

  • 注冊(cè)驅(qū)動(dòng)-加載Driver類
  • 獲取連接-得到Connection
  • 執(zhí)行增刪改查-發(fā)送SQL給MySQL執(zhí)行
  • 釋放資源-關(guān)閉相關(guān)連接

2.2 案例演示

2.2.1 前置工作,在數(shù)據(jù)庫中建立對(duì)應(yīng)表

CREATE TABLE `actor`(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(32) NOT NULL DEFAULT '',
sex CHAR(1) NOT NULL DEFAULT '女',
borndate DATETIME,
phone VARCHAR(12));

2.2.2 前置工作,導(dǎo)入MySQL數(shù)據(jù)庫的對(duì)應(yīng)jar包

在項(xiàng)目下新建一個(gè)文件夾如libs,將對(duì)應(yīng)jar包拷入,并將其加入library中

image-20220824161213960

public static void main(String[] args) throws SQLException {
        //注冊(cè)驅(qū)動(dòng)
        Driver driver = new Driver();
        String url="jdbc:mysql://localhost:3306/zxy_db01";
        String user="root";
        String psd = "123";
        DriverManager.registerDriver(driver);
        //獲得連接
        Connection connection = DriverManager.getConnection(url,user,psd);
        //執(zhí)行SQL語句
        String sql = "insert into actor values(null, '劉德華', '男', '1970-11-11', '110')";
        //statement 用于執(zhí)行靜態(tài) SQL 語句并返回其生成的結(jié)果的對(duì)象
        Statement statement = (Statement) connection.createStatement();
        int rows = statement.executeUpdate(sql);
        System.out.println(rows > 0 ? "成功" : "失敗");
        //關(guān)閉資源
        statement.close();
        connection.close();
    }

然后我們?cè)偃ゲ樵償?shù)據(jù)庫,就會(huì)發(fā)現(xiàn)已經(jīng)成功啦

3. 相關(guān)類的介紹

3.1 Statement

相信對(duì)于上面的代碼中你最好奇的就是Statement這個(gè)類,我們就來聊一聊這個(gè)。

基本介紹:

  1. 用于執(zhí)行靜態(tài)Sql語句并返回其生成結(jié)果
  2. 在連接建立后,需要對(duì)數(shù)據(jù)庫進(jìn)行訪問,執(zhí)行命名或是SQL語句,可以通過Statement(存在SQL注入問題)PrepardStatement(預(yù)處理) CallableStatement(存儲(chǔ)過程)
  3. Statement對(duì)象執(zhí)行SQL語句,存在SQL注入風(fēng)險(xiǎn)
  4. SQL注入是利用某些系統(tǒng)沒有對(duì)用戶輸入對(duì)數(shù)據(jù)進(jìn)行充分對(duì)檢查,而在用戶輸入數(shù)據(jù)中注入非法對(duì)SQL語句段或命令,惡意攻擊數(shù)據(jù)庫
  5. 要防范SQL注入,只要用PreparedStatement(從Statement擴(kuò)展而來),取代Statement就可以了

其實(shí)歸根究底,這個(gè)類就是一個(gè)用來調(diào)用執(zhí)行SQL語句的類。

3.2 ResultSet[結(jié)果集]

這個(gè)是執(zhí)行查詢的SQL時(shí)返回的對(duì)象,如下面這段代碼

String sql = "select id, name , sex, borndate from actor";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) { // 讓光標(biāo)向后移動(dòng),如果沒有更多行,則返回 false
    int id = resultSet.getInt(1); //獲取該行的第 1 列 
    String name = resultSet.getString(2);//獲取該行的第 2 列 
    String sex = resultSet.getString(3); 
    Date date = resultSet.getDate(4); 
    System.out.println(id + "\t" + name + "\t" + sex + "\t" + date);
}

表示數(shù)據(jù)庫結(jié)果集的數(shù)據(jù)表,通常通過執(zhí)行查詢數(shù)據(jù)庫的語句生成。

ResultSet對(duì)象保持一個(gè)光標(biāo)指向其當(dāng)前的數(shù)據(jù)行。 最初,光標(biāo)位于第一行之前。 next方法將光標(biāo)移動(dòng)到下一行,并且由于在ResultSet對(duì)象中沒有更多行時(shí)返回false ,因此可在while循環(huán)中使用循環(huán)來遍歷結(jié)果集。

3.3 PreparedStatement

這個(gè)類其實(shí)和上面介紹的Statement效果類似,相當(dāng)于Statement的改進(jìn)版,增加了預(yù)處理過程避免了sql注入現(xiàn)象(簡單來講就是破獲你的數(shù)據(jù)庫中的信息),下面我們就來聊聊它

  1. PreparedStatement執(zhí)行的SQL語句中的參數(shù)用問號(hào)(?)來表示,調(diào)用PreparedStatement對(duì)象額setXxx()方法來設(shè)置這些參數(shù),setXxx()方法有兩個(gè)參數(shù),第一個(gè)參數(shù)是要設(shè)置的SQL語句中的參數(shù)的索引(從1開始),第二個(gè)是設(shè)置的SQL語句中的參數(shù)的值。
  2. 調(diào)用executeQuery(),返回ResultSet對(duì)象
  3. 調(diào)用 executeUpdate(),執(zhí)行增刪改等操作。

其優(yōu)點(diǎn)也是極其明顯的

  • 不再使用+拼接SQL語句,減少語法錯(cuò)誤
  • 有效的解決了SQL注入問題
  • 大大減少了編譯次數(shù),效率提高

話不多說,我們直接上案例

String sql = "select name , pwd from admin where name =? and pwd = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "劉德華"); 
preparedStatement.setString(2, "123");
ResultSet resultSet = preparedStatement.executeQuery(sql);
if (resultSet.next()) { //如果查詢到一條記錄,則說明該管理存在 
    System.out.println("恭喜, 登錄成功"); } 
else {
    System.out.println("對(duì)不起,登錄失敗"); 
     }

4. 關(guān)閉資源

在JDBC編碼過程中,我們創(chuàng)建了resultSet,statement,connection等資源,這些資源在使用完畢后一定要進(jìn)行關(guān)閉資源,關(guān)閉的過程中遵循從里到外的原則,因?yàn)樵谠鰟h改查中的操作中都要用到這樣的關(guān)閉操作

resultSet.close();
statement.close();
connection.close();

5. 獲取數(shù)據(jù)庫連接的五種方式

方式一

直接通過Driver類獲得連接

 public void way1() throws SQLException {
        Driver driver = new Driver();
        String url = "jdbc:mysql://localhost:3306/zxy_db01";
        Properties info = new Properties();
        info.setProperty("user","root");
        info.setProperty("psd","123");
        Connection connect = driver.connect(url, info);
        System.out.println(connect);
    }

方式二

通過反射的方式加載Driver類獲得連接

 public void way2() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        Class<?> clzz = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver) clzz.newInstance();
        String url = "jdbc:mysql://localhost:3306/zxy_db01";
        Properties info = new Properties();
        info.setProperty("user","root");
        info.setProperty("psd","123");
        Connection connect = driver.connect(url, info);
        System.out.println(connect);
    }

方式三

使用DriverManager替換Driver獲得連接

 public void way3() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        Class<?> clzz = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver) clzz.newInstance();
        String url="jdbc:mysql://localhost:3306/zxy_db01";
        String user="root";
        String psw = "123";
        DriverManager.registerDriver(driver);
        Connection connection = DriverManager.getConnection(url,user,password);
        System.out.println(connection);
    }

方式四

使用Class.forName自動(dòng)完成驅(qū)動(dòng)注冊(cè)獲得鏈接

public void way4() throws SQLException, ClassNotFoundException {
        Class.forName("com.mysql.jdbc.Driver");
        String url="jdbc:mysql://localhost:3306/zxy_db01";
        String user="root";
        String psd = "123";
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);
    }

方式五

借助配置文件獲得來獲得連接

user=root
psd=123
url=jdbc:mysql://localhost:3306/zxy_db01
driver=com.mysql.jdbc.Driver
 public void way5() throws SQLException, ClassNotFoundException, IOException {
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\mysql.properties"));
        String user = properties.getProperty("user");
        String password = properties.getProperty("psd");
        String url = properties.getProperty("url");
        String driver = properties.getProperty("driver");
        Class.forName(driver);
        Connection connection = DriverManager.getConnection(url, user, psd);
        System.out.println(connection);
    }

相信看完本篇你對(duì)jdbc已經(jīng)有了不錯(cuò)的了解了

總結(jié)

到此這篇關(guān)于一文快速學(xué)會(huì)JDBC及獲取連接的五種方式的文章就介紹到這了,更多相關(guān)學(xué)會(huì)JDBC及獲取連接方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的反射機(jī)制詳解

    Java中的反射機(jī)制詳解

    這篇文章主要介紹了JAVA 反射機(jī)制的相關(guān)知識(shí),文中講解的非常細(xì)致,代碼幫助大家更好的理解學(xué)習(xí),感興趣的朋友可以了解下
    2021-09-09
  • 淺談Spring Boot 微服務(wù)項(xiàng)目的推薦部署方式

    淺談Spring Boot 微服務(wù)項(xiàng)目的推薦部署方式

    這篇文章主要介紹了淺談Spring Boot 微服務(wù)項(xiàng)目的推薦部署方式,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-09-09
  • SpringBoot整合FastDFS中間件實(shí)現(xiàn)文件分布管理

    SpringBoot整合FastDFS中間件實(shí)現(xiàn)文件分布管理

    FastDFS是一個(gè)開源的輕量級(jí)分布式文件系統(tǒng),它對(duì)文件進(jìn)行管理,功能包括:文件存儲(chǔ)、文件同步、文件上傳、文件下載等,解決了大容量存儲(chǔ)和負(fù)載均衡的問題,本文介紹了SpringBoot整合FastDFS中間件實(shí)現(xiàn)文件分布管理,需要的朋友可以參考下
    2024-08-08
  • Java多線程間的5種通信方式小結(jié)

    Java多線程間的5種通信方式小結(jié)

    有兩個(gè)線程,A 線程向一個(gè)集合里面依次添加元素“abc”字符串,一共添加十次,當(dāng)添加到第五次的時(shí)候,希望 B 線程能夠收到 A 線程的通知,然后 B 線程執(zhí)行相關(guān)的業(yè)務(wù)操作,本文介紹的5種通信方式都是基本這兩種模型來實(shí)現(xiàn)的,需要的朋友可以參考下
    2023-10-10
  • Java獲取兩個(gè)集合List的交集、補(bǔ)集、并集(相加)和差集(相減)的幾種方式

    Java獲取兩個(gè)集合List的交集、補(bǔ)集、并集(相加)和差集(相減)的幾種方式

    這篇文章主要介紹了Java獲取兩個(gè)集合List的交集、補(bǔ)集、并集(相加)和差集(相減)的幾種方式,文中通過代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2025-04-04
  • SpringMVC中日期格式的轉(zhuǎn)換

    SpringMVC中日期格式的轉(zhuǎn)換

    本文主要介紹了SpringMVC中日期格式轉(zhuǎn)換的相關(guān)知識(shí):用來解決日期提交轉(zhuǎn)換異常的問題。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • Java帶返回值的方法的定義和調(diào)用詳解

    Java帶返回值的方法的定義和調(diào)用詳解

    在java中,方法就是用來完成解決某件事情或?qū)崿F(xiàn)某個(gè)功能的辦法。方法實(shí)現(xiàn)的過程中,會(huì)包含很多條語句用于完成某些有意義的功能——通常是處理文本,控制輸入或計(jì)算數(shù)值,這篇文章我們來探究一下帶返回值的方法的定義和調(diào)用
    2022-04-04
  • Java中的Semaphore信號(hào)量簡單使用代碼實(shí)例

    Java中的Semaphore信號(hào)量簡單使用代碼實(shí)例

    這篇文章主要介紹了Java中的Semaphore信號(hào)量簡單使用代碼實(shí)例,Semaphore是用來保護(hù)一個(gè)或者多個(gè)共享資源的訪問,Semaphore內(nèi)部維護(hù)了一個(gè)計(jì)數(shù)器,其值為可以訪問的共享資源的個(gè)數(shù),一個(gè)線程要訪問共享資源,需要的朋友可以參考下
    2023-12-12
  • java理論基礎(chǔ)Stream性能論證測(cè)試示例

    java理論基礎(chǔ)Stream性能論證測(cè)試示例

    這篇文章主要為大家介紹了java理論基礎(chǔ)Stream性能論證的測(cè)試示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • Spring Boot 表單驗(yàn)證篇

    Spring Boot 表單驗(yàn)證篇

    在表單提交的時(shí)候,我們需要進(jìn)行驗(yàn)證。下面通過本篇文章給大家介紹Spring Boot 表單驗(yàn)證篇,需要的朋友可以參考下
    2017-08-08

最新評(píng)論

寿宁县| 页游| 巴塘县| 伽师县| 新密市| 盐津县| 嫩江县| 鲁甸县| 宁强县| 富锦市| 定西市| 大港区| 惠来县| 武汉市| 齐河县| 漳浦县| 阿瓦提县| 屏东市| 岳池县| 商洛市| 中卫市| 定日县| 东阳市| 东方市| 灌南县| 淅川县| 淳安县| 鲜城| 杭锦后旗| 万安县| 镇雄县| 阳江市| 古交市| 龙口市| 阿坝| 霞浦县| 临城县| 新沂市| 井冈山市| 英超| 沛县|