初識JDBC編程

我發現要學習一個新的知識,首先要搞懂它是什麼?能做什麼?怎麼去做?學習了數據庫的DDL、DML了的基本操作,備操作的數據庫要和java代碼產生連接,我們就必須學會JDBC編程。

目錄

java中JDBC的定義

JDBC使用步驟

創建數據庫連接Connection

創建操作命令Statement

使用操作命令來執行SQL

處理結果集ResultSet

釋放資源

完整代碼

JDBC常用接口和類 

數據庫連接Connection

Statement對象

ResultSet對象 

 


java中JDBC的定義

JDBC,即Java Database Connectivityjava數據庫連接。是一種用於執行SQL語句的Java API,它是Java中的數據庫連接規範。這個APIjava.sql.*,javax.sql.* 包中的一些類和接口組成,它爲Java開發人員操作數據庫提供 了一個標準的API,可以爲多種關係數據庫提供統一訪問。即JDBC是一個連接java程序的數據庫的一個標準,在代碼中的表現是一組 interface。

JDBC使用步驟

創建數據庫連接Connection

1.加載JDBC驅動

        Class.forName("com.mysql.jdbc.Driver");

這樣調用初始化com.mysql.jdbc.Driver類,即將該類加載到JVM方法區,並執行該類的靜態方法塊、靜態屬性。

2.創建數據庫連接:

        String url = "jdbc:mysql://127.0.0.1:3306/people?                
                      useSSL=false&characterEncoding=utf8";
        String user = "root"; // 連接 mysql 的用戶名
        String password = ""; // 連接 mysql 的密碼
        Connection connection = DriverManager.getConnection(
                url, user, password
        );

jdbc:mysql:// :在jdbc中使用mysql的固定協議
127.0.0.1:本機的IP地址(localhost or 本地的域名)
3306:mysql服務器的標準端口
people:默認的數據庫
useSSl:是否使用安全的套接字
characterEncoding=utf8:採用utf-8編碼方式進行編碼

因此可以得出其固定格式是:

jdbc:mysql://服務器地址:端口/數據庫名?參數名=參數值

創建操作命令Statement

Statement statement = connection.createStatement();

使用操作命令來執行SQL

增:

        String sql = "INSERT INTO users (id, name) VALUES (1, '東東')";
        statement.executeUpdate(sql); // 通過 statement 對象來執行 SQL 語句

刪:

        String sql = "DELETE FROM users WHERE id = 1";
        statement.executeUpdate(sql); // 通過 statement 對象來執行 SQL 語句

改:

        String sql = "UPDATE users SET name = '西西' WHERE id = 1";
        statement.executeUpdate(sql); // 通過 statement 對象來執行 SQL 語句

查:

        {
            Statement statement = connection.createStatement();
            String sql = "SELECT id, name FROM users";
            ResultSet resultSet = statement.executeQuery(sql);

            List<String> nameList = new ArrayList<>();
            while (resultSet.next()) {
                int id = resultSet.getInt(1);   // 下標是從 1 開始的,不是從 0 開始的
                int id = resultSet.getInt("id"); // 通過字段名稱獲取
                // 結果集馬上需要銷燬,所以通過 List 保存結果
                nameList.add(name);

                System.out.println(id + ", " + name);
            }

            resultSet.close();

            statement.close();
        }

-需要拿到結果集對象,從結果集對象中遍歷獲取數據,銷燬結果集對象[反向銷燬]

-不同的類型調用不同的方法

                int r = resultSet.getInt();
                long r = resultSet.getLong();
                String r = resultSet.getString();

-獲取屬性的兩種方法

                int id = resultSet.getInt(1);
                String name = resultSet.getString("name");

注意下標是從1開始的。 

處理結果集ResultSet

            while (resultSet.next()) {
                int id = resultSet.getInt(1);   // 下標是從 1 開始的,不是從 0 開始的
                int id = resultSet.getInt("id"); // 通過字段名稱獲取
                // 結果集馬上需要銷燬,所以通過 List 保存結果
                nameList.add(name);

                System.out.println(id + ", " + name);
            }

next()的作用:1.返回false或true 2.判斷是否還有數據 

釋放資源

            resultSet.close();

            statement.close();

完整代碼

