亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL數據庫JDBC編程知識點有哪些

發布時間:2022-07-14 14:24:13 來源:億速云 閱讀:184 作者:iii 欄目:MySQL數據庫

本篇內容主要講解“MySQL數據庫JDBC編程知識點有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MySQL數據庫JDBC編程知識點有哪些”吧!

MySQL數據庫JDBC編程知識點有哪些

1.JDBC前置工作

1.1準備好MySQL驅動包

MySQL的jdbc驅動包我們可以去官網下載,我們也可以maven中央倉庫下載,這個maven中央倉庫是什么呢?你可以理解為我們手機中的“應用商店”軟件,它的作用和應用商店的作用是差不多的,只不過手機應用商店里面是手機軟件,而maven中央倉庫里面有許多的API以及依賴包。

現在MySQL已經被Oracle收購了,Oracle的“吃相”有點難看,從官網找可以找到,但是我感覺maven中央倉庫更好找一點,所以我們到maven中央倉庫下載jdbc驅動包。

第一步,點進網址進入maven中央倉庫。
MySQL數據庫JDBC編程知識點有哪些

第二步,搜索MySQL,選擇如下圖那一個。
MySQL數據庫JDBC編程知識點有哪些
第三步,點擊進入,找到對應大版本的jdbc驅動包,如果你的MySQL是5版本那驅動包也選擇5版本的,當然如果你的MySQL是8版本,那你的驅動包也選擇8版本。

我的MySQL是5版本所以我選擇大版本為5的驅動包。
MySQL數據庫JDBC編程知識點有哪些
第四步,點擊進去,按下圖操作,下載驅動包。
MySQL數據庫JDBC編程知識點有哪些
下載完成我們的驅動包就準備好了。

1.2創建項目

使用編譯器創建一個項目,項目創建好后,按照下面的步驟操作:

第一步,創建一個目錄,名字隨便起,不妨叫做lib目錄。
MySQL數據庫JDBC編程知識點有哪些

第二步,將下載好的驅動包拷貝到該目錄。
MySQL數據庫JDBC編程知識點有哪些

第三步,設置選項,右鍵剛才創建并已經將驅動包拷貝的目錄,找到As a Lib…
MySQL數據庫JDBC編程知識點有哪些
MySQL數據庫JDBC編程知識點有哪些
這樣我們的驅動包就導進我們的項目中了,然后我們就能來寫jdbc代碼了。

2.JDBC編程步驟

2.1創建數據源DataSource

第一步,創建DataSource對象,來描述這個數據庫在哪里。

DataSource dataSource = new MysqlDataSource();

其中DataSourcejava.sql里面的一個jdbc接口,MysqlDataSource是來源與我們所下載驅動包中的一個實現DataSource接口的類。

第二步,設置數據庫的“位置”(URL),登錄數據庫的賬戶名和密碼。

        //設置數據庫所在地址
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/jdbctest/characterEncoding=utf8&useSSL=false");
        //設置登錄數據庫的賬戶名
        ((MysqlDataSource)dataSource).setUser("root");
        //設置登錄數據庫的密碼
        ((MysqlDataSource)dataSource).setPassword("123456");

jdbc:mysql://127.0.0.1:3306/jdbctest?characterEncoding=utf8&useSSL=false就是一個URL,也叫唯一資源定位符。
jdbc:mysql表示該url是用于jdbc mysql的URL,因為數據庫有很多,不止jdbc一種,所以需要細分。

具體含義自主對照:URL類型聲明://數據庫的地址/數據庫名?字符集編碼&是否加密

2.2連接數據庫

第三步,和服務器建立連接,創建好數據源DataSource對象后,調用該對象的getConnection()方法,獲取java.sql.Connection對象,這樣就與數據庫建立起來連接了。

Connection connection = dataSource.getConnection();

2.3構造并執行sql語句(插入操作為例)

第四步,構造sql語句字符串,并將該語句包裝成PreparedStatement對象,即調用Connection對象的prepareStatement方法,參數是sql字符串,會返回一個PreparedStatement對象,然后我們再調用PreparedStatement對象中的executeUpdate方法或executeQuery方法執行sql語句。

