后端(JDBC)學習筆記(CLASS 1):基礎篇(一)

一、引言

1、數據的存儲

開發java程序的時候,數據都是存儲在內存中,屬于臨時存儲,當程序停止或重啟時,內存中的數據就丟失了。為了解決數據的長期存儲問題,有如下解決方案:

1、數據通過I/O流技術,存儲在本地磁盤中,解決了持久化問題,但是沒有結構和邏輯,不方便管理和維護。

2、通過關系型數據庫,將數據按照特定的格式交由數據庫管理系統維護。關系型數據庫是通過庫和表分隔不同的數據,表中存儲的方式是行和列,區分相同格式不同值的數據

2、數據的操作

通過jdbc使用java程序對數據庫進行(CRUD)操作

二、JDBC

1、概念

1、JDBC:Java DataBase Connectivity,意為java數據庫連接

2、JDBC是java提供的一組獨立于任何數據庫管理系統的API

3、Java提供接口規范,由各個數據庫廠商提供接口的實現,廠商提供的實現類封裝成jar文件,也就是我們俗稱的數據庫驅動jar包

4、學習JDBC,充分體現了面向接口編程的好處,程序員只關心標準和規范,而無需關注實現過程?

2、JDBC的核心組成

接口規范:

1、為了項目代碼的可移植性、可維護性,制定了Java程序連接各種數據庫的統一接口規范。這樣的話,不管是連接哪一種DBMS軟件,Java代碼可以保持一致性。

2、接口存儲在java.sql和javax.sql包下

實現規范:

1、接口規范交由各個數據庫廠商實現

2、將實現內容封裝成jar文件,我們只需引入即可

三、JDBC快速入門

1、JDBC搭建步驟

1、準備數據庫

2、官網下載數據庫連接驅動jar包(使用mavan,不需下載)

3、創建Java項目,在項目下創建lib文件夾,將下載的驅動jar包復制到文件夾里

4、選中lib文件夾右鍵->Add as Library,與項目集成

5、編寫代碼

2、代碼實現

1、以下為示例數據庫的sql文件代碼

-- 圖書管理系統數據庫(簡化版)
CREATE DATABASE IF NOT EXISTS library_management;
USE library_management;-- 圖書表
CREATE TABLE books (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(255) NOT NULL,author VARCHAR(100) NOT NULL,publisher VARCHAR(100) NOT NULL,publish_year YEAR NOT NULL,isbn VARCHAR(20) UNIQUE NOT NULL,category VARCHAR(50) NOT NULL,total_copies INT NOT NULL DEFAULT 1,available_copies INT NOT NULL DEFAULT 1,location VARCHAR(50) NOT NULL -- 書架位置
);-- 插入圖書假數據
INSERT INTO books (title, author, publisher, publish_year, isbn, category, total_copies, available_copies, location) VALUES
('Python編程:從入門到實踐', '埃里克·馬瑟斯', '人民郵電出版社', 2016, '9787115428028', '編程', 5, 5, 'A區-1架'),
('數據結構與算法分析', '馬克·艾倫·維斯', '機械工業出版社', 2019, '9787111641247', '計算機', 3, 3, 'A區-2架'),
('紅樓夢', '曹雪芹', '人民文學出版社', 2018, '9787020002207', '文學', 4, 4, 'B區-1架'),
('三國演義', '羅貫中', '人民文學出版社', 2015, '9787020090008', '文學', 6, 6, 'B區-1架'),
('算法導論', '托馬斯·H·科爾曼', '機械工業出版社', 2013, '9787111407010', '計算機', 2, 2, 'A區-3架'),
('人類簡史', '尤瓦爾·赫拉利', '中信出版社', 2017, '9787508647357', '歷史', 5, 5, 'C區-2架'),
('活著', '余華', '作家出版社', 2012, '9787506365437', '文學', 8, 8, 'B區-2架'),
('數學之美', '吳軍', '人民郵電出版社', 2014, '9787115379320', '數學', 3, 3, 'D區-1架'),
('解憂雜貨店', '東野圭吾', '南海出版公司', 2014, '9787544270878', '小說', 7, 7, 'B區-3架'),
('三體', '劉慈欣', '重慶出版社', 2008, '9787536692930', '科幻', 10, 10, 'E區-1架');

2、以下為java程序的實現,由于使用maven進行管理,無需導包等操作,只需要在pom.xml中添加依賴即可

