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

MySQL的JDBC編程詳解

 更新時間:2025年09月08日 09:47:17   作者:BUG召喚師  
這篇文章主要介紹了MySQL的JDBC編程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

前言

本文介紹了MySQL數(shù)據(jù)庫的JDBC操作流程,包括前置知識、寫操作和讀操作的實現(xiàn)步驟。

內(nèi)容涵蓋:

  • 1)如何創(chuàng)建Maven項目并引入MySQL依賴;
  • 2)URL格式解析;
  • 3)JDBC寫操作流程(創(chuàng)建數(shù)據(jù)源、建立連接、構(gòu)造SQL、執(zhí)行更新、釋放資源);
  • 4)使用PreparedStatement防止SQL注入;
  • 5)JDBC讀操作流程(執(zhí)行查詢、處理ResultSet結(jié)果集)。

文章通過代碼示例詳細(xì)演示了插入、查詢等基本操作,并強調(diào)了資源釋放的順序和SQL語句參數(shù)化的安全性考慮。

一、前置知識

1. 引入依賴

創(chuàng)建 Maven 項目,同時在 Maven Respository 中找到 MySQL 的依賴,在 Maven 項目中引入;

    <dependencies>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
    </dependencies>

2. 認(rèn)識 url

url 是資源在網(wǎng)路上的位置;

以下面 url 為例:

jdbc:mysql://127.0.0.1:3306/myjdbc?characterEncoding=utf8&useSS=false

  • jdbc:mysql 表示 url 的作用,是給 jdbc 操作 mysql 的;
  • 127.0.0.1 表示 IP 地址,描述網(wǎng)絡(luò)上主機所在的位置;
  • 3306 表示端口號,代表操作網(wǎng)絡(luò)的應(yīng)用程序;
  • myjdbc 表示數(shù)據(jù)庫名;
  • characterEncoding=utf8 指定字符集為 utf8;
  • useSS=false 表示設(shè)置為不加密;
  • ? 前面表示資源,后面表示訪問資源的參數(shù);
  • & 表示參數(shù)間的分隔符,多個參數(shù)使用這個符號分割;

二、JDBC 操作流程

1. JDBC 的寫操作

1. 創(chuàng)建數(shù)據(jù)源,設(shè)置好 url,用戶名和密碼;

2. 建立和數(shù)據(jù)庫服務(wù)器的連接;

3. 構(gòu)造 sql,使用 JDBC 操作數(shù)據(jù)庫仍然需要手動構(gòu)造 sql;

  • 構(gòu)造完 sql 之后需要預(yù)處理 sql 語句,目的是檢查 sql 編寫是否正確,避免直接發(fā)給服務(wù)器,導(dǎo)致服務(wù)器報錯,浪費服務(wù)器資源;
  • 除了檢查 sql 是否正確,還會解析 sql 得到結(jié)構(gòu)化的數(shù)據(jù),直接把解析好的結(jié)構(gòu)化數(shù)據(jù)發(fā)給數(shù)據(jù)庫服務(wù)器,服務(wù)器就省下了這部分解析的工作;

4. 把 sql 發(fā)給服務(wù)器,服務(wù)器返回受到影響的行數(shù);

5. 關(guān)閉連接,釋放資源;先獲得的資源后釋放,后獲得的資源先釋放;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

// 在數(shù)據(jù)庫中插入數(shù)據(jù)
public class Demo1 {
    public static void main(String[] args) throws SQLException {
        // 1. 創(chuàng)建數(shù)據(jù)源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/myjdbc?characterEncoding=utf8&useSSL=false");

        //    設(shè)置用戶名和密碼
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        // 2. 建立和數(shù)據(jù)庫服務(wù)器之間的連接
        Connection connection = dataSource.getConnection();

        // 3. 構(gòu)造 sql
        String sql = "insert into student values(1, '張三')";
        //    預(yù)處理 sql 語句
        PreparedStatement statement = connection.prepareStatement(sql);
        
        // 4. 把 sql 發(fā)給服務(wù)器
        int n = statement.executeUpdate();

        // 5. 關(guān)閉連接,釋放資源
        statement.close();
        connection.close();
    }
}

更新和刪除記錄的操作和插入的操作步驟相同,只需要更改 sql 語句;

注意:

為了解決 sql 寫死的問題,代碼中的 sql 是可以拼接參數(shù)的;

但是字符串中拼接上參數(shù),容易被注入 sql 攻擊,為了避免被注入 sql,可以使用占位符 “?”,再調(diào)用 PreparedStatement 的 setInt(), setString() 等方法進(jìn)行替換;

        // 3. 構(gòu)造 sql
        //String sql = "insert into student values(" + id + ", '" + name +"')";
        String sql = "insert into student values (?, ?)";
        //    預(yù)處理 sql 語句 - 檢查 sql 是否存在問題
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);
        statement.setString(2, name);

2. JDBC 的讀操作

讀操作和寫操作的主要區(qū)別:

1. sql 語句:需要編寫查詢語句;

2. 執(zhí)行 sql 的方法:executeQuery();

3. 執(zhí)行 sql 語句的返回值:返回的結(jié)果集的類型為 ResultSet;

  • ResultSet 默認(rèn)指向第 0 行記錄的前一個位置,調(diào)用 next() 方法,才會指向第 0 行記錄;
  • 如果 next() 指向的地方有數(shù)據(jù)記錄,返回 true,否則返回 false;

