首页 > 编程语言 >JavaWeb基础-学习笔记02

JavaWeb基础-学习笔记02

时间:2024-10-03 16:50:29浏览次数:7  
标签:02 事务 JavaWeb mysql 数据库 MySQL 5.2 笔记 sql

02 MySQL数据库、SQL、数据库设计、事务、JDBC

1. MySQL 数据库

1.1 MySQL 的安装:

包含两种安装方式,解压包安装、压缩包安装。
通过解压包安装:
下载压缩包后进行解压、添加 my.ini 初始化配置文件、添加环境变量;
添加 mysqld 服务、启动该服务。

期间遇到的一些问题和解决方案:

  1. 找不到dll文件,导致安装失败。是因为c++资源库里少了一个资源文件,可以通过安装对应c++资源库或dll修复解决;
  2. 初始化配置文件里utf8 写成 utf-8,会报错找不到对应字符集;
  3. 初始化配置文件里一些参数值随着版本升级不再适用,可直接删除;
  4. 无法正常启动 mysqld服务,可能是因为环境变量的路径添加错误。在任务管理器-服务里,找到mysql服务详情的路径信息进行检查,该路径默认使用注册表里的路径,如果与实际sqld.exe文件位置不一致,更改注册表里的地址;

【data】目录下的三个自带数据库:

  • mysql: 存放最为核心的一些信息,比如权限、安全等
  • performance_schema:存储性能相关信息
  • sys:存储系统相关信息

一般客户端不对这三个进行改动

1.2 MySQL数据模型

MySQL是一种关系型数据库,关系型数据库是由多张能相互连接的二维表组成的数据库;
简单来说,通过表来存储数据的数据库,就称为 关系型数据库。(不通过表的,非关系型数据库);

其实 一个数据库在电脑上对应的就是data目录下的一个文件夹

2. SQL简介

Structured Query Language,结构化查询语言,定义操作所有关系型数据库的统一标准
对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方,称之为“方言”

  • where 和 having 的区别
  1. 执行时机不一样,where 是分组之前进行限定,不满足 where 条件,则不参与分组,而 having 是分组之后堆结果进行过滤
  2. 可判断的条件不一样:where 不能对聚合函数进行判断,having 可以

3. 数据库设计

  • 一对多 表关系(一个部门对应多个员工)
    实现方式:在 多 的一方建立外键,指向 一 的一方

  • 多对多 表关系(一个商品对应多个订单,一个订单包含多个商品)
    实现方式:建立第三张表,中间表,中间表至少包含 两个外键,分别关联两方主键
    (通常也会加一些业务字段进去)

  • 一对一 表关系(用户 和 用户详情)
    一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能 ——> 用户表+用户详情表
    实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)

4. 事务

4.1 简介

数据库的事务(transaction)是一种机制、一个操作序列,包含了一组数据库操作命令
事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败
事务是一个不可分割的工作逻辑单元

开启事务
BEGIN/START
提交事务
COMMIT

4.2 事务四大特征

Atomicity:原子性,事务时不可分割的最小操作单位,要么同时成功,要么同时失败
Consistency:一致性,事务完成时,必须使所有的数据都保持一致状态
Isolation:隔离性,多个事务之间,操作的可见性
Durability:持久性,事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

5. JDBC

5.1 简介

JDBC,Java DataBase Connectivity,Java数据库连接,就是使用 Java语言操作关系型数据库的一套API


IDEA添加对应jar包:

官网下载jar包,放入项目目录下,右键-添加至lib,才能被项目内代码识别。

使用Java操作数据库步骤:

5.2 JDBC API详解

5.2.1 DriverManager类

驱动管理类作用:

  • 注册驱动
    Class.forName("com.mysql.jdbd.Driver")

MySQL 5之后的驱动包,可以省略注册驱动的步骤
自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类

  • 获取数据库连接
    static Connection getConnection(String url, String user, String password)

