2020想學習JAVA的同學看過來,最基礎的編程CRUD你會了沒?

来源:https://www.cnblogs.com/MonsterJ/archive/2020/07/26/13381853.html
-Advertisement-
Play Games

一 JDBC簡介 Java DataBase Connectivity Java語言連接資料庫 官方(Sun公司)定義的一套操作所有關係型資料庫的規則(介面) 各個資料庫廠商去實現這套介面 提供資料庫驅動JAR包 可以使用這套介面(JDBC)編程 真正執行的代碼是驅動JAR包中的實現類 二 JDBC ...


一 JDBC簡介

Java DataBase Connectivity Java語言連接資料庫

官方(Sun公司)定義的一套操作所有關係型資料庫的規則(介面) 各個資料庫廠商去實現這套介面 提供資料庫驅動JAR包 可以使用這套介面(JDBC)編程 真正執行的代碼是驅動JAR包中的實現類

二 JDBC初體驗

1. 新建一個Maven項目

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.hy.jdbc</groupId>
    <artifactId>jdbc-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 定義依賴版本號 -->
    <properties>
        <junit.version>4.12</junit.version>
        <mysql-connector-java.version>8.0.11</mysql-connector-java.version>
        <druid.version>1.1.10</druid.version>
    </properties>

    <!-- 管理jar版本號 -->
    <dependencyManagement>
        <dependencies>
            <!-- junit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!-- mysql -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-connector-java.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
    </dependencies>
</project>

sql

CREATE TABLE account (
    aid INT PRIMARY KEY,
    aname VARCHAR(100),
    amoney DOUBLE
);

2. 插入

