JDBC、excute()、DriveManager、Connection、Statement、自建JDBC工具類、占位符

DAY19.2 Java核心基礎

JDBC

JDBC:Java database Connectivity

JDBC是java程序連接各種數據庫的組件

Mybatis就是基于JDBC的封裝,是獨立于數據庫的管理系統,通用的SQL數據庫存取和操作的公共接口

定義了一套標準,為訪問 不同數據庫提供了統一的途徑

  • 導入對應數據庫驅動jar
  • 面向JDBC接口編程

JDBC接口包含兩部分

  • 面向應用的API,給開發者調用
  • 面向數據庫的API,供開發廠商開發數據庫驅動

JDBC API

供開發者調用的類,主要在java.sql和javax.sql包中

  • DriverManager 類
  • Connection 接口
  • Statement 接口
  • ResultSet 接口

DriverManager:管理不同的驅動

JDBC驅動:復制連接不同的數據庫

JDBC的原理:

加載數據庫驅動,java程序和Mysql的橋梁

獲取connection連接,一次連接

創建Statement,由Connection生成,執行sql語句

ResultSet保持Statement執行后產生的結果

建立一次連接:

public static void main(String[] args) throws SQLException {// 在URL中添加時區參數 serverTimezone=Asia/ShanghaiString url = "jdbc:mysql://localhost:3306/mytest1?serverTimezone=Asia/Shanghai&useSSL=false";String user = "root";String password = "root";Connection connection = DriverManager.getConnection(url, user, password);System.out.println(connection);
}

加載驅動就是將 JDBC 所需要的驅動類加載到 JVM 中才能運行,通過類加載器進行加載,通過反射機制將該類加載進來

Class.forName(類名) 反射機制,獲取運行時類,什么是運行時類?

Java 程序是由類組成的,運行時,會將 Java 所有的類添加到 JVM 內存中,并且每個類只有一份,保持在 JVM 內存中的類叫運行時類,JVM 根據運行時類創建不同的對象,Class.forName(類名) 用來加載運行時類的,將驅動程序添加到 JVM 內存中,程序才能訪問。

每個類的作用:

DriveManager:驅動管理類,創建Connection,通過用戶名,密碼,URL進行校驗,校驗成功創建一個Connection對象

Connection:表示java程序和Mysql之間的一次連接

Statement:表示sql的執行者,復制執行SQL語句

增刪改操作 excute():

public static void main(String[] args) throws SQLException {// 在URL中添加時區參數 serverTimezone=Asia/ShanghaiString url = "jdbc:mysql://localhost:3306/mytest1?serverTimezone=Asia/Shanghai&useSSL=false";String user = "root";String password = "root";Connection connection = DriverManager.getConnection(url, user, password);System.out.println(connection);System.out.println("連接成功");// 定義sql// 增加String insertSql="insert into users(name,gender,score) values('小明','男',90)";// 刪除String deleteSql="delete from users where name ='小明'";// 修改String updateSql="update users set name='述霧' where name = 'c'";// 執行sqlPreparedStatement preparedStatement = connection.prepareStatement(insertSql);boolean execute = preparedStatement.execute();System.out.println(execute);preparedStatement.close();preparedStatement = connection.prepareStatement(deleteSql);preparedStatement.execute();preparedStatement = connection.prepareStatement(updateSql);preparedStatement.execute();connection.close();preparedStatement.close();
}

excute():負責執行增 刪 改方法

返回的結果是return rs != null && rs.hasRows();,判斷是否為查詢語句,rs != null表示是否有該對象,rs.hasRows()表示是否有值

executeQuery:負責執行查詢方法,返回值 ResultSet,集合,查詢肯定要返回查到的數據

返回的結果是一個ResultSet

通過ResultSet的next方法可以取出每一行的值

ResultSet resultSet = preparedStatement.executeQuery();
System.out.println(resultSet.getMetaData().getColumnCount());
while (resultSet.next()){// 方法一
//    String name = resultSet.getString("name");
//    String gender = resultSet.getString("gender");
//    double score = resultSet.getDouble("score");// 方法2String name = resultSet.getString(1);String gender = resultSet.getString(2);double score = resultSet.getDouble(3);System.out.println(name+" "+gender+" "+score);
}

這樣每次操作都需要創建Connection,然后創建Statement對象然后執行嗎?這樣不顯得太麻煩了嗎

我們可以創建一個工具類來獲取Connection連接,一個創建多次使用嘛,然后還可以封裝一些方法來更新數據庫的字段值

比如創建一個JDBCUtil工具類

在創建的時候初始化該類,初始化Connection對象,然后在insertUsers寫一個方法插入到users表中

