JDBC初識

JDBC

1. JDBC介紹

	Java Database Connectivity
	Java規定的數據庫連接接口,SUN公司提供的,爲了簡化程序員操作數據庫的過程。
	SUN公司要求數據庫提供商,按照JDBC API接口規範,完成對應Java程序的數據連接操作,規範Jar包,並且提供對應的操作方法。
	
	JDBC接口中核心的內容
		java.sql.*
		javax.sql.*

2. JDBC連接數據庫所需的必要條件

cmd > mysql -hlocalhost -uroot -p123456

1. 明確連接使用的數據庫是MySQL數據庫
2. 明確當前數據庫的主機地址,IP地址,域名,localhost表示本地
3. -uroot 用戶名
4. -p123456 對應用戶名密碼

JDBC連接數據庫也是需要這四個條件的
	1. 確定連接的數據庫所在網絡地址和對應操作哪一個數據庫
		這裏使用一個符合JDBC規範的URL
		URL jdbc:mysql://localhost:3306/nzgp2001
	2. 用戶名 user root
	3. 密碼 password 123456
	
URL
	含義
		jdbc目前操作數據庫的主協議
		mysql子協議
		localhost 數據庫服務器所在的網路偶地址
		3306 數據庫默認端口號
		nzgp2001 當前URL連接操作對應數據庫是哪一個

JDBC是第三方提供的內容
	獲取對應的Jar
		mysql-connector-java-5.1.47.jar
		從官網獲取對應的Jar包
		mvnrepository Maven查詢網址

3. JDBC連接MySQL數據庫

3.1 操作流程
1. 導入Jar包
	在項目根目錄創建lib目錄,放入對應jar包,引入依賴
2. 加載驅動
	Java程序只是規定了接口規範,但是沒有實現
	數據庫連接需要使用JDBC對應驅動
3. 準備必要參數連接數據庫
4. 獲取數據庫連接
5. 關閉資源
3.2 數據庫連接演示代碼
package com.qfedu.a_jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * JDBC連接數據庫操作,獲取數據庫連接方式
 *
 * @author Anonymous 2020/3/23 15:51
 */
public class Demo1 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        /*
        1. 加載驅動
         */
        Class.forName("com.mysql.jdbc.Driver");

        /*
        2. 準備必要的數據
         */
        String url = "jdbc:mysql://localhost:3306/nzgp2001?useSSL=true";
        String user = "root";
        String password = "123456";

        /*
         3. 獲取數據庫連接
         */
        Connection connection = DriverManager.getConnection(url, user, password);

        System.out.println(connection);

        /*
        4. 關閉資源
         */
        connection.close();

    }
}
3.3 數據庫驅動加載過程
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    //
    // Register ourselves with the DriverManager
    // 在.class文件加載到內存時運行,並且有且只執行一次
    // 代碼初始化過程!!!
    static {
        try {
            // DriverManager驅動管理器註冊了當前com.mysql.jdbc.Driver
            // 相對於當前Java程序擁有了連接MySQL數據庫的必要的驅動條件
            java.sql.DriverManager.registerDriver(new Driver());
        } catch (SQLException E) {
            throw new RuntimeException("Can't register driver!");
        }
    }

    /**
     * Construct a new driver and register it with DriverManager
     * 
     * @throws SQLException
     *             if a database error occurs.
     */
    public Driver() throws SQLException {
        // Required for Class.forName().newInstance()
    }
}

4. JDBC核心API[能記住最好,記不住拉倒]

class java.sql.DriverManager 驅動管理類
--| static java.sql.Connection getConnection(String url, String user, String password);
/*
	這裏是根據聽的數據庫連接URL,對應的user用戶名和password密碼,獲取數據庫連接對象
*/

interface java.sql.Connection 數據庫連接接口
--| java.sql.Statement createStatement();
/*
	獲取數據庫SQL語句搬運工對象,從Java程序搬運SQL語句到數據庫中,同時Statement也是一個資源對象。
*/
--| java.sql.PreparedStatement prepareStatement(String sql);
/*
	獲取數據庫SQL語句【預處理】搬運工對象,Java程序的SQL語句,在創建PreparedStatement對象時,將SQL語句交給數據庫預處理操作,可以解決一定的【SQL語句注入問題】,同時提高一定的效率,PreparedStatement也是一個資源對象
*/

