IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【JavaWeb】Mysql数据库 -> 正文阅读

[大数据]【JavaWeb】Mysql数据库


【JavaWeb】Mysql数据库

(黑马程序员b站课)

这边文章仅仅是记录自己的学习过程,适合有sql注入基础、java基础、html等基础的朋友观看

JavaWeb学习过程

1.数据库

? Mysql

? JDBC

? Maven

? MyBatis

2.前端

? HTML+CSS+JavaScript

? Ajax+Vue+Element

3.JavaWeb核心技术

? Tomat+HTTP+Servlet

? Request+Response

? JSP

? Cookie+Session

? Filter+Listener

? 综合案例

Mysql基础

1.Mysql目录

bin文件夹:放置了一些可执行文件,来操作对应的Mysql。

docs文件夹:放置了一些文档。

include文件夹:放置了.h的头文件信息,因为Mysql是C语言写的。

lib文件夹:放置了一些C语言的库文件。

share文件夹:放置了一些语言和字符集。

data文件夹:放置数据库。

.frm文件:表文件

.MYD文件:数据文件

2.Mysql语句

show database; #关键字建议用大写
单行注释:--  或 #
多行注释:/**/

DDL操作数据库:
show database;
create database;
create database if not exists;
drop database; 
drop database if esists; 
select databse(); #查看当前使用的数据库
use 数据库名称; #使用数据库

DDL操作数据表:
show tables; #查询当前数据库下所有表的名称
desc 表名称; #查询表的结构
creat table 表名(字段名1 数据类型1,
               字段名2 数据类型2);
drop table 表名;
drop table if exists 表名;
alter table 表名 rename to 新表名;
alter table 表名 add 列名 数据类型;      #添加列
alter table 表名 modify 列名 新数据类型; #修改数据类型
alter table 表名 change 列名 新列名 新数据类型;#修改列名和数据类型
alter table 表名 drop 列名;

DML操作数据表:
insert into 表名(列名1,列名2values (1,2);
update 表名 set 列名=1,列名2=2 where 条件;
delete from 表名 where 条件;

image-20220630140021652

sql查询语句

 SELECT 字段列表
 FROM 表名列表
 WHERE 条件查询
 GROUP BY 分组字段
 HAVING 分组后条件
 ORDER BY 排序字段
 LIMIT 分页限定

具体查看

3.约束

概念:作用于表中列上的规则,用于限制加入表中的数据,也就是一个条件。

约束是数据更加正确,有效和完整。

分类:

image-20220630142930577

其实就是给对应的列添加一个关键字,没什么东西

creat table 表名(字段名1 数据类型1 关键字,
               字段名2 数据类型2 关键字);
creat table 表名(id int PRIMARY KEY,
               name VARCHAR(50) NOT NULL UNIQUE);               

Mysql不支持检查约束,检查约束可以在代码里实现

外键约束

外键用来让两个表数据之间建立链接。

--创建表时添加外键约束
create table 表名(
	列名 数据类型;
    constraint 外键名称 foreign key (外键列名) references 主表(主表列名)
)
--建完表之后添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名称  foreign key (外键列名) references 主表(主表列名)

4.数据库设计

1.软件研发步骤

image-20220630150744915

2.数据库设计概念

建立数据库的表结构表与表之间的关联关系的过程

有什么表,里面有什么字段,有什么关系

3.数据库设计的步骤

1)需求分析

2)逻辑分析

3)物理设计

4)维护设计

4.数据库表之间的关系

image-20220630151557668

多对多实现方式:建立第三张表,中间表至少包含两个外键,分别关联两方的主键。

image-20220630151421165

5.多表查询

内连接查询
--隐式内连接
SELECT 字典列表 FROM1,2 WHERE 条件;

--显式内连接
SELECT 字典列表 FROM1 [inner] join2 on 条件;

--左外连接查询
SELECT 字典列表 FROM1 left [outer] join2 on 条件;

--右外连接查询
SELECT 字典列表 FROM1 right [outer] join2 on 条件;

--子查询 查询中嵌套查询
SELECT * FROM emp where salary > (select salary from emp where name="a");

--in关键字进行条件判断子查询
SELECT * from emp where id in (select did from dept where dname ='a' or dname ='b');
 
--虚拟表查询
把查询到的表的语句放入另一个语句的from里面

image-20220630174817546

5.事务

事务简介:事务是一种机制、一个操作序列,包含了一组数据库操作命令

事务把所有的命令作为一个整体向系统提交或者撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败

事务是一个不可分割的工作逻辑单元。(例子:转账操作的查询余额,扣钱,加钱的操作序列)

--开启事务
start transaction;
或者 begin;

--提交事务
commit;

--回滚事务
rollback;

事务的四大特征

image-20220630183948469

Mysql里面事务是自动提交的,也就是说一个单独的sql语句是自动提交了事务。

JDBC操作数据库

JDBC(Java DataBase Connectivity)就是使用java来操作关系型数据库的一套API

JDBC定义了一套标准接口来实现对所有关系型数据库的操作,对应的实现类是Mysql实现类,Oracle实现类,DB2实现类等,真正执行的代码是驱动jar包中的实现类。

JDBC快速入门(jdk1.8版本)

下载jar包,先在IDEA创建一个new——>directory,把jar放在这个directory里面,然后右键这个jar,选择add as library,设置level为Module library就可以

  • 0.创建工程,导入驱动jar包
mysql-connector-java-5.1.48.jar
  • 1.注册驱动
Class.forName("com.mysql.Driver");//将一个mysql的驱动类(driver)加载进内存
  • 2.获取连接