我們先以插入操作為例。

        //操作數據庫 關鍵在于構造sql語句
        //jdbc 構造的sql語句不需要帶上;
        String sql = "insert into student values(1, '張三')";
        //將sql字符串包裝成一個語句對象,表示待執行的sql的對象
        PreparedStatement statement = connection.prepareStatement(sql);

        //執行sql
        //如果待執行的sql語句操作是insert, update, delete,則使用executeUpdate方法執行,返回值為影響數據的行數
        //如果待執行的sql語句操作是select,則使用executeQuery方法執行
        int ret = statement.executeUpdate();

其中,如果待執行的sql語句操作是insert, update, delete,則使用executeUpdate方法執行,返回值為影響數據的行數,如果待執行的sql語句操作是select,則使用executeQuery方法執行,返回值是一個ResultSet結果表對象。

2.4及時釋放資源

第五步,釋放資源,我們執行完畢sql語句后需要及時地將資源釋放,在JDBC編程中,最常見需要釋放的類或接口有三個,分別是ConnectionPreparedStatementResultSet,其中前面兩個在jdbc插入操作中已經使用過了,而最后一個,即ResultSet,它是在執行查詢語句需要用到的,調用executeQuery方法執行查詢語句之后,會返回一個“臨時表”,該“臨時表”上儲存了查詢的結果,我們可以通過遍歷該結果表來獲取查詢數據庫的結果。

//此時sql語句已經執行完畢了,需要釋放資源statement.close();connection.close();

使用jdbc編程進行插入操作全部代碼:

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import java.util.Scanner;public class TestJdbc {

    public static void main(String[] args) throws SQLException {
        DataSource dataSource = new MysqlDataSource();
        //設置數據庫所在地址
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/jdbctest?characterEncoding=utf8&useSSL=false");
        //設置登錄數據庫的賬戶名
        ((MysqlDataSource)dataSource).setUser("root");
        //設置登錄數據庫的密碼
        ((MysqlDataSource)dataSource).setPassword("123456");

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

        //操作數據庫 關鍵在于構造sql語句
        //jdbc 構造的sql語句不需要帶上;
        String sql = "insert into student values(1, '張三')";
        //將sql字符串包裝成一個語句對象,表示待執行的sql的對象
        PreparedStatement statement = connection.prepareStatement(sql);

        //執行sql
        //如果待執行的sql語句操作是insert, update, delete,則使用executeUpdate方法執行,返回值為影響數據的行數
        //如果待執行的sql語句操作是select,則使用executeQuery方法執行
        int ret = statement.executeUpdate();

        //此時sql語句已經執行完畢了,需要釋放資源
        statement.close();
        connection.close();
    }}

運行結果,我們通過查詢數據庫的表的結果來進行觀察:

mysql> create database jdbctest;Query OK, 1 row affected (0.01 sec)mysql> use jdbctest;Database changed
mysql> create table student(id int, name varchar(20));Query OK, 0 rows affected (0.02 sec)mysql> show tables;+--------------------+| Tables_in_jdbctest |+--------------------+| student            |+--------------------+1 row in set (0.00 sec)-- 執行jdbc代碼后查詢mysql> select * from student;+------+--------+| id   | name   |+------+--------+|    1 | 張三   |+------+--------+1 row in set (0.00 sec)

程序運行結果,表示1行受到了影響。
MySQL數據庫JDBC編程知識點有哪些

2.5不要寫死的代碼(以插入為例)

我們發現我們的sql語句是完完全全寫死的,這一點不好,我們可以使用輸入的操作讓用戶輸入信息進行插入,那就需要使用到Scanner類了。

我們得到用戶輸入的信息后,我們需要對信息進行整合,最容易想到的方式就是字符串拼接,但是這么做有如下的缺點,一是容易寫錯,特別是單雙引號比較多的情況下,二是不安全,黑客可以使用sql注入的方式來修改數據庫。

所以更好的方法就是把sql字符串中待輸入的信息使用?來代替或者叫做占位,然后通過PreparedStatement中的setXXX系列方法來逐個設置每個?的內容是什么。

