Java JDBC,輕松構建數據庫連接:代碼教程詳解

JDBC的概述

Java Database Connectivity(JDBC)是 Java 中用于與數據庫進行通信的 API。它提供了一套標準的 API,并允許 Java 應用程序連接到各種關系型數據庫,如 MySQL、Oracle、PostgreSQL 等,從而可以執行 SQL 查詢、更新、插入和刪除等數據庫操作。

JDBC的編程步驟

使用 JDBC 編寫 Java 應用程序與數據庫進行交互時,需要執行以下幾個步驟:

  1. 加載和注冊數據庫驅動程序。

    在使用 JDBC API 之前,需要加載并注冊要使用的數據庫驅動程序,驅動程序提供了用于連接和交互數據庫的接口。

   // 加載 MySQL 驅動程序Class.forName("com.mysql.cj.jdbc.Driver");
  1. 建立數據庫連接。

    通過建立數據庫連接,我們可以建立與數據庫的連接會話,這是使用 JDBC API 的必要步驟。在連接字符串中指定要連接的數據庫和服務器地址、用戶名和密碼。

   String url = "jdbc:mysql://localhost:3306/mydatabase";String username = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, username, password);
  1. 創建一個 Statement/PreparedStatement 對象。

    Statement/PreparedStatement 對象允許我們在 Java 應用程序中執行 SQL 查詢、更新和刪除等操作。

   // 創建 Statement 對象Statement statement = conn.createStatement();// 創建 PreparedStatement 對象String query = "SELECT * FROM mytable WHERE name = ?";PreparedStatement preparedStatement = conn.prepareStatement(query);
  1. 執行 SQL 語句。

    使用 Statement/PreparedStatement 對象執行 SQL 查詢、更新和刪除操作。查詢操作使用 executeQuery() 方法,更新和刪除操作使用 executeUpdate() 方法。

   // 執行查詢操作String query = "SELECT * FROM mytable";ResultSet resultSet = statement.executeQuery(query);// 執行更新操作String update = "UPDATE mytable SET age = 25 WHERE name = 'John'";int rowsAffected = statement.executeUpdate(update);
  1. 處理結果集。

    當使用 executeQuery() 方法時,會返回一個 ResultSet 對象,該對象包含符合查詢條件的所有行和列。我們需要使用 ResultSet 對象獲取查詢結果。

   // 處理查詢結果while (resultSet.next()) {String name = resultSet.getString("name");int age = resultSet.getInt("age");}
  1. 關閉連接和 Statement/PreparedStatement 對象。

    在使用完 JDBC 時,需要關閉與數據庫建立的連接、Statement 和 PreparedStatement 對象。這樣可以釋放資源。

   resultSet.close();statement.close();conn.close();
  1. 處理事務操作

    JDBC 還提供了一種管理事務操作的機制。事務是一系列 SQL 操作,可以保證這些操作要么全部執行,要么全部不執行。如果事務執行失敗,可以回滾事務,撤回所有的更改。否則,可以提交事務,把更改保存到數據庫。

   try {// 開始事務conn.setAutoCommit(false);// 執行多個 SQL 操作statement.executeUpdate("UPDATE mytable SET age = 25 WHERE name = 'John'");statement.executeUpdate("UPDATE mytable SET age = 26 WHERE name = 'Mike'");// 提交事務conn.commit();} catch (SQLException e) {// 操作失敗,回滾事務conn.rollback();} finally {// 關閉連接和 Statement/PreparedStatement 對象statement.close();conn.close();}

JDBC 的應用場景

JDBC 廣泛應用于訪問和處理關系型數據庫,我們可以通過它來實現以下應用場景:

  1. 數據庫查詢和更新:使用 JDBC 可以方便地進行數據庫查詢和更新,包括執行 SQL 查詢語句、更新數據、插入數據和刪除數據等操作。
  2. 數據庫連接池:連接池是一種重用已經打開的數據庫連接的技術,在高并發的應用程序中使用 JDBC 連接池可以提高性能,并減少對數據庫的連接請求。
  3. ORM 框架:Java 中的 ORM 框架,例如 Hibernate 和 MyBatis,底層都使用 JDBC 來訪問數據庫,簡化和加速數據庫編程。
  4. 數據庫工具:很多數據庫管理工具,例如 SQLyog 和 HeidiSQL 等,都使用 JDBC 來與數據庫進行通信和操作。

JDBC 的最佳實踐

在使用 JDBC 時,還需要注意以下幾個方面:

  1. 使用 PreparedStatement:PreparedStatement 是一種預編譯的語句,可以將 SQL 查詢語句緩存起來,避免多次解析和編譯 SQL 語句,從而提高查詢性能和安全性,防止 SQL 注入攻擊。
  2. 使用數據源:數據源可以管理連接池,并提供與數據庫的連接。使用數據源可以大大提高應用程序的吞吐量和性能,并減少對數據庫的連接請求,防止數據庫連接泄漏。
  3. 使用 try-with-resources:在使用 JDBC 的時候,通常需要手動管理資源的釋放,例如關閉數據庫連接、關閉 Statement 和關閉 ResultSet 等,使用 try-with-resources 可以簡化這個過程,自動釋放資源,避免資源泄漏。
  4. 使用事務:JDBC 支持事務處理,事務可以保證一組數據庫修改操作的原子性、一致性、隔離性和持久性,從而避免了臟數據的產生和數據的沖突。

總結

JDBC 是 Java 編程語言中用于與關系型數據庫進行通信的 API。使用 JDBC 編寫 Java 應用程序與數據庫進行交互時,需要執行幾個關鍵步驟,如加載和注冊數據庫驅動程序、建立數據庫連接、使用 Statement/PreparedStatement 對象執行 SQL 查詢、更新和刪除等操作并處理結果集,最后關閉連接。此外,JDBC 還提供了管理事務操作的機制,可以保證操作的原子性、一致性、隔離性和持久性。JDBC 廣泛應用于數據庫查詢和更新、連接池、ORM 框架和數據庫工具等應用場景,在使用 JDBC 時,還需要注意最佳實踐和安全措施,如使用 PreparedStatement、使用數據源、使用 try-with-resources 和使用事務等。

關注微信公眾號:“小虎哥的技術博客”,回復“微信”可以添加小虎哥的微信號,我們一起進步,不做碼農,只做工程師!

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

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

相關文章

win10在vmware15中安裝macos10.13系統

第一步、安裝vmware版本信息如下 第二步、下載unlocker-main和darwin.iso放到安裝文件夾 第三步、管理員身份運行win-install.cmd 第四步、運行vmware新建虛擬機 第五步、啟動新創建的虛擬機macOS 10.13并選擇語言 第六步、選擇磁盤工具抹掉磁盤 第七步、格式化完成后退出磁盤工…

flutter 隨筆

萬物 皆可 結構 概念 ?狀態 插件類 flutter系統類 MaterialApp源App應? 事件 很簡單/簡單/較復雜/復雜/很復雜 結構體 MaterialApp(xx:) 公開坑位屬性:所配置內容 Widget 插件事件 function 函數事件 flutter/dart 事件結構描述void Function() 外層主事件 內層回…

數據結構:交換排序

冒泡排序 起泡排序,別名“冒泡排序”,該算法的核心思想是將無序表中的所有記錄,通過兩兩比較關鍵字,得出升序序列或者降序序列。 算法步驟 比較相鄰的元素。如果第一個元素大于第二個元素,就交換它們。對每一對相鄰…

Python-OpenCV中的圖像處理-圖像金字塔

Python-OpenCV中的圖像處理-圖像金字塔 圖像金字塔高斯金字塔拉普拉斯金字塔 金字塔圖像融合 圖像金字塔 同一圖像的不同分辨率的子圖集合,如果把最大的圖像放在底部,最小的放在頂部,看起來像一座金字塔,故而得名圖像金字塔。cv2…

小程序發布注意事項

1、使用HBuildx的 發布 功能發布小程序,因為編譯完的代碼目錄不是同一個 如果使用 運行 到小程序,最后發布的版本會顯示”無法連接本地服務器“ 2、使用unicloud的云服務 uniCloud發行 | uni-app官網 阿里云的unicloud的話,使用request域名…

Spring中Bean的循環依賴問題

1.什么是Bean的循環依賴? 簡單來說就是在A類中,初始化A時需要用到B對象,而在B類中,初始化B時需要用到A對象,這種狀況下在Spring中,如果A和B同時初始化,A,B同時都需要對方的資源&…

電腦開機出現Boot Device怎么辦?

開機出現Boot Device這個問題很常見,有時還會出現No Boot Device的問題,雖然多了一個單詞,但意思是相同的,這些問題說明你的系統盤出現了問題,或者是引導出現了問題。這該如何解決呢? 方法1. 檢查主板或硬盤…

【算法——雙指針】LeetCode 283 移動零

題目描述: 思路: (雙指針) O(n)O(n)O(n) 給定一個數組 nums,要求我們將所有的 0 移動到數組的末尾,同時保持非零元素的相對順序。 如圖所示,數組nums [0,1,0,3,12],移動完成后變成nums [1,3,12,0,0] &am…

若依vue -【 100 ~ 更 ~ 110 】

100 主子表代碼生成詳解 1 新建數據庫表結構(主子表) -- ---------------------------- -- 客戶表 -- ---------------------------- drop table if exists sys_customer; create table sys_customer (customer_id bigint(20) not null…

Docker部署rabbitmq遇到的問題 Stats in management UI are disabled on this node

1. Stats in management UI are disabled on this node #進入rabbitmq容器 docker exec -it {rabbitmq容器名稱或者id} /bin/bash#進入容器后,cd到以下路徑 cd /etc/rabbitmq/conf.d/#修改 management_agent.disable_metrics_collector false echo management_age…

談談語音助手

目錄 1.什么是語音助手 2.語音助手的發展過程 3.現在有哪些成熟的語音助手 4.語音助手對人類發展的影響 1.什么是語音助手 語音助手是一種能夠通過語音交互與用戶進行溝通和執行任務的虛擬助手。它基于人工智能和自然語言處理技術,能夠理解用戶的語音指令&#x…

數據結構-隊列的實現(C語言版)

前言 隊列是一種特殊的線性表,它只允許在一端對數據進行插入操作,在另一端對數據進行刪除操作的特殊線性表,隊列具有先進先出的(FIFO)的 特性,進行插入操作的一端稱為隊尾,進行刪除操作的一端稱…

JZ37序列化二叉樹

題目地址:序列化二叉樹_牛客題霸_牛客網 題目回顧: 解題思路: 首先,序列化就是將二叉樹的節點值放入一個字符串中,這里可以按照前序遍歷的思路來進行操作,謙虛遍歷是:根左右的情況,…

什么是React?React與VU的優缺點有哪些?

什么是React?什么是VUE? 維基百科上的概念解釋,Vue.js是一個用于創建用戶界面的開源MVVM前端JavaScript框架,也是一個創建單頁應用的Web應用框架。Vue.js由尤雨溪(Evan You)創建,由他和其他活躍…

Cmd部署HexoGithub443問題

git config --global http.proxy “localhost:7890” 配置下代理即可 本文由 mdnice 多平臺發布

微信小程序 地圖map(電子圍欄圓形和多邊形)

正常情況下是沒有手機上畫電子圍欄的,公共平臺上我也沒找到,所以走了一個歪點子,就是給地圖添加點擊事件,記錄點的位置,在畫到電子圍欄上就是添加電子圍欄了,如果只是顯示電子圍欄就簡單了 一、多邊形電子…

2023.8.12號論文閱讀

文章目錄 TriFormer: A Multi-modal Transformer Framework For Mild Cognitive Impairment Conversion Prediction摘要本文方法實驗結果 SwIPE: Efficient and Robust Medical Image Segmentation with Implicit Patch Embeddings摘要本文方法實驗結果 TriFormer: A Multi-mod…

macos搭建python3虛擬環境

我們知道macos自帶的python版本是Python2.7, 這個版本比較老而且往往和我們的工程不兼容,所以就得需要我們升級Python版本, 我們不建議直接升級macos自帶的本地Python2.7, 因為macos有一些基礎軟件是依賴于Python2.7的,如果動了遇到問題想再…

日志框架及其使用方法

log4j和logBack,同一個人寫的,logBack為log4j的升級版,SpringBoot中默認集成logBack 作用:記錄軟件發布后的一些bug,以及數據是怎樣被操作的 傳統開發弊端: 1.日志直接輸出在控制臺,關閉控制臺后,日志消…

Netty:在一個ByteBuf中尋找另外一個ByteBuf出現的位置

說明 利用ByteBufUtil的indexOf(ByteBuf needle, ByteBuf haystack)函數可以在haystack中尋找needle出現的位置。如果沒有找到,返回-1。 示例 在一個ByteBuf 中找到了另外一個ByteBuf package com.thb;import io.netty.buffer.ByteBuf; import io.netty.buffer.…