interface java.sql.Statement 數據庫SQL語句搬運工對象
--| int executeUpdate(String sql);
/*
	執行數據庫修改數據,insert,update,delete...,返回值類型是int類型,是當前SQL語句搬運到數據庫執行之後,數據庫運行對於當前操作受到影響的行數
	2 rows affected in 5 ms
*/
--| java.sql.ResultSet executeQuery(String sql);
/*
	執行數據庫查詢語句,select操作,執行的結果是一個java.sql.ResultSet,結果集對象,當前操作返回值never null
*/

interface java.sql.PreparedStatement 數據庫SQL語句【預處理】搬運工對象
    PreparedStatement extends java.sql.Statement
--| int executeUpdate();
/*
	執行數據庫修改操作,insert,update,delete...處理的SQL語句是在創建PreparedStatement對象過程預處理的SQL語句,並且返回值是int類型, 爲當前操作對於數據表中收到影響的行數
*/
--| java.sql.ResultSet executeQuery();
/*
	執行數據庫查詢語句,select操作,的SQL語句是在創建PreparedStatement對象過程預處理的SQL語句,執行的結果是一個java.sql.ResultSet,結果集對象,當前操作返回值never null
*/
--| setXXX(int index, XXX value)
/*
	PreparedStatement預處理的SQL語句是可以帶有參數的,這裏是對於SQL語句參數進行賦值操作,這裏有指定的操作下標,和對應的數據,數據類型繁多
*/
    
interface java.sql.ResultSet 數據庫結果集接口
--|XXX getXXX(int columnIndex);
/*
	根據查詢結果中,字段所處的位置下標獲取對應數據,XXX是指定類型
*/
--|XXX getXXX(String fieldName);
/*
	根據查詢結果中,字段所處的字段名獲取對應數據,XXX是指定類型
*/
--| boolean next();
/*
	判斷當前查詢結果集中是否還有可以鍵遍歷操作的數據,如果沒有。或則當前結果集中是無數據情況 Empty Set,直接返回fasle
*/

5. Statement操作SQL語句

5.1 Statement插入SQL數據操作
@Test
public void testInsert() {
    Statement statement = null;
    Connection connection = null;
    try {
        // 1. 加載驅動
        Class.forName("com.mysql.jdbc.Driver");
        // 2. 準備必要的連接數據
        String url = "jdbc:mysql://localhost:3306/nzgp2001?useSSL=true";
        String user = "root";
        String password = "123456";
        //3. 獲取數據庫連接
        connection = DriverManager.getConnection(url, user, password);
        // 4. 獲取Statement對象
        statement = connection.createStatement();
        // 5. 準備SQL語句
        String sql = "insert into nzgp2001.user(userName, password) value ('老黑', '123456')";
        // 6. 執行SQL語句
        int affectedRows = statement.executeUpdate(sql);
        System.out.println("affectedRows:" + affectedRows);
    } catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
    } finally {
        // 7. 關閉資源
        try {
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
5.2 Statement修改SQL數據操作
@Test
public void testUpdate() {
    Statement statement = null;
    Connection connection = null;
    try {
        // 1. 加載驅動
        Class.forName("com.mysql.jdbc.Driver");
        // 2. 準備必要的連接數據
        String url = "jdbc:mysql://localhost:3306/nzgp2001?useSSL=true";
        String user = "root";
        String password = "123456";
        //3. 獲取數據庫連接
        connection = DriverManager.getConnection(url, user, password);
        // 4. 獲取Statement對象
        statement = connection.createStatement();
        // 5. 準備SQL語句
        String sql = "update nzgp2001.user set userName ='航海中路彭于晏' where id = 1";
        // 6. 執行SQL語句
        int affectedRows = statement.executeUpdate(sql);
        System.out.println("affectedRows:" + affectedRows);
    } catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
    } finally {
        // 7. 關閉資源
        try {
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
5.3 Statement刪除SQL數據操作
@Test
public void testDelete() {
    Statement statement = null;
    Connection connection = null;
    try {
        // 1. 加載驅動
        Class.forName("com.mysql.jdbc.Driver");
        // 2. 準備必要的連接數據
        String url = "jdbc:mysql://localhost:3306/nzgp2001?useSSL=true";
        String user = "root";
        String password = "123456";
        //3. 獲取數據庫連接
        connection = DriverManager.getConnection(url, user, password);
        // 4. 獲取Statement對象
        statement = connection.createStatement();
        // 5. 準備SQL語句
        String sql = "delete from user where id > 2";
        // 6. 執行SQL語句
        int affectedRows = statement.executeUpdate(sql);
        System.out.println("affectedRows:" + affectedRows);
    } catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
    } finally {
        // 7. 關閉資源
        try {
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章