這個系列的方法,第一個參數表示sql待執行對象中第多少個?,第二個參數表示將這個?設置的內容。比如:

        //操作數據庫 關鍵在于構造sql語句
        //jdbc 構造的sql語句不需要帶上;
        String sql = "insert into student values(?, ?)";
        //將sql字符串包裝成一個語句對象,表示待執行的sql的對象
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);
        statement.setString(2, name);

完整代碼:jdbc插入操作源代碼

運行結果:
MySQL數據庫JDBC編程知識點有哪些
數據庫查詢結果:

mysql> select * from student;+------+--------+| id   | name   |+------+--------+|    1 | 張三   ||    2 | 李四   |+------+--------+2 rows in set (0.00 sec)

2.6JDBC刪除,更新操作

在jdbc編程中,刪除操作和更新操作,它的步驟與插入操作是一模一樣的,只不過就是構造的sql語句不一樣,其他都一樣。

刪除操作關鍵代碼:

        //用戶輸入
        System.out.println("請輸入需要刪除的學號:");
        int id = sc.nextInt();

        //操作數據庫 關鍵在于構造sql語句
        //jdbc 構造的sql語句不需要帶上;
        String sql = "delete from student where id = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);
        System.out.println("statement" + statement);

程序運行結果:
MySQL數據庫JDBC編程知識點有哪些

數據庫查詢結果:

mysql> select * from student;+------+--------+| id   | name   |+------+--------+|    1 | 張三   |+------+--------+1 row in set (0.00 sec)

更新操作關鍵代碼:

        //用戶輸入 需要修改的id 與修改后的姓名
        System.out.println("請輸入需要修改的學號:");
        int id = sc.nextInt();
        sc.nextLine();
        System.out.println("請輸入修改后的姓名:");
        String afterName = sc.nextLine();

        //操作數據庫 關鍵在于構造sql語句
        //jdbc 構造的sql語句不需要帶上;
        String sql = "update student set name = ? where id = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1, afterName);
        statement.setInt(2, id);
        System.out.println("statement" + statement);

jdbc更新操作完整代碼:源代碼地址

程序運行結果:

MySQL數據庫JDBC編程知識點有哪些

數據庫查詢結果:

mysql> select * from student;+------+--------+| id   | name   |+------+--------+|    1 | 王五   |+------+--------+1 row in set (0.00 sec)

2.7JDBC查詢操作

jdbc的查詢操作與插入刪除更新操作有一點點不同,執行查詢sql語句的時候是調用executeQuery方法來執行語句的,并且會帶回查詢的結果,我們可以通過類似與迭代器的操作來獲取查詢的結果,這個結果集使用完后需要將它釋放。

關鍵代碼:

        //操作數據庫 關鍵在于構造sql語句
        //jdbc 構造的sql語句不需要帶上;
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        //執行sql 查詢操作返回的不是int 而是一個臨時表 使用ResultSet對象表示這個臨時表
        ResultSet ret = statement.executeQuery();

        //便利結果集合
        //預期結果格式//        +------+--------+//        | id   | name   |//        +------+--------+//        |    1 | 王五   |//        +------+--------+
        while (ret.next()) {
            int id = ret.getInt("id");
            String name = ret.getString("name");
            System.out.println("id:" + id + ", name:" + name);
        }
        //關閉資源
        ret.close();
        statement.close();
        connection.close();

程序運行結果:
MySQL數據庫JDBC編程知識點有哪些

到此,相信大家對“MySQL數據庫JDBC編程知識點有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜兴市| 南岸区| 滦平县| 广德县| 新密市| 修武县| 甘南县| 富蕴县| 灵丘县| 富民县| 夹江县| 江永县| 开鲁县| 通州区| 信宜市| 无棣县| 乐业县| 门头沟区| 弥勒县| 夏邑县| 凤山市| 自治县| 寻乌县| 万全县| 涞水县| 天气| 乌什县| 福建省| 探索| 磴口县| 德惠市| 平谷区| 凯里市| 虞城县| 苏州市| 蛟河市| 木里| 子洲县| 和龙市| 武邑县| 河池市|