入門JavaWeb之 JDBC 連接數據庫

JDBC:Java Database Connectivity,Java 數據庫連接

需要 jar 包支持:

java.sql

javax.sql

mysql-connector-java(連接驅動,必須導入)

在 MySQL 先建個 jdbc 數據庫后?USE jdbc;

執行后再 CREATE TABLE?創建表

執行后插入數據 INSERT INTO

USE jdbc;
create table users(id int primary key,`name` varchar(40),`password` varchar(40),email varchar(60),birthday date
);
insert into users(id,`name`,`password`,email,birthday)
values(1,'張三1','123','zs1@qq.com','2024-06-30');
insert into users(id,`name`,`password`,email,birthday)
values(2,'張三2','123','zs2@qq.com','2024-06-30');
insert into users(id,`name`,`password`,email,birthday)
values(3,'張三3','123','zs3@qq.com','2024-06-30');
insert into users(id,`name`,`password`,email,birthday)
values(4,'張三4','123','zs4@qq.com','2024-06-30');select * from users;

點這個執行

查詢結果:

pom.xml 導入數據庫依賴:

    <!-- 連接數據庫 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency>

?IDEA 連接數據庫(沒有的去 Settings Plugins 搜索 DataBase 下載)

JDBC 固定步驟:

1.加載驅動

2.連接數據庫

3.向數據庫發送 SQL 對象 Statement

4.編寫 SQL

5.執行 SQL

6.關閉連接

代碼如下:

