欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

IDEA使用JDBC導(dǎo)入配置jar包連接MySQL數(shù)據(jù)庫

 更新時間:2022年12月03日 14:57:45   作者:敲代碼の流川楓  
這篇文章介紹了IDEA使用JDBC安裝配置jar包連接MySQL數(shù)據(jù)庫的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

jdbc編程簡介

JDBC,Java Database Connectivity ,java數(shù)據(jù)庫連接.是一種執(zhí)行SQL語句的API,是java中數(shù)據(jù)庫連接規(guī)范,這個API由java.sql.*,javax.sql.*包中的一些類和接口組成,它為Java開發(fā)人員操作數(shù)據(jù)庫提供了一個標(biāo)準(zhǔn)的API,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問

1.導(dǎo)入jar包

jar包下載地址:

https://mvnrepository.com/

1.輸入地址->輸入mysql搜素

2.點(diǎn)擊第一個后選擇版本

3.選擇版本和本機(jī)mysql大版本相同的 jar包

4.點(diǎn)擊下載jar包

5.創(chuàng)建lib包,導(dǎo)入jar包,直接cv

6.右擊lib->點(diǎn)擊Add as Library

此時就解析出了jar包中的內(nèi)容,我們就可以進(jìn)行對數(shù)據(jù)庫據(jù)的編程了

2.建立數(shù)據(jù)庫連接

和數(shù)據(jù)庫建立連接時,需要用到數(shù)據(jù)庫,首先創(chuàng)建一個數(shù)據(jù)庫和一張表然后進(jìn)行數(shù)據(jù)庫連接

mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

jdbc編程時用到的資源,必須要導(dǎo)入jar包才能用

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.*;

2.1創(chuàng)建數(shù)據(jù)源描述數(shù)據(jù)庫服務(wù)器在哪

使用 DataSource 描述 MySQL 服務(wù)器的位置.

DataSource dataSource = new MysqlDataSource();       
    ((MysqlDataSource)dataSource).setUrl
    ("jdbc:mysql://127.0.0.1:3306/java_2?characterEncoding=utf8&useSSL=false");
    ((MysqlDataSource)dataSource).setUser("root");                            
    ((MysqlDataSource)dataSource).setPassword("123456");

url是唯一地址定位符,就是網(wǎng)址

127.0.0.1:數(shù)據(jù)庫服務(wù)器所在的IP地址,這是個特殊的IP,表示主機(jī)自己,環(huán)回網(wǎng)址,相當(dāng)于this. 只要數(shù)據(jù)庫服務(wù)器和jdbc程序在一臺電腦上都可以使用這個IP :3306是端口號,安裝時默認(rèn)的,使用IP確定了主機(jī),網(wǎng)絡(luò)數(shù)據(jù)報給那個程序是通過端口號來識別出數(shù)據(jù)庫服務(wù)器的 java_2數(shù)據(jù)庫名 characterEncoding=utf8字符編碼方式 useSSL=false關(guān)閉加密功能

2.2實現(xiàn)一個mysql客戶端通過網(wǎng)絡(luò)和服務(wù)器進(jìn)行通信

Connection connection = dataSource.getConnection();

要注意使用Java.sql的Connection

3.使用代碼操作數(shù)據(jù)庫

控制客戶端給數(shù)據(jù)庫發(fā)送請求,執(zhí)行操作

3.1增刪改操作

增刪改和查詢稍有不同~

增加操作

構(gòu)造 SQL 語句. JDBC 操作數(shù)據(jù)庫, 本質(zhì)仍然是通過 SQL 來描述數(shù)據(jù)庫操作

String sql = "insert into student values(001,'張三')";
PreparedStatement statement = connection.prepareStatement(sql);
int ret = statement.executeUpdate();
statement.close();
connection.close();

String sql 描述的是sql是什么樣的

還需要一個特殊的類:

執(zhí)行是靠PreparedStatement,它會對sql進(jìn)行一些預(yù)處理,解析之類的,之前通過cmd輸入的語句是發(fā)送給服務(wù)器端讓服務(wù)器進(jìn)行解析

當(dāng)前數(shù)據(jù)是寫死的,我們更希望是動態(tài)的

我們通過控制臺輸入一些信息,來操作數(shù)據(jù)庫

        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入學(xué)號");
        int id = scanner.nextInt();
        System.out.println("請輸入姓名");
        String name = scanner.next();
        String sql = "insert into student values(" + id + ",'" + name+ "')";
        PreparedStatement statement = connection.prepareStatement(sql);
        int ret = statement.executeUpdate();