public class Demo {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {

        String url = "jdbc:mysql://127.0.0.1:3306/people?useSSL=false&characterEncoding=utf8";
        String user = "root"; // 連接 mysql 的用戶名
        String password = ""; // 連接 mysql 的密碼
        Connection connection = DriverManager.getConnection(
                url, user, password
        );

        /*
        Statement statement = connection.createStatement();
        String sql = "INSERT INTO users (id, name) VALUES (1, '東東') ,(2,'西西'),(3,'南南'),(4,'北北')";
        statement.executeUpdate(sql); // 通過 statement 對象來執行 SQL 語句
        statement.close();
        */


      /*
        String sql = "UPDATE users SET name = '西西' WHERE id = 1";
        statement.executeUpdate(sql); // 通過 statement 對象來執行 SQL 語句
        */

      /*
        String sql = "DELETE FROM users WHERE id = 1";
        statement.executeUpdate(sql); // 通過 statement 對象來執行 SQL 語句
        */

        {
            Statement statement = connection.createStatement();
            String sql = "SELECT id, name FROM users";
            ResultSet resultSet = statement.executeQuery(sql);

            List<String> nameList = new ArrayList<>();
            while (resultSet.next()) {
                /*
                需要不同的類型,調用不同的方法
                int r = resultSet.getInt();
                long r = resultSet.getLong();
                String r = resultSet.getString();
                */
                /*
                int id = resultSet.getInt(1);   // 下標是從 1 開始的,不是從 0 開始的
                int id = resultSet.getInt("id"); // 通過字段名稱獲取
                 */
                int id = resultSet.getInt(1);
                String name = resultSet.getString("name");
                // 結果集馬上需要銷燬,所以通過 List 保存結果
                nameList.add(name);

                System.out.println(id + ", " + name);
            }

            resultSet.close();

            statement.close();
        }


    }
}

一般來說Driver註冊只需要一次,Connection也只需要一次(特殊情況需要多個連接)。獲取多個Statement,每個statement最好只執行一條sql。 

JDBC常用接口和類 

數據庫連接Connection

Connection接口實現類由數據庫提供,獲取Connection對象通常有兩種方式:

一種是通過DriverManager(驅動管理類)的靜態方法獲取:

//加載JDBC驅動程序
Class.forName("com.mysql.jdbc.Driver");
//創建數據庫連接
Connectionconnection=DriverManager.getConnection(url);

一種是通過DataSource(數據源)對象獲取:

DataSourceds=newMysqlDataSource();
((MysqlDataSource)ds).setUrl("jdbc:mysql://localhost:3306/test");
((MysqlDataSource)ds).setUser("root");
((MysqlDataSource)ds).setPassword("root");
Connectionconnection=ds.getConnection();
以上兩種方式的區別是:
1. DriverManager來獲取的Connection連接,是無法重複利用的,每次使用完以後釋放資源時,通過
connection.close()都是關閉物理連接。
2. DataSource提供連接池的支持。連接池在初始化時將創建一定數量的數據庫連接,這些連接是可以複用
的,每次使用完數據庫連接,釋放資源調用connection.close()都是將Conncetion連接對象回收。

Statement對象

Statement對象主要是將SQL語句發送到數據庫中。JDBC API中主要提供了三種Statement對象。

Statement:用於執行不帶參數的簡單sql語句

PreparedStatement:用於執行帶或者不帶參數的sql語句,sql語句會預編譯在數據庫系統,執行速度快於Statement對象

CallableStatement :用於執行數據庫存儲過程的調用 

主要的方法:

executeQuery() 方法執行後返回單個結果集的,通常用於select語句

executeUpdate()方法返回值是一個整數,指示受影響的行數,通常用於updateinsertdelete語句

ResultSet對象 

ResultSet對象它被稱爲結果集,它代表符合SQL語句條件的所有行,並且它通過一套getXXX方法提供了對這些行中數據的訪問。

ResultSet裏的數據一行一行排列,每行有多個字段,並且有一個記錄指針,指針所指的數據行叫做當前數據行,我們只能來操作當前的數據行。我們如果想要取得某一條記錄,就要使用ResultSet的next()方法 ,如果我們想要得到ResultSet裏的所有記錄,就應該使用while循環。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章