入门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.mzph.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;也是常…