成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些

本篇內(nèi)容主要講解“MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些”吧!

創(chuàng)新互聯(lián)響應(yīng)式網(wǎng)站特點(diǎn)就是不管在電腦、平板還是手機(jī)上,H5網(wǎng)站設(shè)計(jì)都會(huì)根據(jù)屏幕尺寸自動(dòng)調(diào)節(jié)大小、圖片分辨率,并且融入一定的動(dòng)畫特效,讓網(wǎng)站看起來(lái)非常的美觀大方。從網(wǎng)站需求對(duì)接到網(wǎng)站制作設(shè)計(jì)、從代碼編寫到項(xiàng)目上線運(yùn)維,技術(shù)人員全程跟蹤,快速響應(yīng)

MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些

1.JDBC前置工作

1.1準(zhǔn)備好MySQL驅(qū)動(dòng)包

MySQL的jdbc驅(qū)動(dòng)包我們可以去官網(wǎng)下載,我們也可以maven中央倉(cāng)庫(kù)下載,這個(gè)maven中央倉(cāng)庫(kù)是什么呢?你可以理解為我們手機(jī)中的“應(yīng)用商店”軟件,它的作用和應(yīng)用商店的作用是差不多的,只不過(guò)手機(jī)應(yīng)用商店里面是手機(jī)軟件,而maven中央倉(cāng)庫(kù)里面有許多的API以及依賴包。

現(xiàn)在MySQL已經(jīng)被Oracle收購(gòu)了,Oracle的“吃相”有點(diǎn)難看,從官網(wǎng)找可以找到,但是我感覺(jué)maven中央倉(cāng)庫(kù)更好找一點(diǎn),所以我們到maven中央倉(cāng)庫(kù)下載jdbc驅(qū)動(dòng)包。

第一步,點(diǎn)進(jìn)網(wǎng)址進(jìn)入maven中央倉(cāng)庫(kù)。
MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些

第二步,搜索MySQL,選擇如下圖那一個(gè)。
MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些
第三步,點(diǎn)擊進(jìn)入,找到對(duì)應(yīng)大版本的jdbc驅(qū)動(dòng)包,如果你的MySQL是5版本那驅(qū)動(dòng)包也選擇5版本的,當(dāng)然如果你的MySQL是8版本,那你的驅(qū)動(dòng)包也選擇8版本。

我的MySQL是5版本所以我選擇大版本為5的驅(qū)動(dòng)包。
MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些
第四步,點(diǎn)擊進(jìn)去,按下圖操作,下載驅(qū)動(dòng)包。
MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些
下載完成我們的驅(qū)動(dòng)包就準(zhǔn)備好了。

1.2創(chuàng)建項(xiàng)目

使用編譯器創(chuàng)建一個(gè)項(xiàng)目,項(xiàng)目創(chuàng)建好后,按照下面的步驟操作:

第一步,創(chuàng)建一個(gè)目錄,名字隨便起,不妨叫做lib目錄。
MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些

第二步,將下載好的驅(qū)動(dòng)包拷貝到該目錄。
MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些

第三步,設(shè)置選項(xiàng),右鍵剛才創(chuàng)建并已經(jīng)將驅(qū)動(dòng)包拷貝的目錄,找到As a Lib…
MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些
MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些
這樣我們的驅(qū)動(dòng)包就導(dǎo)進(jìn)我們的項(xiàng)目中了,然后我們就能來(lái)寫jdbc代碼了。

2.JDBC編程步驟

2.1創(chuàng)建數(shù)據(jù)源DataSource

第一步,創(chuàng)建DataSource對(duì)象,來(lái)描述這個(gè)數(shù)據(jù)庫(kù)在哪里。

DataSource dataSource = new MysqlDataSource();

其中DataSourcejava.sql里面的一個(gè)jdbc接口,MysqlDataSource是來(lái)源與我們所下載驅(qū)動(dòng)包中的一個(gè)實(shí)現(xiàn)DataSource接口的類。

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

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

jdbc:mysql://127.0.0.1:3306/jdbctest?characterEncoding=utf8&useSSL=false就是一個(gè)URL,也叫唯一資源定位符。
jdbc:mysql表示該url是用于jdbc mysql的URL,因?yàn)閿?shù)據(jù)庫(kù)有很多,不止jdbc一種,所以需要細(xì)分。

具體含義自主對(duì)照:URL類型聲明://數(shù)據(jù)庫(kù)的地址/數(shù)據(jù)庫(kù)名?字符集編碼&是否加密。

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