package com.demo.jdbc;import java.sql.*;public class Demo {public static void main(String[] args) throws ClassNotFoundException, SQLException {//配置信息 useUnicode=true&characterEncoding=utf-8 解決中文亂碼String url = "jdbc:mysql://localhost:3306/jdbc?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";String username = "root";String password = "root";//1.加載驅動Class.forName("com.mysql.jdbc.Driver");//2.連接數據庫Connection connection = DriverManager.getConnection(url, username, password);//3.向數據庫發送SQL對象Statement:CRUD:create添加 read讀取 update修改 delete刪除Statement statement = connection.createStatement(); //4.編寫SQLString sql = "select * from users";//5.執行查詢SQL,返回一個ResultSet結果集ResultSet resultSet = statement.executeQuery(sql);while (resultSet.next()){System.out.println("id="+resultSet.getObject("id"));System.out.println("name="+resultSet.getObject("name"));System.out.println("password="+resultSet.getObject("password"));System.out.println("email="+resultSet.getObject("email"));System.out.println("birthday="+resultSet.getObject("birthday"));}//6.關閉連接,釋放資源,先開后關resultSet.close();statement.close();connection.close();}
}

編寫 SQL 時,因為引號里沒有顯示,可以在 IDEA 提供連接的數據庫里編寫 sql 語句然后復制過去

代碼執行效果如下:

同理,刪除語句:

delete from users where id = 4;

增刪改都用 executeUpdate,int 型是受影響的行數

int i = statement.executeUpdate(sql);??

JDBC 事務:

要么都成功,要么都失敗

ACID 原則:保證數據的安全

原子性 (Atomicity)、 一致性(Consistency)、隔離性(Isolation) 、?持久性(Durability)

Junit 單元測試依賴:

(從?導入 jar 包?復制過來的 junit 把 <scope> 這行刪除,不然沒有 @Test 注解)

    <!-- 單元測試 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency>

@Test 注解只在方法上有效,不需要 main 方法,只要加了這個注解的方法就能運行

public class Test {@org.junit.Testpublic void test(){System.out.println("Hello");}
}

舉個事務的例子:轉賬

建表,插入數據

use jdbc;
create table account(id int primary key auto_increment,`name` varchar(40),money float
);insert into account(`name`,money) value('A',100);
insert into account(`name`,money) value('B',100);

通知數據庫開啟事務,false開啟

connection.setAutoCommit(false);

代碼如下:

package com.demo.jdbc;import org.junit.Test;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class JdbcDemo {@Testpublic void test(){//配置信息 useUnicode=true&characterEncoding=utf-8 解決中文亂碼String url = "jdbc:mysql://localhost:3306/jdbc?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";String username = "root";String password = "root";Connection connection = null;try {//1.加載驅動Class.forName("com.mysql.jdbc.Driver");//2.連接數據庫connection = DriverManager.getConnection(url, username, password);//3.通知數據庫開啟事務,false開啟connection.setAutoCommit(false);String sql = "update account set money = money-10 where name = 'A'";connection.prepareStatement(sql).executeUpdate();String sql1 = "update account set money = money+10 where name = 'B'";connection.prepareStatement(sql1).executeUpdate();//提交事務connection.commit();System.out.println("success");} catch (Exception e) {try {//如果出現異常,就通知數據庫回滾事務connection.rollback();} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();}finally {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}
}

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

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

相關文章

15- 22題聚合函數 - 高頻 SQL 50 題基礎版

目錄 1. 相關知識點2. 例子2.15 - 有趣的電影2.16 - 平均售價2.17 - 項目員工 I2.18 - 各賽事的用戶注冊率2.19 - 查詢結果的質量和占比2.20 - 每月交易 I2.21 - 即時食物配送 II2.22 - 游戲玩法分析 IV 1. 相關知識點 函數 函數含義order by排序group by分組between 小值 an…

Chrome備份數據

Chrome備份數據 1、 導出谷歌瀏覽器里的歷史記錄 參考&#xff1a;https://blog.csdn.net/qq_32824605/article/details/127504219 在資源管理器中找到History文件&#xff0c;文件路徑&#xff1a; C:\Users\你的電腦用戶名\AppData\Local\Google\Chrome\User Data\Default …

堆排序思想分享

人不走空 &#x1f308;個人主頁&#xff1a;人不走空 &#x1f496;系列專欄&#xff1a;算法專題 ?詩詞歌賦&#xff1a;斯是陋室&#xff0c;惟吾德馨 目錄 &#x1f308;個人主頁&#xff1a;人不走空 &#x1f496;系列專欄&#xff1a;算法專題 ?詩詞歌…

丟失的數字(MissNumber)

丟失的數字 給定一個包含 [0, n] 中 n 個數的數組 nums &#xff0c;找出 [0, n] 這個范圍內沒有出現在數組中的那個數。 示例 1&#xff1a; 輸入&#xff1a;nums [3,0,1] 輸出&#xff1a;2 解釋&#xff1a;n 3&#xff0c;因為有 3 個數字&#xff0c;所以所有的數字都…

五、Pentium 微處理器保護模式存儲管理,《微機系統》第一版,趙宏偉

一、分段存儲管理 Pentium支持分段存儲管理、分頁存儲管理和段頁式存儲管理。 1.1 分段存儲管理的基本思想 一個程序由多個模塊組成。 每一個模塊都是一個特定功能的獨立的程序段。 段式管理&#xff1a;把主存按段分配的存儲管理方式。 程序模塊→段→段描述符→段描述符…

【設計】在Java后端開發時使用JSONObject完全替代JAVABean(DTO,VO)是否可行?

其實這樣做你是得不償失&#xff0c;不過也要看什么項目&#xff0c;如果你的項目只在只需要實現功能&#xff0c;不在乎健壯性&#xff0c;可持續性那就完全可以。因為我現在公司老項目所有用的POJO的地方都是用JSONObject。代碼可讀性幾乎為0。你用了可能喪失以下功能&#x…

【微服務】后臺管理項目多數據源管理方案實戰

目錄 前言 1、使用Spring提供的AbstractRoutingDataSource 2、使用MyBatis注冊多個SqlSessionFactory 3、使用dynamic-datasource框架 前言 Java后臺使用MyBatis-plus 快速訪問多個數 據源&#xff0c;這里分享三種常用的多數據源管理方案 1、使用Spring提供的AbstractRout…

【C++深度探索】繼承機制詳解(一)

hello hello~ &#xff0c;這里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;歡迎大家點贊&#x1f973;&#x1f973;關注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;個人主頁&#xff1a;大耳朵土土垚的博客 &#x1…

代碼托管服務:GitHub、GitLab、Gitee

目錄 引言GitHub&#xff1a;全球最大的代碼托管平臺概述功能特點適用場景 GitLab&#xff1a;一體化的開發平臺概述功能特點適用場景 Gitee&#xff08;碼云&#xff09;&#xff1a;中國本土化的代碼托管服務概述功能特點適用場景 功能對比結論 引言 在現代軟件開發中&#…

numpy - array(3)

arr1 np.array([[(1000, 1001, 1002, 1003), (1010, 1011, 1012, 1013), (1020, 1021, 1022, 1023)],[(1100, 1101, 1102, 1103), (1110, 1111, 1112, 1113), (1120, 1121, 1122, 1123)]], dtypeint) (1) 根據坐標訪問元素或內容,更改訪問的內容&#xff0c;array也會更改。“…

C++操作系列(一):MinGW環境安裝與配置(無報錯版)

本文選擇MinGW作為安裝對象。 1. 下載MinGW 進入官網&#xff1a;MinGW - Minimalist GNU for Windows download | SourceForge.net 點擊File&#xff1a; 劃到最下面&#xff1a; &#xfeff; Windows 64位系統下載seh結尾的安裝包&#xff1a; 2. 安裝MinGW 解壓MinGW&am…

力扣第218題“天際線問題”

在本篇文章中&#xff0c;我們將詳細解讀力扣第218題“天際線問題”。通過學習本篇文章&#xff0c;讀者將掌握如何使用掃描線算法和堆來解決這一問題&#xff0c;并了解相關的復雜度分析和模擬面試問答。每種方法都將配以詳細的解釋&#xff0c;以便于理解。 問題描述 力扣第…

【CSS】深入理解CSS 的steps()函數

在CSS動畫中&#xff0c;steps()函數是一個時間函數&#xff0c;它主要用于animation-timing-function屬性&#xff0c;以定義動畫的步進方式。當你想要動畫的某個屬性&#xff08;如background-position或transform: translateX()&#xff09;在特定的步驟之間變化時&#xff…

探索 ES6:現代 JavaScript 的新特性

隨著 JavaScript 的不斷演進&#xff0c;ECMAScript 2015&#xff08;簡稱 ES6&#xff09;作為 JavaScript 的一次重大更新&#xff0c;帶來了許多新特性和語法改進&#xff0c;極大地提升了開發體驗和代碼質量。本文將詳細介紹 ES6 的主要新特性&#xff0c;并展示如何在實際…

NLTK:原理與使用詳解

文章目錄 NLTK簡介NLTK的核心功能1. 文本處理2. 詞匯處理3. 語法分析4. 語義分析5. 情感分析 NLTK的使用1. 安裝NLTK2. 導入NLTK庫3. 下載NLTK數據集4. 文本處理示例5. 情感分析示例 總結 NLTK簡介 NLTK是一個開源的Python庫&#xff0c;用于處理和分析人類語言數據。它提供了…

扛鼎中國AI搜索,天工憑什么?

人類的創作不會沒有瓶頸&#xff0c;但AI的熱度可不會消停。 大模型之戰依舊精彩&#xff0c;OpenAI選擇在Google前一天舉行發布會&#xff0c;兩家AI企業之間的拉扯賺足了熱度。 反觀國內&#xff0c;百模大戰激發了大家對于科技變革的熱切期盼&#xff0c;而如今行業已逐漸…

【操作系統期末速成】 EP01 | 學習筆記(基于五道口一只鴨)

文章目錄 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;??????1.1 考點一&#xff1a;操作系統的概率及特征 三、總結&#xff1a;&#x1f353;&#x1f353;&#x1f353; 一、前言&#x1f680;&#x1f680;&#x1f680; ?? 回報不在行動…

文章浮現之單細胞VDJ的柱狀圖

應各位老師的需求復現一篇文章的中的某個圖 具體復現圖5的整個思路圖&#xff0c;這里沒有原始數據&#xff0c;所以我使用虛擬生產的metadata進行畫圖 不廢話直接上代碼&#xff0c;先上python的代碼的結果圖 import matplotlib.pyplot as plt import numpy as np# 數據&#…

架構師篇-8、運用事件風暴進行業務領域建

如何成為優秀架構師&#xff1f; 需要有一定的技術積累&#xff0c;但是核心是懂業務。 具備一定的方法&#xff0c;并且有很強的業務理解能力。 技術架構師&#xff1a;形成技術方案&#xff0c;做的更多的是底層的平臺&#xff0c;提供工具。 業務架構師&#xff1a;解決方…

兩數之和你會,三數之和你也會嗎?o_O

前言 多少人夢想開始的地方&#xff0c;兩數之和。 但是今天要聊的不是入門第一題&#xff0c;也沒有面試官會考這一題吧…不會真有吧&#xff1f; 咳咳不管有沒有&#xff0c;今天的豬腳是它的兄弟&#xff0c;三數之和&#xff0c;作為雙指針經典題目之一&#xff0c;也是常…