4. 獲取數(shù)據(jù)記錄的列需要使用 getInt(),getString() 等方法,取決于列的數(shù)據(jù)類型,括號中填寫要獲取臨時表的列名,如果使用別名,就寫別名;

5. 關(guān)閉資源時,要注意關(guān)閉 ResultSet,因為 ResultSet 是最后打開的,因此要最先關(guān)閉;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

// jdbc 查詢
public class Demo2 {
    public static void main(String[] args) throws SQLException {
        // 1. 創(chuàng)建數(shù)據(jù)源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/myjdbc?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123456");

        // 2. 建立連接
        Connection connection = dataSource.getConnection();

        // 3. 編寫 sql 語句
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        // 4. 執(zhí)行 sql 語句
        ResultSet resultSet = statement.executeQuery();

        // 5. 遍歷結(jié)果集合
        //    通過 next() 方法,可以獲取臨時表的每一行數(shù)據(jù),執(zhí)行到最后一行的下一行會返回 false
        while(resultSet.next()){
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");

            System.out.println("id = " + id + ", name = " + name);
        }

        // 6. 釋放資源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

 注意:讀操作同樣可以使用占位符,后續(xù)用變量去替換;

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL數(shù)據(jù)庫表的CRUD操作

    MySQL數(shù)據(jù)庫表的CRUD操作

    這篇文章主要介紹了MySQL數(shù)據(jù)庫表的CRUD操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • MySQL中int(10)和int(11)的區(qū)別詳解

    MySQL中int(10)和int(11)的區(qū)別詳解

    本文主要介紹了MySQL中int(10)和int(11)的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 關(guān)于JDBC與MySQL臨時表空間的深入解析

    關(guān)于JDBC與MySQL臨時表空間的深入解析

    這篇文章主要給大家介紹了關(guān)于JDBC與MySQL臨時表空間的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • 你還在 Select * 嗎?

    你還在 Select * 嗎?

    這篇文章主要介紹了MySql Select ,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • MySQL8.0臨時表空間的使用及解讀

    MySQL8.0臨時表空間的使用及解讀

    MySQL 8.0+引入會話級(temp_N.ibt)和全局(ibtmp1)InnoDB臨時表空間,用于存儲臨時數(shù)據(jù)及事務(wù)日志,自動創(chuàng)建與回收,重啟釋放,管理高效
    2025-09-09
  • MySQL數(shù)據(jù)庫實現(xiàn)統(tǒng)計所有表的空間占用與行數(shù)

    MySQL數(shù)據(jù)庫實現(xiàn)統(tǒng)計所有表的空間占用與行數(shù)

    這篇文章主要為大家詳細(xì)介紹了MySQL數(shù)據(jù)庫實現(xiàn)統(tǒng)計所有表的空間占用與行數(shù)的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2026-02-02
  • MySql忘記密碼修改方式適應(yīng)5.7以上版本

    MySql忘記密碼修改方式適應(yīng)5.7以上版本

    這篇文章主要介紹了MySql忘記密碼修改方式適應(yīng)5.7以上版本,需要的朋友可以參考下
    2017-06-06
  • Mysql如何按照范圍區(qū)間創(chuàng)建分區(qū)表

    Mysql如何按照范圍區(qū)間創(chuàng)建分區(qū)表

    在Mysql的范圍分區(qū)表定義中,分區(qū)范圍需要連續(xù)并且不會有覆蓋,定義范圍分區(qū)表時,使用VALUES LESS THAN操作符,這篇文章主要介紹了Mysql如何按照范圍區(qū)間創(chuàng)建分區(qū)表,需要的朋友可以參考下
    2024-08-08
  • 一文帶你學(xué)透SQL語言的核心之DML操作

    一文帶你學(xué)透SQL語言的核心之DML操作

    DML(Data?Manipulation?Language)是SQL語言的核心部分,其主要用于對數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行增刪改查,在學(xué)習(xí)數(shù)據(jù)時,學(xué)習(xí)DML操作是必不可少的一部分,本文就帶大家詳細(xì)了解SQL語言的核心DML操作,需要的朋友可以參考下
    2023-06-06
  • Mysql常見bug及解決方案超詳細(xì)講解

    Mysql常見bug及解決方案超詳細(xì)講解

    在使用MySQL的過程中,相比大家都踩過不少坑,下面這篇文章主要給大家介紹了關(guān)于Mysql常見bug及解決方案超詳細(xì)講解的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06

最新評論

小金县| 杨浦区| 义马市| 信宜市| 孟州市| 龙里县| 太康县| 松阳县| 油尖旺区| 自治县| 灌南县| 上蔡县| 泽州县| 昌乐县| 冷水江市| 神木县| 名山县| 铜鼓县| 安丘市| 镇坪县| 纳雍县| 五莲县| 大化| 威海市| 沙雅县| 阳泉市| 马鞍山市| 民县| 海兴县| 德庆县| 呼和浩特市| 延吉市| 漳平市| 石屏县| 黔江区| 上饶县| 曲水县| 霍城县| 五莲县| 都昌县| 高碑店市|