package org.lib_mana;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class quickSQL {public static void main(String[] args) throws Exception {
//        1、注冊驅動(由于使用maven進行管理則省去該步驟0//        2、獲取連接對象
//        這是url的固定結構String url = "jdbc:mysql://localhost:3306/library_management";String username = "root";String password = "20050824";Connection connection = DriverManager.getConnection(url, username, password);//        3、獲取執行sql語句的對象Statement statement = connection.createStatement();//        4、編寫sql語句并執行ResultSet resultSet = statement.executeQuery("select id,title,author,isbn,location from books");while (resultSet.next()) {int id = resultSet.getInt("id");String title = resultSet.getString("title");String author = resultSet.getString("author");String isbn = resultSet.getString("isbn");String location = resultSet.getString("location");System.out.println(id+","+title+","+author+","+isbn+","+location);}//        5、釋放資源resultSet.close();statement.close();connection.close();}
}

四、核心API理解

1、注冊驅動
Class.forName("com.mysql.cj.jdbc.Driver");

在Java中,當使用JDBC連接數據庫時,需要加載數據庫特定的驅動程序,以便與數據庫進行通信

從JDK6開始,不需要顯式地調用Class.forName()來加載JDBC驅動程序,只要在類路徑中集成了對應的jar文件,會自動在初始化時注冊驅動程序

2、Connection

1、Connection接口是JDBC API的重要接口,用于建立與數據庫的通信通道。換而言之,Connection對象不為空,則代表一次數據庫連接

2、在建立連接時,需要指定數據庫URL、用戶名、密碼參數

URL:jdbc:mysql://localhost:3306/atguigu

jdbc:mysql://IP地址:端口號/數據庫名?參數鍵值對1&參數鍵值對2

3、Connection接口還負責管理事務,接口提供了commit和rollback方法,用于提交事務和回滾事務

4、可以創建Statement對象,用于執行SQL語句并與數據庫進行交互

5、在使用JDBC技術時,必須要先獲取Connection對象,并且最后需要釋放資源

3、Statement

1、Statement接口用于執行SQL語句并與數據庫進行交互。它是JDBC API中一個重要接口。通過Statement對象,可以向數據庫發送SQL語句并執行結果

2、結果可以是一個或多個結果

增刪改:受影響行數單個結果

查詢:單行單列、多行多列、單行多列結果

3、但是Statement接口在執行SQL語句時會產生SQL注入攻擊問題:

當使用Statement執行動態構建的SQL查詢時,往往需要將查詢條件與SQL語句拼接在一起,直接將參數和SQL語句一并生成,讓SQL的查詢條件始終為true得到結果

4、PreparedStatement

1、preparedStatement是Statement接口的子接口,用于執行預編譯的SQL查詢,作用如下:

預編譯的SQL語句:在創建PreparedStatement時,就會預編譯SQL語句,也就是SQL語句以及固定

防止SQL注入:PreparedStatement支持參數化查詢,將數據作為參數傳遞到SQL語句中,采用?占位符的方式。將傳入的參數用一對單引號包裹起來,無論傳遞什么都作為值,有效防止傳入關鍵字或值導致SQL注入問題

性能提升:PreparedStatement是預編譯SQL語句,同一SQL語句多次執行的情況下,可以復用,不必每次重新編譯和解析

2、后續的學習我們都是基于PreparedStatement進行實現,更安全,效率更高!

以下為示例代碼:

package org.lib_mana;import java.sql.*;
import java.util.Scanner;public class quickSQL {public static void main(String[] args) throws Exception {
//        1、注冊驅動(由于使用maven進行管理則省去該步驟0//        2、獲取連接對象
//        這是url的固定結構String url = "jdbc:mysql://localhost:3306/library_management";String username = "root";String password = "20050824";Connection connection = DriverManager.getConnection(url, username, password);//        3、獲取執行sql語句的對象String sql = "select * from books where id= ?";PreparedStatement statement = connection.prepareStatement(sql);//        4、編寫sql語句并執行Scanner input = new Scanner(System.in);String book_id = input.nextLine();statement.setString(1,book_id);System.out.println(sql);ResultSet resultSet = statement.executeQuery();while (resultSet.next()) {int id = resultSet.getInt("id");String title = resultSet.getString("title");String author = resultSet.getString("author");String isbn = resultSet.getString("isbn");String location = resultSet.getString("location");System.out.println(id+","+title+","+author+","+isbn+","+location);}//        5、釋放資源resultSet.close();statement.close();connection.close();}
}

此時輸入的任何的值都會被解析為值,防止被sql注入

5、ResultSet

1、ResultSet是JDBC API中的一個接口,用于表示從數據庫中執行查詢語句所返回的結果集。它提供了一種用于遍歷和訪問查詢結果的方式

2、遍歷結果:ResultSet可以使用next()方法將游標移動到結果集的下一行,逐行遍歷數據庫查詢的結果,返回值為boolean類型,true代表有下一行,false則代表沒有

3、獲取單列結果:可以通過getXxx的方法獲取單列的數據,該方法為重載方法,支持索引和列名進行獲取

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

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

相關文章

卷對卷(Roll-to-Roll,R2R)技術的應用領域和技術進展

目錄:第一節:卷對卷技術及其應用領域和工藝要求一、卷對卷技術發展現概述二、卷對卷研發和規模化應用難點重點和發展趨勢三、卷對卷工藝主要應用領域及工藝要求第二節:卷對卷生產工藝參數及質量控制四、卷對卷生產工藝控制參數和條件五、卷對…

【Ansible】管理變量和事實知識點

1.Ansible變量名由什么組成&#xff1f;答&#xff1a;變量名必須以字母開頭&#xff0c;且只能含有字母、數字和下劃線。2.定義變量的方法及變量的優先級&#xff1f;答&#xff1a;按優先級從低到高排列: 在清單中定義的組變量 < 在清單或playbook所在目錄的group_vars子目…

基于SpringBoot的天氣預報系統的設計與實現

源碼鏈接&#xff1a;點擊下載源碼 相關文檔&#xff1a;點擊下載相關文檔 摘 要 隨著科技的飛速發展和人們生活水平的不斷提高&#xff0c;天氣預報已成為現代社會不可或缺的一部分。無論是日常生活出行、農業生產安排&#xff0c;還是航空、海運等交通領域&#xff0c;準確…

算法(keep learning)

基礎算法 背模板加刷題 排序快排 主要思想&#xff1a;分治 第一步&#xff1a;確認一個分界點&#xff0c;比如起點&#xff0c;中間點&#xff08;分界點&#xff09;&#xff0c;末點第二步&#xff1a;調整區間&#xff0c;使得第一個區間的數都小于等于分界點&#xff0c;…

Django項目架構

背景&#xff1a;很多人寫 Django 時容易“什么都往 views 里塞”&#xff0c;結果項目一大就亂套了。需要把 視圖層 / 業務層 / 數據層 等職責清晰分出來。圖解說明Client&#xff1a;瀏覽器 / App / 前端調用 API。urls.py&#xff1a;定義 API 路由&#xff0c;把請求分發到…

MySQL】從零開始了解數據庫開發 --- 表的操作

永遠記住&#xff0c;你的存在是有意義的&#xff0c; 你很重要&#xff0c; 你是被愛著的&#xff0c; 而且你為這個世界帶來了無可取代的東西。 -- 麥克西 《男孩、鼴鼠、狐貍和馬》-- 從零開始了解數據庫開發創建數據表查看表結構修改數據表結構重命名表復制表刪除表今天我們…

MySQL底層架構設計原理詳細介紹

文章目錄一、MySQL體系結構概覽二、連接層&#xff08;Connection Layer&#xff09;1. 連接器&#xff08;Connectors&#xff09;2. 連接池&#xff08;Conncction Pool&#xff09;三、服務層&#xff08;Server Layer&#xff09;1. SQL接口組件&#xff08;SQL Interface&…

QB/T 4674-2021 汽車內裝飾用聚氨酯束狀超細纖維合成革檢測

汽車內飾品聚氨酯束狀超細纖維合成革是指以海島型雙組份或多組分纖維加工成飛織造布&#xff0c;再經水性聚氨酯樹脂或溶劑型聚氨酯樹脂浸漬、濕法凝固、溶劑或堿液萃取及后整理等工藝制成的汽車內裝飾皮革。QB/T 4674-2021 汽車內裝飾用聚氨酯束狀超細纖維合成革檢測項目測試項…

QML和Qt Quick

QML和Qt Quick QML 和 Qt Quick 是 Qt 框架中緊密相關但概念不同的兩個部分&#xff0c;它們之間的關系可以用如下方式清晰說明&#xff1a; 核心區別概覽??特性????QML????Qt Quick????本質??聲明式編程??語言??基于 QML 的??框架/庫????作用??定…

JavaScript 結構型設計模式詳解

1. 代理模式1.1. 使用場景代理模式在不改變原始對象的前提下&#xff0c;通過代理對象控制對其訪問&#xff0c;通常用于權限控制、延遲加載、遠程調用等場景。在前端開發中&#xff0c;可以通過代理模式對網絡請求、緩存機制等進行控制。1.2. 代碼實現class ApiService {reque…

攝像頭模塊在運動相機中的特殊應用

運動相機作為記錄高速運動場景的專用設備&#xff0c;其攝像頭模塊的設計與普通消費電子產品存在顯著差異。根據行業資料和技術發展&#xff0c;攝像頭模塊在運動相機中的特殊應用主要體現在以下五個維度&#xff1a;一、極端環境適應性設計運動相機的攝像頭模塊針對戶外運動場…

SpringBoot + MinIO/S3 文件服務實現:FileService 接口與 FileServiceImpl 詳解

在企業項目中&#xff0c;文件上傳和管理是非常常見的需求。本文基于 芋道源碼 的實現&#xff0c;介紹如何封裝一個通用的 文件服務 FileService&#xff0c;支持&#xff1a;文件上傳&#xff08;保存數據庫記錄 存儲文件到 S3/MinIO 等對象存儲&#xff09;文件下載與刪除文…

Oracle RAC認證矩陣:規避風險的關鍵指南

RAC Certification Matrix&#xff08;RAC認證矩陣&#xff09; 是Oracle官方發布的硬件、軟件與操作系統兼容性清單&#xff0c;明確規定了哪些平臺、組件和版本可以正式支持Oracle RAC&#xff08;Real Application Clusters&#xff09;的部署。它是搭建或升級RAC環境時必須…

【自然語言處理與大模型】如何通過微調來agent性能?

雖然大模型本身具備一定的指令理解和工具調用潛力&#xff0c;但在實際應用中&#xff0c;尤其是在復雜或專業領域&#xff0c;往往需要通過微調來提升Agent的工具調用能力。問題一&#xff1a;基座模型無法準確識別或選擇特定領域的工具當Agent需要在醫療、金融、法律、工業控…

在 Keil 中將 STM32 工程下載到 RAM 進行調試運行

在 Keil 中將 STM32 工程下載到 RAM 進行調試運行 在使用 STM32 進行調試時&#xff0c;默認情況下代碼會被燒寫到 Flash 中運行。然而&#xff0c;Flash 寫入速度較慢&#xff0c;擦寫次數有限&#xff0c;且調試過程中頻繁燒寫可能影響開發效率。在某些場景下&#xff08;如快…

【51單片機】【protues仿真】基于51單片機寵物投食系統

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 一、主要功能 1、LCD1602液晶顯示時間、溫度、食物重量 2、按鍵手動投喂食物? 3、稱重模塊檢測當前食物重量 4、食物重量小于閾值會聲光警報并自動投喂 二、使用步驟 基于51單片機的寵物投食…

騰訊云負載均衡增加訪問策略后訪問失敗

為了測試&#xff0c;在負載均衡的安全組添加2條安全策略&#xff0c;限制辦公室內IP可訪問&#xff0c;其他IP地址拒絕所有訪問。結果&#xff0c;訪問失敗。經過反復測試&#xff0c;主要是js問價加載失敗&#xff0c;動態接口訪問代碼返回正常。再進行測試&#xff0c;發現去…

CSS的文本樣式

1.文本樣式的分類注意&#xff1a;必須先建立標簽&#xff0c;再在head中修改1.1字體樣式1.1.1字體顏色代碼演示<head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&g…

R語言讀取excel文件數據-解決na問題

文章目錄安裝R語言運行環境實現代碼遇到的問題總結安裝R語言運行環境 安裝教程連接, 包含國內鏡像快速下載 實現代碼 實現思路&#xff1a;使用python將文件的空字符的位置變成0&#xff0c;生成csv文件后交給R語言處理python實現代碼如下&#xff1a; import pandas as pd…

【Nginx 運維實戰】版本替換:強制 vs 平滑升級全解析

【Nginx 運維實戰】版本替換&#xff1a;強制 vs 平滑升級全解析一&#xff1a;版本替換的兩種思路二&#xff1a;使用場景對比三&#xff1a;實戰1&#xff09;強制替換1.備份舊版本2.替換為新版本3.**賦予執行權限**4.**重啟 Nginx**2&#xff09;平滑替換1.確認進程文件2.備…