首頁 > 軟體

IDEA使用JDBC匯入設定jar包連線MySQL資料庫

2022-12-05 14:01:09

jdbc程式設計簡介

JDBC,Java Database Connectivity ,java資料庫連線.是一種執行SQL語句的API,是java中資料庫連線規範,這個API由java.sql.*,javax.sql.*包中的一些類和介面組成,它為Java開發人員運算元據庫提供了一個標準的API,可以為多種關聯式資料庫提供統一存取

1.匯入jar包

jar包下載地址:

https://mvnrepository.com/

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

2.點選第一個後選擇版本

3.選擇版本和本機mysql大版本相同的 jar包

4.點選下載jar包

5.建立lib包,匯入jar包,直接cv

6.右擊lib->點選Add as Library

此時就解析出了jar包中的內容,我們就可以進行對資料庫據的程式設計了

2.建立資料庫連線

和資料庫建立連線時,需要用到資料庫,首先建立一個資料庫和一張表然後進行資料庫連線

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程式設計時用到的資源,必須要匯入jar包才能用

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

2.1建立資料來源描述資料庫伺服器在哪

使用 DataSource 描述 MySQL 伺服器的位置.

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是唯一地址定位符,就是網址

127.0.0.1:資料庫伺服器所在的IP地址,這是個特殊的IP,表示主機自己,環回網址,相當於this. 只要資料庫伺服器和jdbc程式在一臺電腦上都可以使用這個IP :3306是埠號,安裝時預設的,使用IP確定了主機,網路資料包給那個程式是通過埠號來識別出資料庫伺服器的 java_2資料庫名 characterEncoding=utf8字元編碼方式 useSSL=false關閉加密功能

2.2實現一個mysql使用者端通過網路和伺服器進行通訊

Connection connection = dataSource.getConnection();

要注意使用Java.sql的Connection

3.使用程式碼運算元據庫

控制使用者端給資料庫傳送請求,執行操作

3.1增刪改操作

增刪改和查詢稍有不同~

增加操作

構造 SQL 語句. JDBC 運算元據庫, 本質仍然是通過 SQL 來描述資料庫操作

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

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

還需要一個特殊的類:

執行是靠PreparedStatement,它會對sql進行一些預處理,解析之類的,之前通過cmd輸入的語句是傳送給伺服器端讓伺服器進行解析

當前資料是寫死的,我們更希望是動態的

我們通過控制檯輸入一些資訊,來運算元據庫

        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入學號");
        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("請輸入學號");
        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();

注意:這裡的預留位置下標是從1開始的!!

執行增加,刪除,更新三個操作用executeUpdate執行,程式碼和增加的程式碼是相同的

執行查詢操作使用executeQuery

更新操作

也是通過預留位置來操作

Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入學號");
        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();

資料庫中的結果:

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("請輸入要刪除的學號");
        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();

結果:

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

三個操作的程式碼是相同的

執行時給伺服器傳送網路請求

int ret = statement.executeUpdate();

ret返回的是一個整數,表示執行的結果影響到了多少行

3.2查詢操作

查詢操作用到的是

ResultSet ret = statement.executeQuery();

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

executeUpdate 只能返回一個 int.

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

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

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

String sql = "select*from student";
        PreparedStatement statement = connection.prepareStatement(sql);
        ResultSet ret = statement.executeQuery();
        //遍歷臨時表, 拿到裡面的資料.
        //    resultSet 簡單的當成一個類似於 "迭代器" 
        //    next 如果沒有到達末尾, 就是返回 true, 要繼續迴圈.
        //    next 如果到達末尾, 就返回 false, 結束迴圈.
        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為列的型別

結果:

4.斷開連線釋放資源

java有GC即垃圾回收機制,會自動處理申請的記憶體,但是像這種連線的資源還需要我們手動釋放

資源的釋放順序是和建立順序相反的

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

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

到此這篇關於IDEA使用JDBC匯入設定jar包連線MySQL資料庫的文章就介紹到這了,更多相關JDBC連線MySQL資料庫內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com