但是這種操作還存在一個問題

這樣的代碼可讀性很低,另一方面,這個代碼還容易引起SQL注入攻擊

如果輸入這樣的代碼就會在插入的同時引起很多其他的問題

因此我們提出更靠譜的方案:通過占位符替換的方法輸入操作信息

        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入學(xué)號");
        int id = scanner.nextInt();
        System.out.println("請輸入姓名");
        String name = scanner.next();
        String sql = "insert into student values(?,?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.setString(2,name);
        int ret = statement.executeUpdate();

注意:這里的占位符下標(biāo)是從1開始的!!

執(zhí)行增加,刪除,更新三個操作用executeUpdate執(zhí)行,代碼和增加的代碼是相同的

執(zhí)行查詢操作使用executeQuery

更新操作

也是通過占位符來操作

Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入學(xué)號");
        int id = scanner.nextInt();
        System.out.println("請輸入修改的姓名");
        String name = scanner.next();
        String sql = "update student set name = ? where id = ? ";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);
        statement.setInt(2,id);
        int ret = statement.executeUpdate();
statement.close();
connection.close();

數(shù)據(jù)庫中的結(jié)果:

mysql> select*from student;
+------+------+
| id   | name |
+------+------+
|    1 | 張三 |
|    2 | 李四 |
|    3 | 王五 |
|    5 | 趙六 |
+------+------+
4 rows in set (0.00 sec)
更新后:
mysql> select*from student;
+------+--------+
| id   | name   |
+------+--------+
|    1 | 張三   |
|    2 | 李四   |
|    3 | wangqi |
|    5 | 趙六   |
+------+--------+
4 rows in set (0.00 sec)

刪除操作

Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入要刪除的學(xué)號");
        int id = scanner.nextInt();
 
        String sql = "delete from student where id = ? ";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        int ret = statement.executeUpdate();
statement.close();
        connection.close();

結(jié)果:

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

三個操作的代碼是相同的

執(zhí)行時給服務(wù)器發(fā)送網(wǎng)絡(luò)請求

int ret = statement.executeUpdate();

ret返回的是一個整數(shù),表示執(zhí)行的結(jié)果影響到了多少行

3.2查詢操作

查詢操作用到的是

ResultSet ret = statement.executeQuery();

與上面三個操作不同的是:

executeUpdate 只能返回一個 int.

executeQuery 返回的是一個 ResultSet 對象. 可以把這個對象視為是一個 "臨時表"

增刪改返回的是影響的行數(shù),只返回一個整數(shù)

查詢的結(jié)果集合是一張表,因此比其它幾個操作多一個遍歷,遍歷后才能看到結(jié)果

String sql = "select*from student";
        PreparedStatement statement = connection.prepareStatement(sql);
        ResultSet ret = statement.executeQuery();
        //遍歷臨時表, 拿到里面的數(shù)據(jù).
        //    resultSet 簡單的當(dāng)成一個類似于 "迭代器" 
        //    next 如果沒有到達(dá)末尾, 就是返回 true, 要繼續(xù)循環(huán).
        //    next 如果到達(dá)末尾, 就返回 false, 結(jié)束循環(huán).
        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();

獲取哪一列,就用getXXX方法 ,XXX為列的類型

結(jié)果:

4.斷開連接釋放資源

java有GC即垃圾回收機(jī)制,會自動處理申請的內(nèi)存,但是像這種連接的資源還需要我們手動釋放

資源的釋放順序是和創(chuàng)建順序相反的

釋放的順序:先用到的資源后釋放

ret.close();
statement.close();
connection.close();

到此這篇關(guān)于IDEA使用JDBC導(dǎo)入配置jar包連接MySQL數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)JDBC連接MySQL數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Thymeleaf對象的使用之基本對象實例解析

    Thymeleaf對象的使用之基本對象實例解析

    這篇文章主要介紹了Thymeleaf對象的使用之基本對象實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • MyBatis中一對多的xml配置方式(嵌套查詢/嵌套結(jié)果)

    MyBatis中一對多的xml配置方式(嵌套查詢/嵌套結(jié)果)

    這篇文章主要介紹了MyBatis中一對多的xml配置方式(嵌套查詢/嵌套結(jié)果),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 如何給yml配置文件的密碼加密(SpringBoot)

    如何給yml配置文件的密碼加密(SpringBoot)

    這篇文章主要介紹了如何給yml配置文件的密碼加密(SpringBoot),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 最新評論