public class JDBCUtil {public static final String URL = "jdbc:mysql://localhost:3306/mytest1?useSSL=true&serverTimezone=GMT%2B8";public static final String USER = "root";public static final String PASSWORD = "root";public static final String DRIVER = "com.mysql.cj.jdbc.Driver";private Connection connection = null;// 獲取連接public void initConnection(){try {Class.forName(DRIVER);connection = DriverManager.getConnection(URL, USER, PASSWORD);System.out.println("連接成功");} catch (ClassNotFoundException e) {throw new RuntimeException(e);} catch (SQLException e) {throw new RuntimeException(e);}}public JDBCUtil(){initConnection();}// 關閉連接public void closeConnection(){if (connection != null){try {connection.close();System.out.println("關閉連接");} catch (SQLException e) {throw new RuntimeException(e);}}}// 插入到users表字段public void insertUsers(String name,String gender,Integer score){String sql = "insert into users(name,gender,score) values('"+name+"','"+gender+"',"+score+")";System.out.println(sql);PreparedStatement preparedStatement = null;try {preparedStatement = connection.prepareStatement(sql);preparedStatement.execute();System.out.println("插入成功");} catch (SQLException e) {throw new RuntimeException(e);} finally {try {preparedStatement.close();} catch (SQLException e) {throw new RuntimeException(e);}}}}

測試函數

public class Test {public static void main(String[] args) throws SQLException {JDBCUtil jdbcUtil = new JDBCUtil();jdbcUtil.insertUsers("張三","男",100);}
}

成功插入

image-20250329172528767

image-20250329172518102

但是有個問題就是這樣寫sql賦值的時候顯得太麻煩了,我們可以用占位符來解決

 String sql = "insert into users(name,gender,score) values('"+name+"','"+gender+"',"+score+")";
String sql = "insert into users(name,gender,score) values(?,?,?)";
System.out.println(sql);
PreparedStatement preparedStatement = null;
try {preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1,name);preparedStatement.setString(2,gender);preparedStatement.setInt(3,score);preparedStatement.execute();System.out.println("插入成功");
} catch (SQLException e) {throw new RuntimeException(e);
} finally {try {preparedStatement.close();} catch (SQLException e) {throw new RuntimeException(e);}
}

用preparedStatement.setString(占位符的位置,賦值的參數);

根據參數的類型可以選擇setString(),setInt,setDouble…來設置,這樣就好寫多了

下一篇我們來講解更加高級通用的方法

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73872.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73872.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73872.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

21天Python計劃:函數簡單介紹

文章目錄 前言一、函數知識體系二、函數基礎函數的定義和調用函數參數 三、函數對象、函數嵌套、名稱空間與作用域、裝飾器函數對象函數嵌套名稱空間與作用域裝飾器 四、迭代器、生成器、面向過程編程迭代器生成器面向過程編程 五、三元表達式、列表推導式、生成器表達式、遞歸…

污水處理廠人員定位方案-UWB免布線高精度定位

1. 方案概述 本方案采用免布線UWB基站與北斗衛星定位融合技術,結合UWBGNSS雙模定位工卡,實現污水處理廠室內外人員高精度定位(亞米級)。系統通過低功耗4G傳輸數據,支持實時位置監控、電子圍欄、聚集預警、軌跡回放等功…

無人機DSP處理器工作要點!

一、DSP處理器在無人機中的工作要點 1. 高效運算架構 哈佛結構:DSP采用程序與數據存儲分離的哈佛結構,允許同時訪問指令和數據,提升數據吞吐效率。 流水線技術:將指令分解為取指、譯碼、執行等多個階段并行處理&#xff0c…

MySQL查詢成本計算

對于如上SQL,只是因為查詢字段不同,最終執行時選擇的索引就不同,那么MySQL是如何決定選擇使用哪個索引呢? 答案是MySQL會進行成本計算,對于各個場景查詢進行成本預估,最終選擇最優。 我們可以使用trace工具…

《K230 從熟悉到...》矩形檢測

《K230 從熟悉到...》矩形檢測 《廬山派 K230 從熟悉到...》矩形檢測 矩形檢測技術是一種廣泛應用于電子圖像處理的核心技術。它通過識別和分析圖像中的矩形結構,為各種應用提供基礎支持。從傳統圖像處理算法到現代深度學習技術,矩形檢測的實現途徑多種多…

python基礎學習三(元組及字符串的使用)

文章目錄 元組什么是元組元組的創建方式為什么要將元組設計成不可變序列元組的遍歷集合集合的相關操作集合操作集合的數學操作集合生成式列表,字典,元組,集合總結 字符串字符串的駐留機制判斷字符串的操作方法字符串的比較操作字符串的切片操…

Java基礎-22-基本語法-實體類

實體類(Entity Class) 1. 什么是實體類? 實體類(Entity Class) 是 Java 中用于表示數據庫表結構或業務對象的類。它通常包含屬性(字段)和getter/setter 方法,用于存儲和操作數據。…

Android 系統ContentProvider流程

一、ContentProvider初始化注冊流程 源碼查看路徑:http://xrefandroid.com/android-11.0.0_r48/ 涉及到源碼文件: /frameworks/base/core/java/android/content/ContentProvider.java 自定義ContentProvider需要繼承該類,內部類Transport繼承關系如下,實…

爬蟲工程師分享自動批量化獲取商品評論數據的方法有哪些?