url语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2...
url示例:jdbc:mysql://127.0.0.1:3306/db1
配置 useSSL=false参数,禁用安全连接,解决警告提示(jdbc:mysql://127.0.0.1:3306/db1?useSSL=false)

5.2.2 Connection

数据库连接类作用:

  • 获取执行sql对象

普通执行sql对象

Statement createStatement()

预编译sql的执行sql对象:防止sql注入

PreparedStatement prepareStatement(sql)

执行存储过程的对象

CallableStatement prepareCall(sql)

  • 事务管理

5.2.3 Statement

作用:

  • 执行sql语句

5.2.4 ResultSet

结果集对象作用:

  • 封装了DQL查询语句的结果
    Result stmt.executeQuery(sql) # 执行DQL语句,返回ResultSet对象
  • 获取查询结果
    boolean next() # 将光标从当前位置向前移动一行;判断当前行是否为有效行

xxx getXxx(参数) # 获取参数; 参数类型:int列的编号(从1开始)、String列的名称

5.2.5 PreparedStatement

作用:

  • 预编译sql语句并执行:预防sql注入问题

sql注入:是指通过操作输入来修改事先定义好的sql语句,用以达到执行代码对服务器进行攻击的方法

5.3 数据库连接池

5.3.1 简介

  • 数据库连接池是个容器,负责分配、管理数据库连接
  • 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
  • 释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏
  • 好处:
    资源重用;
    提升系统响应速度;
    避免数据库连接遗漏;

标签:02,事务,JavaWeb,mysql,数据库,MySQL,5.2,笔记,sql
From: https://www.cnblogs.com/97gogo/p/18436138

相关文章

  • 从2023济南K学习滑动窗口中位数问题
    板子对顶堆template<classT>structDualHeap{Heap<T,std::greater<T>>small;//小根堆,里面存放大的值Heap<T,std::less<T>>big;//大根堆,里面存放前k小的值//中位数就是big.top()DualHeap(){}voidupdate(){if(b......
  • 信息学奥赛复赛复习10-CSP-J2020-03表达式求值-栈、后缀表达式、isdigit函数、c_str函
    PDF文档公众号回复关键字:202410031P7073[CSP-J2020]表达式[题目描述]小C热衷于学习数理逻辑。有一天,他发现了一种特别的逻辑表达式。在这种逻辑表达式中,所有操作数都是变量,且它们的取值只能为0或1,运算从左往右进行。如果表达式中有括号,则先计算括号内的子表达式的......
  • The 2021 ICPC Asia Shenyang Regional Contest
    B-BitwiseExclusive-ORSequence题意\(n\)个数,\(m\)个关系,每个关系形如\(a_u⊕a_v=w\),表示第\(u\)个数与第\(v\)数的异或运算结果为\(w\)。求是否有这样的\(n\)个数满足所有关系要求,如果没有输出\(-1\),如果有输出所有满足要求的方案中,所有数字的和的最小值。思路建图......
  • 2024/10/2 CSP-S daimayuan模拟赛复盘
    2024/10/2CSP-Sdaimayuancontestlink(Day7)A.序列题面描述给你一个序列\(r_1,r_2,\dots,r_n\),问有多少非负整数序列\(x_1,x_2,\dots,x_n\)满足:对于所有\(i\),\(0\leqx_i\leqr_i\)。满足\(x_1|x_2|…|x_n=x_1+x_2+⋯+x_n\),左边为二进制或。输出答案对......
  • 2024.9.20
    周一smkThe2024ICPCAsiaECRegionalsOnlineContest(II)补题AFG逆元fzb补题xmq忘了()周二smkThe2024ICPCAsiaECRegionalsOnlineContest(II)补题IJfzbThe2ndUniversalCup.Stage1:Qingdao补题xmq最小生成树模拟周三smkThe202......
  • TS学习笔记(一)
    1.js的灵活性,对小项目而言非常好,但是对于大的项目而言,如果没有变量类型检查,随着变量类型的数量成倍的增加,你总有记错、遗漏的时候2.要解决灵活性带来的隐患,我们需要的是类型。更准确的说,是项目开发时的类型检查能力。3.TS由三个部分组成:类型、语法与工程。4.TS内置了一批类......
  • 菜鸟笔记之pwn工具篇--pwntools库的基本使用
    啥是pwntools?Pwntools是一个用于漏洞利用和二进制分析的Python库,广泛应用于安全研究、渗透测试和竞争性编程(如CTF,CaptureTheFlag)中。它为用户提供了一套强大的工具和功能,以简化与二进制文件的交互、网络通信以及各种常见任务的执行。简而言之,pwntools可以说是pwn手必备的......
  • 菜鸟笔记之pwn工具篇--Pwndbg基础使用
    什么是pwndbg?它是gdb的一个插件,增加了许多功能,来帮助pwn手可以快速寻找到所需要的信息,除了pwndbg之外还有peda、gef等工具可以用来协助进行调试。如何给pwndbg分屏?vim~/.gdbinitsetcontext-output/dev/pts/2#这里修改成2,那么就会在第二个终端显示信息pwndbg的基础操......
  • P11119 [ROI 2024 Day 2] 保持连接
    P11119[ROI2024Day2]保持连接设\(L_i,R_i\)分别表示覆盖了\(i\)的的线段中最靠左的左端点和最靠右的右端点,特殊的,如果没有覆盖,则\(L_i=R_i=i\)。显然所有\(R_i\)就刻画了一种局面。如果没有\(X\)的操作,设\(g_i\)表示从\(i\)出发到\([i,n]\)的重新连接的次数......
  • 2024秋季个人阅读计划
    本学期计划阅读三本书,分别为《代码大全》、《人件集》和《用户故事与敏捷方法》,以下我本学期的阅读计划第4周:阅读:《代码大全》第1-3章阅读笔记1:10月4日第5周:阅读:《代码大全》第4-6章阅读笔记2:10月11日第6周:阅读:《代码大全》第7-10章阅读笔记3:10月18日第7周:阅读:......