第三步,和服務(wù)器建立連接,創(chuàng)建好數(shù)據(jù)源DataSource對(duì)象后,調(diào)用該對(duì)象的getConnection()方法,獲取java.sql.Connection對(duì)象,這樣就與數(shù)據(jù)庫(kù)建立起來(lái)連接了。

Connection connection = dataSource.getConnection();

2.3構(gòu)造并執(zhí)行sql語(yǔ)句(插入操作為例)

第四步,構(gòu)造sql語(yǔ)句字符串,并將該語(yǔ)句包裝成PreparedStatement對(duì)象,即調(diào)用Connection對(duì)象的prepareStatement方法,參數(shù)是sql字符串,會(huì)返回一個(gè)PreparedStatement對(duì)象,然后我們?cè)僬{(diào)用PreparedStatement對(duì)象中的executeUpdate方法或executeQuery方法執(zhí)行sql語(yǔ)句。

我們先以插入操作為例。

        //操作數(shù)據(jù)庫(kù) 關(guān)鍵在于構(gòu)造sql語(yǔ)句
        //jdbc 構(gòu)造的sql語(yǔ)句不需要帶上;
        String sql = "insert into student values(1, '張三')";
        //將sql字符串包裝成一個(gè)語(yǔ)句對(duì)象,表示待執(zhí)行的sql的對(duì)象
        PreparedStatement statement = connection.prepareStatement(sql);

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

其中,如果待執(zhí)行的sql語(yǔ)句操作是insert, update, delete,則使用executeUpdate方法執(zhí)行,返回值為影響數(shù)據(jù)的行數(shù),如果待執(zhí)行的sql語(yǔ)句操作是select,則使用executeQuery方法執(zhí)行,返回值是一個(gè)ResultSet結(jié)果表對(duì)象。

2.4及時(shí)釋放資源

第五步,釋放資源,我們執(zhí)行完畢sql語(yǔ)句后需要及時(shí)地將資源釋放,在JDBC編程中,最常見(jiàn)需要釋放的類或接口有三個(gè),分別是ConnectionPreparedStatement,ResultSet,其中前面兩個(gè)在jdbc插入操作中已經(jīng)使用過(guò)了,而最后一個(gè),即ResultSet,它是在執(zhí)行查詢語(yǔ)句需要用到的,調(diào)用executeQuery方法執(zhí)行查詢語(yǔ)句之后,會(huì)返回一個(gè)“臨時(shí)表”,該“臨時(shí)表”上儲(chǔ)存了查詢的結(jié)果,我們可以通過(guò)遍歷該結(jié)果表來(lái)獲取查詢數(shù)據(jù)庫(kù)的結(jié)果。

//此時(shí)sql語(yǔ)句已經(jīng)執(zhí)行完畢了,需要釋放資源statement.close();connection.close();

使用jdbc編程進(jìn)行插入操作全部代碼:

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();
        //設(shè)置數(shù)據(jù)庫(kù)所在地址
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/jdbctest?characterEncoding=utf8&useSSL=false");
        //設(shè)置登錄數(shù)據(jù)庫(kù)的賬戶名
        ((MysqlDataSource)dataSource).setUser("root");
        //設(shè)置登錄數(shù)據(jù)庫(kù)的密碼
        ((MysqlDataSource)dataSource).setPassword("123456");

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

        //操作數(shù)據(jù)庫(kù) 關(guān)鍵在于構(gòu)造sql語(yǔ)句
        //jdbc 構(gòu)造的sql語(yǔ)句不需要帶上;
        String sql = "insert into student values(1, '張三')";
        //將sql字符串包裝成一個(gè)語(yǔ)句對(duì)象,表示待執(zhí)行的sql的對(duì)象
        PreparedStatement statement = connection.prepareStatement(sql);

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

        //此時(shí)sql語(yǔ)句已經(jīng)執(zhí)行完畢了,需要釋放資源
        statement.close();
        connection.close();
    }}

運(yùn)行結(jié)果,我們通過(guò)查詢數(shù)據(jù)庫(kù)的表的結(jié)果來(lái)進(jìn)行觀察:

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)-- 執(zhí)行jdbc代碼后查詢mysql> select * from student;+------+--------+| id   | name   |+------+--------+|    1 | 張三   |+------+--------+1 row in set (0.00 sec)