在電商領域,商品評論數據對于商家了解產品口碑、洞悉用戶需求,以及開展競品分析等工作具有極其重要的價值。作為爬蟲工程師,掌握自動批量化獲取商品評論數據的方法,能極大提升數據收集效率。下面,我將分享一些實用的操…

Vue3組件事件用戶信息卡練習

用戶信息卡 題目要求 實現一個用戶信息卡系統&#xff0c;包含以下功能&#xff1a; 1.父組件收集用戶信息&#xff08;姓名、年齡、班級&#xff09; 2.子組件接收并展示用戶信息卡片 3.添加基本的數據驗證 <!DOCTYPE html> <html lang"en"> <h…

SpringBean模塊(二)bean初始化(2)和容器初始化順序的比較--引入ApplicationContextInitializer

前面介紹了獲取容器可以讓spring bean實現ApplicationContextAware&#xff0c;實際也是初始化執行了setApplicationContext接口&#xff0c; 初始化接口還可以借助一些注解或者spring bean的初始化方法&#xff0c;那么他們的執行順序是什么樣的呢&#xff1f; 一、驗證&…

中小型企業網絡的搭建

1.1 網絡邏輯拓撲、布線方案的設計 1.1.1 網絡設計依據 網絡設計應遵循以下基本原則&#xff1a; 高效性&#xff1a;確保網絡架構能夠支持企業日常業務的高效運行。 可靠性&#xff1a;采用冗余設計&#xff0c;確保網絡的高可用性&#xff0c;避免單點故障。 可擴展性…

angr基礎學習

參考&#xff1a;angr AngrCTF_FITM/筆記/03/Angr_CTF從入門到精通&#xff08;三&#xff09;.md at master ZERO-A-ONE/AngrCTF_FITM angr_explore 00_angr_find IDA分析結果&#xff1a; 邏輯簡單&#xff0c;輸入&#xff0c;complex_function進行加密&#xff0c;加密…

軟考-高級-系統架構設計師【考試備考資料下載】

計算機技術與軟件專業技術資格&#xff08;水平&#xff09;考試是原中國計算機軟件專業技術資格和水平考試的完善與發展。計算機技術與軟件專業技術資格&#xff08;水平&#xff09;考試是由國家人力資源和社會保障部、工業和信息化部領導下的國家級考試。 計算機技術與軟件專…

3. 第三放平臺部署deepseek

有時候我們會發現使用deepseek服務器&#xff0c;異常卡頓&#xff0c;這是由于多方面原因造成的&#xff0c;比如說訪問人數過多等。想要解決這個問題&#xff0c;我們可以選擇第三方平臺進行部署 第三方平臺 我們可以選擇的第三方平臺很多&#xff0c;比如硅基流動、秘塔搜索…

1.4-蜜罐\堡壘機\API接口

1.4-蜜罐\堡壘機\API接口 蜜罐&#xff1a;用來釣魚或誘惑測試人員的防護系統 bash <(curl -sS -L https://hfish.net/webinstall.sh) # 安裝HFISH蜜罐堡壘機&#xff1a; 運維用的&#xff0c;統一管理運維平臺;拿下堡壘機就很有可能等于拿下了多個平臺 jumpServer一鍵安…

知識圖引導的檢索增強生成

摘要 檢索增強生成&#xff08;RAG&#xff09;已經成為一種很有前途的技術&#xff0c;用于解決大型語言模型&#xff08;LLM&#xff09;生成的響應中的幻覺問題。現有的RAG研究主要集中在應用基于語義的方法來提取孤立的相關組塊&#xff0c;忽略了它們之間的內在關系。在本…

【機器學習】imagenet2012 數據預處理數據預處理

【機器學習】數據預處理 1. 下載/解壓數據2. 數據預處理3. 加載以及訓練代碼3.1 使用PIL等加載代碼3.2 使用OpenCV的方式來一張張加載代碼3.3 h5的方式來加載大文件 最后總結 這個數據大約 140個G,128w的訓練集 1. 下載/解壓數據 首先需要下載數據&#xff1a; 數據最后處理…

質量工程:數字化轉型時代的質量體系重構

前言&#xff1a;質量理念的范式轉移閱讀原文 如果把軟件開發比作建造摩天大樓&#xff1a; 傳統測試 竣工后檢查裂縫&#xff08;高成本返工&#xff09; 質量工程 從地基開始的全流程監理體系&#xff08;設計圖紙→施工工藝→建材選擇→竣工驗收&#xff09; IEEE研究…

【全棧開發】—— Paddle OCR 文字識別 + deepseek接入(基于python 最新!!!)

所有源碼都在文章中&#xff0c;大家不要私信來要源碼&#xff0c;當然&#xff0c;評論區歡迎交流技術 目錄 Paddle OCR 配置環境 示例 deepseek接入 環境配置 api 調用代碼 sliconflow Paddle OCR 配置環境 清華源下載 paddlepaddle&#xff1a; pip install paddlepaddle …