Connection conn = DriverManager.getConnection (url,username,password);//通过java代码发送对应的sql语句给到mysql服务器,就要获取数据库连接
  • 3.定义sql语句
String sql ="select...";//写好sql语句
  • 4.获取执行sql对象
Statement stmt = conn.creatStatement(); 
  • 5.执行sql
stmt.executeUpdate(sql);//把sql语句发送给mysql服务器去执行
  • 6.处理返回结果

  • 7.释放资源

image-20220630203416963

JDBC API详解

DriverManager

Connection

Statement

ResultSet

PreparedStatement//Statement 的加强版

DriverManager(驱动管理类)

作用:1.注册驱动 2.获取数据库连接

DriverManager是一个工具类,里面的方法都是静态的方法,直接加.就可以调用,两个方法常用:

getConnection()//获取一个连接
registerDriver()//forname真正执行的方法,mysql5.0之后可以不用注册驱动了

1.注册驱动

Class.forName("com.mysql.jdbc.Driver");

Driver的源码:

image-20220630210047483

2.获取数据库连接

语法:jdbc:mysql://IP地址:端口号/数据库名称?参数键值对

jdbc:mysql://127.0.0.1:3306/db1

  • jdbc对应的mysql协议,如果连接的是本地且端口是默认端口3306,可以不写ip和端口。

  • 可以配置useSSL=false参数,禁用安全连接方式,解决警告提示

Connection(数据库连接类)

作用: 1.获取执行sql的对象 2.管理事务

1.获取执行sql的对象

  • 普通执行sql对象
Statement creatStatement()
  • 预编译sql的执行sql对象:防止sql注入
PreparedStatement prepareStatement(sql)
  • 执行存储过程的对象
CallableStatement prepareCall(sql)

2.管理事务

这个事务管理和Mysql本身的事务管理不一样,是用类来实现,Mysql默认自动提交事务

Connection接口中定义了3个对应的方法:

开启事务:setAutoCommit(boolean autoCommit)  //true自动提交事务;false手动提交事务,也就是开启事务
提交事务:commit()
回滚事务:rollback()

Statement(执行sql类)

作用:执行sql语句

int executeUpdate(sql)
//只能执行DML,DDL语句,返回值:DML语句影响的行数,DDL语句执行后,执行成功也可能返回0
Resultset executeQuery(sql)
//执行DQL语句,返回值:Resultset结果集对象

Resultset(结果集对象)

作用:1.封装了DQL查询语句的结果

获取查询结果的方法:

boolean next() //将光标从当前位置向前移动一行,并判断当前行是否为有效行
//返回值:true 有效行,当前行有数据; false 无效行,当前行无数据
    
xxx getxxx(参数) //获取数据
//xxx是数据类型;如 int getInt(参数);String getString(参数)
//一个参数:int就是列的编号,从1开始,String就是列的名称

使用步骤:游标向下移动,并判断改行有没有数据,再获取数据

while(rs.next()){
    //获取数据
    int a = rs.getString(参数);
}

小技巧:Alt+Insert可以快速补全构造方法等方法

Java创建集合的语法:把Account对象放入集合list1里面

List<Account> list1 = new ArrayList<>();

PreparedStatement(预编译sql对象)

作用:预编译SQL语句并执行,可以预防sql注入问题

  • 1.获取PreparedStatement对象
//sql语句中的参数值,使用?占位符替代
String sql = "select * from user where useename = ? and password = ? ";

//通过Connection对象获取对象,并传入对应的sql语句
PreparedStatement pstmt = conn.preparedStatement(sql);
  • 2.设置参数值
PreparedStatement对象:setxxx(参数1,参数2)  给?赋值
//xxx:数据类型
//参数1:?的位置编号,从1开始    参数2:?的值
  • 3.执行sql
executeUpdate();
//executeQuery();
//注意没有参数了,用无参的方法,不需要再传递sql

例子:

//定义sql语句
String sql="update account set money=? where id = ?";

//获取pstmt对象
PreparedStatement pstmt =conn.prepareStatement(sql);

//设置?的值
int money=5000;
int id =1;
pstmt.setInt(1,money);
pstmt.setInt(2,id);
//关键字和字符全部被转义了,然后以文本的形式传入sql语句,预防了sql注入

//执行sql,用无参的方法
int rs = pstmt.executeUpdate();

//判断修改是否成功
if (rs>0)
	System.out.println("修改成坤!");

预编译的原理:

  • 预编译功能开启:useServerPrepStmts = true

  • 在获取PreparedStatement对象时,就将sql语句发送给mysql服务器进行检查,编译

  • 执行时就不再检查和编译了,模板一样,就只需进行一次检查、编译

数据库连接池

数据库连接池是一个容器,负责分配、管理数据库连接

允许应用程序重复使用一个现有的数据库连接,而不是重新再新建一个

释放空闲时间超过最大空间的数据库连接来避免因为没有释放数据库连接而引起的数据库遗漏

优点:资源重用,提升系统响应速度,避免数据库连接遗漏

image-20220630231532308

连接池实现

标准接口:DataSource

功能:获取连接

Maven

一套标准的项目结构

一套标准化的构建流程

一套依赖管理机制

image-20220701185935739

Maven简介

image-20220701192430996

 <mirror>
      <id>alimaven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
      <blocked>true</blocked>
    </mirror>
  </mirrors>

image-20220701193612894

image-20220701223525829

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.34</version>
    </dependency>
</dependencies>

MyBatis

MyBatis免除了几乎所有的JDBC代码,以及设置参数获取结果集的工作

image-20220701230225813

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 22:59:49  更:2022-07-04 23:00:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 18:34:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码