@Test
public void test01() {
    Connection connection = null;
    PreparedStatement statement = null;
    try {
        // 註冊驅動 MySQL5之後的驅動JAR包可以省略該步驟
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 獲取資料庫連接對象 Connection
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo_hy", "root", "root");
        // 開啟事務
        connection.setAutoCommit(false);
        // 定義SQL
        String sql = "insert into account values(?, ?, ?)";
        // 獲取執行SQL的對象 PreparedStatement
        statement = connection.prepareStatement(sql);
        // 設置參數
        statement.setInt(1, 1); //'?' 位置的編號 從1開始
        statement.setString(2, "No1"); //'?' 位置的編號 從1開始
        statement.setDouble(3, 2000); //'?' 位置的編號 從1開始
        // 執行SQL 返回受影響的行數
        int count = statement.executeUpdate();
        // 提交事務
        connection.commit();
        // 處理結果
        System.out.println("count = " + count);

    } catch (Exception e) {
        e.printStackTrace();
        // 回滾事務
        if (null != connection) {
            try {
                connection.rollback();
            } catch (SQLException exception) {
                exception.printStackTrace();
            }
        }

    } finally {
        // 釋放資源
        if (null != statement) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (null != connection) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

3. 刪除

@Test
public void test02() {
    Connection connection = null;
    PreparedStatement statement = null;
    try {
        // 註冊驅動 MySQL5之後的驅動JAR包可以省略該步驟
        //Class.forName("com.mysql.cj.jdbc.Driver");
        // 獲取資料庫連接對象 Connection
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo_hy", "root", "root");
        // 開啟事務
        connection.setAutoCommit(false);
        // 定義SQL
        String sql = "delete from account where aid = ?";
        // 獲取執行SQL的對象 PreparedStatement
        statement = connection.prepareStatement(sql);
        // 設置參數
        statement.setInt(1, 1); //'?' 位置的編號 從1開始
        // 執行SQL 返回受影響的行數
        int count = statement.executeUpdate();
        // 提交事務
        connection.commit();
        // 處理結果
        System.out.println("count = " + count);

    } catch (Exception e) {
        e.printStackTrace();
        // 回滾事務
        if (null != connection) {
            try {
                connection.rollback();
            } catch (SQLException exception) {
                exception.printStackTrace();
            }
        }

    } finally {
        // 釋放資源
        if (null != statement) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (null != connection) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

4. 修改

@Test
public void test03() {
    Connection connection = null;
    PreparedStatement statement1 = null;
    PreparedStatement statement2 = null;
    try {
        // 註冊驅動 MySQL5之後的驅動JAR包可以省略該步驟
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 獲取資料庫連接對象 Connection
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo_hy", "root", "root");
        // 開啟事務
        connection.setAutoCommit(false);
        // 定義SQL
        String sql1 = "update account set amoney = amoney + ? where aid = ?";
        String sql2 = "update account set amoney = amoney - ? where aid = ?";
        // 獲取執行SQL的對象 PreparedStatement
        statement1 = connection.prepareStatement(sql1);
        statement2 = connection.prepareStatement(sql2);
        // 設置參數
        statement1.setDouble(1, 500); //'?' 位置的編號 從1開始
        statement1.setInt(2, 1); //'?' 位置的編號 從1開始
        statement2.setDouble(1, 500); //'?' 位置的編號 從1開始
        statement2.setInt(2, 2); //'?' 位置的編號 從1開始
        // 執行SQL 返回受影響的行數
        statement1.executeUpdate();
        int i = 3 / 0; //模擬異常
        statement2.executeUpdate();
        // 提交事務
        connection.commit();

    } catch (Exception e) {
        e.printStackTrace();
        // 回滾事務
        if (null != connection) {
            try {
                connection.rollback();
            } catch (SQLException exception) {
                exception.printStackTrace();
            }
        }

    } finally {
        // 釋放資源
        if (null != statement2) {
            try {
                statement2.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (null != statement1) {
            try {
                statement1.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (null != connection) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

5. 查詢

@Test
public void test04() {
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    try {
        // 註冊驅動 MySQL5之後的驅動JAR包可以省略該步驟
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 獲取資料庫連接對象 Connection
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo_hy", "root", "root");
        // 開啟事務
        connection.setAutoCommit(false);
        // 定義SQL
        String sql = "select * from account";
        // 獲取執行SQL的對象 PreparedStatement
        statement = connection.prepareStatement(sql);
        // 執行SQL 返回結果集
        resultSet = statement.executeQuery();
        // 提交事務
        connection.commit();
        // 處理結果
        while (resultSet.next()) {
            int id = resultSet.getInt(1); //代表列的編號 從1開始
            String name = resultSet.getString("aname"); //代表列的名稱
            double money = resultSet.getDouble(3); //代表列的編號 從1開始
            System.out.println(id + "---" + name + "---" + money);
        }

    } catch (Exception e) {
        e.printStackTrace();
        // 回滾事務
        if (null != connection) {
            try {
                connection.rollback();
            } catch (SQLException exception) {
                exception.printStackTrace();
            }
        }

    } finally {
        // 釋放資源
        if (null != resultSet) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (null != statement) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (null != connection) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

三 資料庫連接池

一個存放資料庫連接的容器

當系統初始化後 容器被創建 容器中會申請一些連接對象 當用戶訪問資料庫時 從容器中獲取連接對象 用戶訪問完之後 會將連接對象歸還給容器 這樣可以節約資源 提高訪問效率

常見的資料庫連接池有 Druid C3P0...

Druid初體驗

druid.properties

url=jdbc:mysql://localhost:3306/demo_hy
driverClassName=com.mysql.cj.jdbc.Driver
username=root
password=root
maxActive=10
minIdle=5

XTest.java

@Test
public void test05() {
    InputStream stream = null;
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    try {
        // 載入配置文件
        Properties properties = new Properties();
        stream = XTest.class.getClassLoader().getResourceAsStream("druid.properties");
        properties.load(stream);
        // 獲取連接池對象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
        // 獲取資料庫連接對象 Connection
        connection = dataSource.getConnection();
        // 開啟事務
        connection.setAutoCommit(false);
        // 定義SQL
        String sql = "select * from account";
        // 獲取執行SQL的對象 PreparedStatement
        statement = connection.prepareStatement(sql);
        // 執行SQL 返回結果集
        resultSet = statement.executeQuery();
        // 提交事務
        connection.commit();
        // 處理結果
        while (resultSet.next()) {
            int id = resultSet.getInt(1); //代表列的編號 從1開始
            String name = resultSet.getString("aname"); //代表列的名稱
            double money = resultSet.getDouble(3); //代表列的編號 從1開始
            System.out.println(id + "---" + name + "---" + money);
        }

    } catch (Exception e) {
        e.printStackTrace();
        // 回滾事務
        if (null != connection) {
            try {
                connection.rollback();
            } catch (SQLException exception) {
                exception.printStackTrace();
            }
        }

    } finally {
        // 釋放資源
        if (null != resultSet) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (null != statement) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (null != connection) {
            try {
                connection.close(); //歸還連接
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (null != stream) {
            try {
                stream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

最後

學習java不易,需要持續的堅持,如果有想學習java的基礎知識或者進階java的可以私信“學習”獲取學習聯繫方式

file


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、PreparedStatement介面 1.java.sql.PraparedStatement介面繼承並擴展了Statement介面,用於執行動態的SQL語句,即包含參數的SQL語句。 PraparedStatement ps = connection.preparedStatement("s ...
  • IO讀寫基礎 應用層在進行read,write系統調用時,不是物理級別的讀寫,而是緩存的複製,進程緩衝區同內核緩衝區的緩存複製,底層數據交換是有由操作系統內核完成,控制內核緩衝與硬體(物理設備)之間數據交換.linux系統在系統內核只有一個內核緩衝區,用戶進程都有獨立的緩衝區,是進程緩衝區。外部設備 ...
  • 內置異常和Throwable核心方法 Java內置異常 可查異常(必須要在方法裡面捕獲或者拋出) ClassNoFoundException 應⽤程式試圖載入類,找不到對應的類 IllegalAccessException 拒絕訪問⼀個類的時候 NoSuchFieldExcetion 請求的變數不存 ...
  • VSCode配置Rust開發環境 在商店中輸入rls,選擇rust,點擊Quick start中的下載鏈接。這個Rust插件你也要記得下。 跳轉後來到下載界面,點擊下載。 運行下載好的exe文件,命令行輸入1按下回車即可。 安裝完畢後在命令行輸入rustc --version,如果能輸出版本號則表示 ...
  • 一、Tomcat的安裝及簡單使用 在網上找到你需要安裝的Tomcat版本,解壓到你需要安裝的目錄就可以了 目錄介紹: bin 專門用來存放 Tomcat 伺服器的可執行程式 conf 專門用來存放 Tocmat 伺服器的配置文件 lib 專門用來存放 Tomcat 伺服器的 jar 包 logs 專 ...
  • Java是啥 新手程式員通常會走入一個誤區,就是認為學習了一門語言,就可以稱為是某某語言工程師了。但事實上真的是這樣嗎?其實並非如此。 今天我們就來聊一聊,Java 開發工程師到底開發的是什麼東西。準確點來說,Java後端到底在做什麼? 基礎 大家都知道 Java 是一門後端語言,後端指的就是服務端 ...
  • 最近有很多小伙伴來問我,Java小白如何入門,如何安排學習路線,每一步應該怎麼走比較好。原本我以為之前的幾篇文章已經可以解決大家的問題了,其實不然,因為我之前寫的文章都是站在Java後端的全局上進行思考和總結的,忽略了很多小白們的感受,而很多朋友都需要更加基礎,更加詳細的學習路線。 所以,今天我們重 ...
  • 秋招總結 寫在最前 我寫過很多篇秋招總結,這篇文章應該是最後一篇總結,當然也是最完整,最詳細的一篇總結。秋招是我人生中一段寶貴的經歷,不僅是我研究生生涯交出的一份答卷,也是未來職業生涯的開端。僅以此文,獻給自己,以及各位在求職路上的,或者是已經經歷過校招的朋友們。不忘初心,方得始終。 前言 在下本是 ...
一周排行
    -Advertisement-
    Play Games
  • JWT(JSON Web Token)是一種用於在網路應用之間傳遞信息的開放標準(RFC 7519)。它使用 JSON 對象在安全可靠的方式下傳遞信息,通常用於身份驗證和信息交換。 在Web API中,JWT通常用於對用戶進行身份驗證和授權。當用戶登錄成功後,伺服器會生成一個Token並返回給客戶端 ...
  • 老周在幾個世紀前曾寫過樹莓派相關的 iOT 水文,之所以沒寫 Nano Framework 相關的內容,是因為那時候這貨還不成熟,可玩性不高。不過,這貨現在已經相對完善,老周都把它用在項目上了——第一個是自製的智能插座,這個某寶上50多塊可以買到,搜“esp32 插座”就能找到。一種是 86 型盒子 ...
  • 引言 上一篇我們創建了一個Sample.Api項目和Sample.Repository,並且帶大家熟悉了一下Moq的概念,這一章我們來實戰一下在xUnit項目使用依賴註入。 Xunit.DependencyInjection Xunit.DependencyInjection 是一個用於 xUnit ...
  • 在 Avalonia 中,樣式是定義控制項外觀的一種方式,而控制項主題則是一組樣式和資源,用於定義應用程式的整體外觀和感覺。本文將深入探討這些概念,並提供示例代碼以幫助您更好地理解它們。 樣式是什麼? 樣式是一組屬性,用於定義控制項的外觀。它們可以包括背景色、邊框、字體樣式等。在 Avalonia 中,樣 ...
  • 在處理大型Excel工作簿時,有時候我們需要在工作表中凍結窗格,這樣可以在滾動查看數據的同時保持某些行或列固定不動。凍結窗格可以幫助我們更容易地導航和理解複雜的數據集。相反,當你不需要凍結窗格時,你可能需要解凍它們以獲得完整的視野。 下麵將介紹如何使用免費.NET庫通過C#實現凍結Excel視窗以鎖 ...
  • .NET 部署 IIS 的簡單步驟一: 下載 dotnet-hosting-x.y.z-win.exe ,下載地址:.NET Downloads (Linux, macOS, and Windows) (microsoft.com) .NET 部署 IIS 的簡單步驟二: 選擇對應的版本,點擊進入詳 ...
  • 拓展閱讀 資料庫設計工具-08-概覽 資料庫設計工具-08-powerdesigner 資料庫設計工具-09-mysql workbench 資料庫設計工具-10-dbdesign 資料庫設計工具-11-dbeaver 資料庫設計工具-12-pgmodeler 資料庫設計工具-13-erdplus ...
  • 初識STL STL,(Standard Template Library),即"標準模板庫",由惠普實驗室開發,STL中提供了非常多對信息學奧賽很有用的東西。 vector vetor是STL中的一個容器,可以看作一個不定長的數組,其基本形式為: vector<數據類型> 名字; 如: vector ...
  • 前言 最近自己做了個 Falsk 小項目,在部署上伺服器的時候,發現雖然不乏相關教程,但大多都是將自己項目代碼複製出來,不講核心邏輯,不太簡潔,於是將自己部署的經驗寫成內容分享出來。 uWSGI 簡介 uWSGI: 一種實現了多種協議(包括 uwsgi、http)並能提供伺服器搭建功能的 Pytho ...
  • 1 文本Embedding 將整個文本轉化為實數向量的技術。 Embedding優點是可將離散的詞語或句子轉化為連續的向量,就可用數學方法來處理詞語或句子,捕捉到文本的語義信息,文本和文本的關係信息。 ◉ 優質的Embedding通常會讓語義相似的文本在空間中彼此接近 ◉ 優質的Embedding相 ...