程序運(yùn)行結(jié)果,表示1行受到了影響。
MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些

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

我們發(fā)現(xiàn)我們的sql語(yǔ)句是完完全全寫死的,這一點(diǎn)不好,我們可以使用輸入的操作讓用戶輸入信息進(jìn)行插入,那就需要使用到Scanner類了。

我們得到用戶輸入的信息后,我們需要對(duì)信息進(jìn)行整合,最容易想到的方式就是字符串拼接,但是這么做有如下的缺點(diǎn),一是容易寫錯(cuò),特別是單雙引號(hào)比較多的情況下,二是不安全,黑客可以使用sql注入的方式來(lái)修改數(shù)據(jù)庫(kù)。

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

這個(gè)系列的方法,第一個(gè)參數(shù)表示sql待執(zhí)行對(duì)象中第多少個(gè)?,第二個(gè)參數(shù)表示將這個(gè)?設(shè)置的內(nèi)容。比如:

        //操作數(shù)據(jù)庫(kù) 關(guān)鍵在于構(gòu)造sql語(yǔ)句
        //jdbc 構(gòu)造的sql語(yǔ)句不需要帶上;
        String sql = "insert into student values(?, ?)";
        //將sql字符串包裝成一個(gè)語(yǔ)句對(duì)象,表示待執(zhí)行的sql的對(duì)象
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);
        statement.setString(2, name);

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

運(yùn)行結(jié)果:
MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些
數(shù)據(jù)庫(kù)查詢結(jié)果:

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

2.6JDBC刪除,更新操作

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

刪除操作關(guān)鍵代碼:

        //用戶輸入
        System.out.println("請(qǐng)輸入需要?jiǎng)h除的學(xué)號(hào):");
        int id = sc.nextInt();

        //操作數(shù)據(jù)庫(kù) 關(guān)鍵在于構(gòu)造sql語(yǔ)句
        //jdbc 構(gòu)造的sql語(yǔ)句不需要帶上;
        String sql = "delete from student where id = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);
        System.out.println("statement" + statement);

程序運(yùn)行結(jié)果:
MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些

數(shù)據(jù)庫(kù)查詢結(jié)果:

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

更新操作關(guān)鍵代碼:

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

        //操作數(shù)據(jù)庫(kù) 關(guān)鍵在于構(gòu)造sql語(yǔ)句
        //jdbc 構(gòu)造的sql語(yǔ)句不需要帶上;
        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更新操作完整代碼:源代碼地址

程序運(yùn)行結(jié)果:

MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些

數(shù)據(jù)庫(kù)查詢結(jié)果:

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

2.7JDBC查詢操作

jdbc的查詢操作與插入刪除更新操作有一點(diǎn)點(diǎn)不同,執(zhí)行查詢sql語(yǔ)句的時(shí)候是調(diào)用executeQuery方法來(lái)執(zhí)行語(yǔ)句的,并且會(huì)帶回查詢的結(jié)果,我們可以通過(guò)類似與迭代器的操作來(lái)獲取查詢的結(jié)果,這個(gè)結(jié)果集使用完后需要將它釋放。

關(guān)鍵代碼:

        //操作數(shù)據(jù)庫(kù) 關(guān)鍵在于構(gòu)造sql語(yǔ)句
        //jdbc 構(gòu)造的sql語(yǔ)句不需要帶上;
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);

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

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

程序運(yùn)行結(jié)果:
MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些

到此,相信大家對(duì)“MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

當(dāng)前標(biāo)題:MySQL數(shù)據(jù)庫(kù)JDBC編程知識(shí)點(diǎn)有哪些
本文網(wǎng)址:http://jinyejixie.com/article2/psgooc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作微信小程序、網(wǎng)站導(dǎo)航關(guān)鍵詞優(yōu)化定制網(wǎng)站、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
广汉市| 中超| 丽水市| 秭归县| 承德市| 娄底市| 连山| 永新县| 利川市| 铜梁县| 琼海市| 白玉县| 广元市| 益阳市| 准格尔旗| 将乐县| 永新县| 瑞丽市| 丰城市| 平凉市| 社旗县| 饶阳县| 增城市| 沿河| 阳信县| 万州区| 龙江县| 克什克腾旗| 迁西县| 崇义县| 怀集县| 延川县| 莎车县| 康保县| 长治县| 巴彦淖尔市| 兖州市| 吉木乃县| 海盐县| 西乌珠穆沁旗| 扎囊县|