JDBC的連接過程(超詳細)

JDBC(Java Database Connectivity)是 Java 用于訪問數據庫的標準 API,它允許 Java 程序與各種不同類型的數據庫進行交互, 其連接數據庫的過程主要包含以下幾個步驟:

1. 導入 JDBC 驅動依賴

在使用 JDBC 連接數據庫之前,需要導入相應數據庫的 JDBC 驅動。如果是使用 Maven 構建項目,以 MySQL 為例,在pom.xml文件中添加如下依賴:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version> <!-- 根據實際需求選擇版本 -->
</dependency>

2. 加載 JDBC 驅動

在 Java 代碼中,需要加載數據庫的 JDBC 驅動,讓 Java 程序知道使用哪個驅動來連接數據庫。使用Class.forName()方法加載驅動類,例如連接 MySQL 數據庫

try {Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {e.printStackTrace();
}

3. 建立數據庫連接

使用DriverManager.getConnection()方法來建立與數據庫的連接,該方法需要傳入數據庫的 URL、用戶名和密碼。以下是不同數據庫連接 URL 的示例:

  • MySQL
String url = "jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC";
String username = "root";
String password = "123456";
try (java.sql.Connection connection = DriverManager.getConnection(url, username, password)) {System.out.println("數據庫連接成功");
} catch (java.sql.SQLException e) {e.printStackTrace();
}

jdbc:mysql://是 MySQL 的 JDBC URL 前綴,localhost是數據庫主機地址,3306是端口號,mydatabase是數據庫名,后面的參數用于配置連接屬性,如關閉 SSL 驗證和設置時區。

  • PostgreSQL
String url = "jdbc:postgresql://localhost:5432/mydatabase";
String username = "postgres";
String password = "123456";
try (java.sql.Connection connection = DriverManager.getConnection(url, username, password)) {System.out.println("數據庫連接成功");
} catch (java.sql.SQLException e) {e.printStackTrace();
}

jdbc:postgresql://是 PostgreSQL 的 JDBC URL 前綴,5432是默認端口號。

  • Oracle
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String username = "scott";
String password = "tiger";
try (java.sql.Connection connection = DriverManager.getConnection(url, username, password)) {System.out.println("數據庫連接成功");
} catch (java.sql.SQLException e) {e.printStackTrace();
}

jdbc:oracle:thin:是 Oracle 的 JDBC URL 前綴,1521是默認端口號,orcl是數據庫實例名。

4. 創建 Statement 對象

連接建立后,需要創建StatementPreparedStatementCallableStatement對象,用于執行 SQL 語句

  • Statement:最基本的用于執行 SQL 語句的對象,適用于執行靜態 SQL 語句,例如:
try (java.sql.Statement statement = connection.createStatement()) {// 執行SQL查詢java.sql.ResultSet resultSet = statement.executeQuery("SELECT * FROM users");while (resultSet.next()) {System.out.println(resultSet.getString("username"));}
} catch (java.sql.SQLException e) {e.printStackTrace();
}
  • PreparedStatement:預編譯 SQL 語句,能有效防止 SQL 注入攻擊,并且性能更好,適用于執行動態 SQL 語句,例如:
String sql = "SELECT * FROM users WHERE username = ?";
try (java.sql.PreparedStatement preparedStatement = connection.prepareStatement(sql)) {preparedStatement.setString(1, "admin");java.sql.ResultSet resultSet = preparedStatement.executeQuery();while (resultSet.next()) {System.out.println(resultSet.getString("username"));}
} catch (java.sql.SQLException e) {e.printStackTrace();
}
  • CallableStatement:用于執行數據庫中的存儲過程,例如:
String sql = "{call get_user_count(?)}";
try (java.sql.CallableStatement callableStatement = connection.prepareCall(sql)) {callableStatement.registerOutParameter(1, java.sql.Types.INTEGER);callableStatement.execute();int count = callableStatement.getInt(1);System.out.println("用戶數量: " + count);
} catch (java.sql.SQLException e) {e.printStackTrace();
}

5. 執行 SQL 語句

根據不同的需求,使用上述創建的對象執行 SQL 語句,如executeQuery()用于執行查詢語句并返回結果集(ResultSet),executeUpdate()用于執行增刪改操作并返回受影響的行數,execute()用于執行任意 SQL 語句并返回一個布爾值表示是否返回結果集。

6. 處理結果集(如果有)

當執行查詢語句后,會得到一個ResultSet對象,通過調用ResultSet的方法(如getString()getInt()等)來獲取查詢結果集中的數據,并進行相應的處理。

7. 關閉資源

在完成數據庫操作后,需要按照ResultSetStatement(或PreparedStatementCallableStatement)、Connection的順序關閉資源,以釋放數據庫連接和其他相關資源,防止資源泄漏。示例代碼如下:

java.sql.ResultSet resultSet = null;
java.sql.PreparedStatement preparedStatement = null;
try {// 執行操作...
} catch (java.sql.SQLException e) {e.printStackTrace();
} finally {if (resultSet != null) {try {resultSet.close();} catch (java.sql.SQLException e) {e.printStackTrace();}}if (preparedStatement != null) {try {preparedStatement.close();} catch (java.sql.SQLException e) {e.printStackTrace();}}if (connection != null) {try {connection.close();} catch (java.sql.SQLException e) {e.printStackTrace();}}
}

或者使用 Java 7 引入的try-with-resources語句,它會自動關閉實現了AutoCloseable接口的資源,簡化代碼編寫:

try (java.sql.Connection connection = DriverManager.getConnection(url, username, password);java.sql.PreparedStatement preparedStatement = connection.prepareStatement(sql);java.sql.ResultSet resultSet = preparedStatement.executeQuery()) {// 處理結果集...
} catch (java.sql.SQLException e) {e.printStackTrace();
}

完美撒花~

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

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

相關文章

本地WSL部署接入 whisper + ollama qwen3:14b 總結字幕校對增強版

1. 實現功能 M4-4: 校對增強版 (最終完全體) 本腳本是整個 Module 的最終形態&#xff0c;采用了“代碼預處理 LLM校對”的終極方案&#xff1a; 代碼預處理: 確定性地在每個語音片段后添加逗號&#xff0c;生成一份“標點草稿”。LLM校對: LLM 的任務被簡化為“校對和修正”這…

MySQL數據庫簡介

1 簡介 MySQL是一個關系型數據庫管理系統&#xff0c;由瑞典 MySQL AB公司開發&#xff0c;屬于 Oracle 旗下產品&#xff0c;是當今最流行的關系型數據庫管理系統之一&#xff0c;在 WEB應用方面&#xff0c;MySQL是最好的RDBMS (Relational Database Management System&#…

[Oracle] UNPIVOT 列轉行

Oracle數據庫中的UNPIVOT是一種用于將列轉換為行的SQL操作&#xff0c;它允許用戶將多個列的數據轉換為多行的形式&#xff0c;以便進行更靈活的數據分析和報表生成UNPIVOT主要用于將寬表(多列)轉換為長表(多行)&#xff0c;減少表的列數&#xff0c;增加行數語法格式SELECT pi…

node.js 學習筆記3 HTTP

path模塊 path模塊主要用于操作路徑。要使用path&#xff0c;首先需要引入path模塊。require(path) path.resolve 用于拼接規范的絕對路徑。 如果想拼接一個路徑&#xff0c;有時候是使用字符串手動拼接的&#xff0c;但由于系統的規范不同&#xff0c;路徑中的\和/無法統一…

Flutter Dialog、BottomSheet

屬性說明title標題content內容actions按鈕applicationName說明文字applicationVersion版本applicationLegalese版本基本使用class MyState extends State {AlertDialog delDialog(BuildContext context) {AlertDialog alertDialog AlertDialog(title: Text("提示"),…

《算法導論》第 19 章 - 斐波那契堆

引言斐波那契堆&#xff08;Fibonacci Heap&#xff09;是一種高效的可合并堆數據結構&#xff0c;由 Michael L. Fredman 和 Robert E. Tarjan 于 1984 年提出。它在許多優先隊列操作中提供了極佳的 amortized&#xff08;攤還&#xff09;時間復雜度&#xff0c;尤其適用于需…

MySQL-日志

MySQL-日志前言一、錯誤日志&#xff08;error log&#xff09;二、慢查詢日志(slow query log)三 、一般查詢日志(general log)四、 事務日志重做日志&#xff08;redo log&#xff09;回滾日志&#xff08;undo log&#xff09;五、 二進制日志(bin log)/歸檔日志 > 數據同…

嵌入式C語言編程:策略模式、狀態模式和狀態機的應用

概述 在沒有面向對象語法的C語言中&#xff0c;策略&#xff08;Strategy&#xff09;模式和狀態&#xff08;State&#xff09;模式都通過“上下文 接口”組合來模擬多態。 它們在代碼結構上幾乎一致&#xff0c;但設計意圖和應用場景卻差異很大。 本文分三部分深入剖析&…

人工智能、機器學習、深度學習:2025技術革命的深度解析

目錄 人工智能、機器學習、深度學習&#xff1a;技術革命的深度解析 引言 第一部分&#xff1a;人工智能的起源與演進 1.1 人工智能的定義 1.2 人工智能的歷史 1.3 人工智能的關鍵概念 a.知識表示&#xff08;Knowledge Representation&#xff09; b.搜索算法&#xf…

【Python】常用內置模塊

1.os 文件目錄 import os# 創建文件夾 os.mkdir(dir) # 判斷文件是否存在 os.path.exists(path) # 列出文件夾下文件列表 os.listdir(dir)""" 常用 """ # 當前文件相對路徑 os.getcwd()# 當前文件絕對路徑 os.path.abspath(__file__)# 當前文…

(Python)爬蟲進階(Python爬蟲教程)(CSS選擇器)

源代碼&#xff1a;#導入庫 import requests from bs4 import BeautifulSoup import pandas as pd#爬蟲函數 def scrape_books():#1.基本網址連接base_url "http://books.toscrape.com"#2.獲取基本網址responserequests.get(base_url)#3.檢查是否正常訪問if respons…

第七節 自然語言處理與Bert

自然語言處理與BERT模型&#xff1a;從基礎到實踐入門 自然語言處理&#xff08;NLP&#xff09;的核心目標之一是讓計算機理解人類語言的語義和上下文。本文將從基礎的字詞表示出發&#xff0c;逐步解析傳統模型的局限性、Self-attention的突破性思想&#xff0c;以及BERT如何…

攻擊者瞄準加密技術的基礎:智能合約

雖然利用許多智能合約中的安全漏洞已經成為網絡攻擊者的長期目標&#xff0c;但越來越多的安全公司開始關注使用欺詐性或混淆的智能合約從加密貨幣賬戶中竊取資金的騙局。 根據網絡安全公司 SentinelOne 本周發布的分析報告&#xff0c;在最近一次引人注目的攻擊中&#xff0c…

基于開源AI大模型、AI智能名片與S2B2C商城小程序的零售智能化升級路徑研究

摘要&#xff1a;在零售業數字化轉型浪潮中&#xff0c;人工智能技術正從“輔助工具”向“核心生產力”演進。本文聚焦開源AI大模型、AI智能名片與S2B2C商城小程序的協同應用&#xff0c;提出“數據感知-關系重構-生態協同”的三維創新框架。通過分析智能傳感、動態畫像與供應鏈…

機器學習 樸素貝葉斯

目錄 一.什么是樸素貝葉斯 1.1 從 “概率” 到 “分類” 二.樸素貝葉斯的數學基礎&#xff1a;貝葉斯定理 2.1 貝葉斯定理公式 2.2 從貝葉斯定理到樸素貝葉斯分類 2.3 “樸素” 的關鍵&#xff1a;特征獨立性假設 三、樸素貝葉斯的三種常見類型 3.1 高斯樸素貝葉斯&…

A Logical Calculus of the Ideas Immanent in Nervous Activity(神經網絡早期的M-P模型)

哈嘍&#xff0c;各位朋友大家上午好&#xff01;今天我們要一起啃下這篇神經科學與邏輯學交叉領域的奠基之作——McCulloch和Pitts的《A Logical Calculus of the Ideas Immanent in Nervous Activity》。這篇論文篇幅不長&#xff0c;但每一個定理、每一個假設都像精密齒輪&a…

大語言模型提示工程與應用:提示工程-提升模型準確性與減少偏見的方法

語言模型可靠性優化 學習目標 在本課程中&#xff0c;我們將學習通過提示工程提升模型事實準確性、減少偏見的有效方法。 相關知識點 語言模型可靠性優化 學習內容 1 語言模型可靠性優化 1.1 事實準確性增強 LLM可能生成看似合理但實際虛構的內容。優化策略包括&#x…

遇到前端導出 Excel 文件出現亂碼或文件損壞的問題

1. 檢查后端返回的數據格式確認接口響應&#xff1a;確保后端返回的是二進制流&#xff08;如 ArrayBuffer&#xff09;或 Base64 編碼的 Excel 文件&#xff0c;而非 JSON 字符串。用瀏覽器開發者工具&#xff08;Network 標簽&#xff09;檢查接口響應類型&#xff1a;正確的…

2025年Cloudflare WAF防護機制深度剖析:5秒盾繞過完全指南

2025年Cloudflare WAF防護機制深度剖析&#xff1a;5秒盾繞過完全指南 技術概述 Cloudflare作為全球領先的CDN和網絡安全服務提供商&#xff0c;其WAF&#xff08;Web Application Firewall&#xff09;防護系統已經成為現代Web安全的標桿。特別是其標志性的"5秒盾"…

【Android調用相冊、拍照、錄像】等功能的封裝

關于調用Android項目 關于Android中調用相機拍照、錄像&#xff0c;調用相冊選圖等是比較繁瑣的&#xff0c;為了減少代碼冗余&#xff0c;肯定需要封裝成工具類&#xff0c;最終使用大概如下&#xff0c;大部分代碼使用Java編寫&#xff0c;因為需要照顧到不適用kotlin的伸手…