java连接数据库

小新
2021-10-26 / 0 评论 / 225 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年11月06日,已超过201天没有更新,若内容或图片失效,请留言反馈。

一、数据库的设计

1.1设计数据库的步骤
  1. 收集信息
  2. 标识实体
  3. 标识每个实体需要存储的详细信息
  4. 标识实体之间的关系
1.2 绘制E-R图
  • 实体-关系模型

    1. 实体:

    实体一般是名词,对应表中的一行数据

    1. 属性:

    实体的特征,属性对应表中的列

    1. 联系:

    联系是两个或多个实体之间的关联

    1. 映射基数

      1. 一对一
      2. 一对多
      3. 多对一
      4. 多对多
    2. 实体关系图

      • 矩形表示实体集
      • 椭圆形表示属性
      • 菱形表示联系集
      • 直线用来连接属性和实体集,也用来连接实体集和联系集
  • 关系数据库模式
1.3 数据规范化
 1. 信息重复
 2. 更新异常
 3. 插入异常
 4. 删除异常
  • 规范设计

    • 三打范式内容如下:

      • 第一范式:其目标是确保每列的原子性
      • 第二范式:在第一范式的基础上更进一层,其目标是确保表中的每列都和主键相关
      • 第三范式:在第二范式的基础上更进一层,其目标是确保每列都和主键列直接相关,而不是间接相关

二 、初识MySQL

MySQL的优势

  1. 运行速度快,Mysql体积小,命令执行的速度快
  2. 使用成本低,Mysql是开源的,且提供免费版本,对大多数用户来说大大降低了使用成本
  3. 容易使用,与其他大型数据库的设置和管理相比,其复杂程度较低,易于使用
  4. 可移植性强,Mysql能够运行于多种系统平台,
  5. 适用更多用户,MySQL支持最常用的数据管理功能,适用于中小型企业甚至大型网站应用

端口设置

默认启用TCP/ip网络,默认端口位3306

命令行方式操作MySQL数据库

MySQL中数据库的类型

1.系统数据库

information_schema:主要存储系统中的一些数据库对象,如用户表信息,字段信息权限信息,字符集信息和分区信息等,

performance_schema:主要存储数据库服务器性能参数

mysql:主要存储系统的用户权限西悉尼

test:Mysql数据库管理系统自动创建的数据库,任何用户都可以使用

操作数据库

  1. 创建数据库

create database 数据库名;

  1. 查看数据库列表

show databases;

  1. 选择数据库

use 数据库名

  1. 删除数据库

drop database 数据库名

回顾结构化语言

DML
(数据操作语言)
用来操作数据库中所包含的数据insert
update
delete
DDL
(数据定义语言)
用于创建和删除数据库对象等操作(库,表,索引)create 创建
drop 删除
alter 修改
DQL
(数据查询语言)
用来对数据库中数据进行查询select 查询
DCL
(数据控制语言)
用来控制数据库组件的存取许可,存取权限等grant 赋予权限
commit 提交
rollback 回滚

数据类型

数值类型
  • int 标准整数 4字节
  • decimal 字符串形式的浮点数 M+2个字节
字符串、日期类型
  • char 定长字符串
  • varchar 可变字符串
  • dateTime : 日期66
  • tiemstamp : 精度为1秒 某一时刻

创建表

语法: create table [表名] (

​ 字段1 数据库类型 [字段属性|约束] [约束] [注释]

)

字段的约束及属性

名称关键字说明
非空约束not null字段不允许为空
默认约束defaut赋予某字段默认值
唯一约束unique key()设置字段的值是唯一的允许为空 但只能有一个空值
外键约束foreign key()用于在两表之间建立关系,需要指定引用主表的哪一字段
主键约束primary key()设置该字段为表的主键 可唯一标识该表记录
自动增长auto_increment设置该列为自增

注释

语法: comment '注释内容' comment ='注释内容';

设置字符集编码

charset = 字符集名 ;

MySQL的存储引擎

存储引擎的类型

MySAM 、lnnoDB、Memory 、CSV等9种

MySAM 与 lnnoDB类型的主要区别
名称innoDBMySAM
事务处理支持不支持
数据行锁定支持不支持
外键约束支持不支持
全索引不支持支持
表空间大小较大,约2倍较小

设置表的存储引擎

语法:engine = 存储引擎

3、高级查询(一)

修改表2-2

修改表明

alter table 旧表名 rename[to] 新表名;

添加字段

alter table 表名 add 字段名 数据类型[属性];

修改字段

alter table 表名 change 原字段名 新字段名 数据类型[属性];

删除字段

alter table 表名 drop 字段名;

添加主键

alter table 表名 add constraint 主键名 primary key 表名(主键字段);

添加外键

alter table 表明 add constraint 外键名

foreign key (外键字段);

references 关键表明 (关联字段);

插入多条数据记录

insert into 新表 (字段名列表)

values(值列表1),(值列表2)....(值列表N);

注意:未避免表结构发生变化引发的错误,建议插入数据时写明具体字段名

插入新表

insert into 新表(字段1,字段2)

select 字段1,字段2.....

from 原表 必须先创表

create table 新表

(select 字段1,字段2..... from 原表);

数据更新、删除

语法:

update 表名

set 字段1 =值1,.....字段N=值N

[where 条件];

删除数据记录语法:

delete from 表名 [where 条件];

truncate table 表名;

注意:truncate 语句删除后将重置自增列,表结构及其字段,约束 ,索引保持不变 ,执行速度比delete语句快

DQL语句回顾

select <字段名列表>

from <表名或视图>

[where <查询条件>]

[group by <分组的字段名>]

[having <条件>]

[order by<排序的字段名>[asc 或 desc]]

limit 子句 2-1

[limit[位置偏移量,] 行数]

位置偏移量 = 当前页数-1 * 行数;

使用limit 子句时 注意第一条记录的位置是0!

聚合函数
函数名作用
AVG()返回某字段的平均值
COUNT()返回某字段的行数
MAX()返回某字段的最大值
MIN()返回某字段的最小值
SUM()返回某字段的和

concat(str1) 字符串连接

时间日期函数

NOW() 获取当前日期和时间

datediff(date1,date2) 返回日期参数date1 和date2 之间相隔的天数

adddate(date,n) 计算日期参数date 加上n天后的日期

什么是子查询

子查询是一个嵌套在增删改查语句或其他子查询中的查询

先查询子查询 ,返回所有来自子查询的结果

再执行外围的父查询,返回查询的最终结果

四、高级查询(二)

EXISTS子查询2-1

语法:

select .... from 表名 where exists(子查询)

  • 子查询有返回结果:exists 子查询结果为true
  • 子查询无返回结果:exists 子查询结果为false ,外层查询不执行
子查询注意事项
  • 任何允许使用表达式的地方斗可以使用子查询
  • 嵌套在父类查询select语句的子查询可包括
  • select 子句
  • from 子句
  • where 子句
  • group by 子句
  • having 子句
  • 只出现在子查询中而没出啊先在父查询中的列不能包含在输出列中

事务、视图、索引、备份和恢复

什么是事务

事务(transaction)是作为单个逻辑工作单元执行的一系列操作

多个操作作为一个整体向系统提交,要么都执行、要么都不执行

事务是一个不可分割的工作逻辑单元

事务的特性

事务必须具备以下四个属性 ,简称ACID属性

原子性(Atomicity)

事务是一个完整的操作,事务的各步操作是不可分的(原子的)要么都执行 ,要么都不执行

一致性(Consistency)

当事务完成时,数据必须处于一致状态

隔离性(lsolation)

并发事务之间彼此隔离 , 独立 ,它不应以任何方式依赖于或影响其他事务

持久性(Durability)

事务完成后,它对数据库的修改被永久保存

如何创建事务

MySQL 中支持事务的存储 引擎有innodb和bdb

语法:

开始事务:

begin; 或 start transaction

提交事务

commit;

回滚事务

rollback;

自动关闭和开启事务

set autocommit = 0;

值为0:关闭自动提交
值为1:开启自动提交

关闭自动提交后 ,从下一条SQL语句则开启新事务,需使用commit或rollback语句结束该事务

为什么需要视图

不同的人员关注不同的数据

保证信息的安全性

什么是视图3-2
  • 视图是一张虚拟表
  • 表示一张表的部分数据或多张表的综合数据
  • 其结构和数据是建立在对表的查询基础上
  • 视图中不存放数据
  • 数据存放在视图所引用的原始表中
  • 一个原始表,根据不同用户的不同需求,可以创建不同的视图
什么是视图3-3
  • 视图的用途

​ 筛选表中的行

​ 防止未经许可的用户访问敏感数据‘

​ 降低数据库的复杂程度

​ 将多个物理数据库抽象为一个逻辑数据库

使用视图注意事项
  • 视图中可以使用多个表
  • 一个视图可以嵌套另一个视图
  • 对视图数据进行添加,更新和删除操作直接影响所引用表中的数据
  • 当视图数据来自多个表时,不允许添加和删除数据

使用视图修改会有许多限制,一般在实际开发中视图仅用作查询

什么时索引

索引是一种有效组合数据的方式,为快速找到指定记录

作用:

大大提高数据库的检索速度

改善数据库性能

mysql 索引按存类型分类

b-树索引:innoDB 、MyISAM均支持

哈希索引

常用的所有类型
普通索引
  • 基本索引类型
  • 允许在定义索引的列中插入重复值和空值
唯一索引
  • 索引列数据不重复
  • 允许有空值
主键索引

主键列中的每个值是非空,唯一的

一个主键将自动创建主键索引

复合索引
  • 将多个列组合作为索引
全文索引
  • 支持值的全文查找
  • 允许重复值和空值
空间索引
  • 对空间数据类型的列建立的索引

如何创建/删除索引2-1

创建索引

create [unique|fulltext|spatial] index index_name

on table_name (column_name[length].....);

删除索引

drop index index_name on table_name;

删除表时,该表的所有索引引同时会被删除

创建索引的指导原则
按照下列标准选择建立索引的列
  • 频繁搜索的列
  • 经常用作查询选择的列
  • 经常排序、分组的列
  • 经常用作连接的列(主键/外键)
清风不要使用下面的列创建索引
  • 仅包含几个不同值得列
  • 表中仅包含几行
使用索引时注意事项
  • 查询时减少使用*返回全部列,不要返回不需要得列
  • 索引应该尽量小,在字节数小得列上建立索引
  • where子句中有多个条件表达式时,包含索引列得表达式应置于其他条件表达式之前
  • 避免在order by 子句中使用表达式
查看索引

show index from 表名

使用mysqldump命令备份数据库4-1

mysqldump命令 - mysql 一个常用得备份工具

将create和insert into 语句保存到文本文件

属于DOS命令

mysqldump [options] -u username -h host -p password

dbname [tbname1[,tbname2].....] >filename.sql

六、JDBC

为什么需要JDBC

JDBC是java数据库链接技术的简称,提供连接各种常用数据库的能力

JDBC API
  • JDBC API 主要功能:与数据库建立连接,执行sql语句,处理结果
  • DriverManager : 依据数据库的不同,管理jdbc驱动
  • Connection:负责连接数据库并担任传送数据的任务
  • Statement: 由Connection 产生,负责执行sql语句
  • Resultset: 负责保存staement 执行后产生的查询结果

jdbc访问数据库的步骤

  1. 加载jdbc驱动

Class.forName("JDBC驱动类的名称");

  1. 与数据库建立连接

Connection conn = DriverManger.getConnection(数据库连接字符串,数据库用户名,密码);

  1. 发送SQL语句,并得到返回的结果

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(sql 语句);

Class.forName(JDBC驱动类);

  1. 加载JDBC驱动
  2. 与数据库建立连接
  3. 发送SQL语句,并得到返回结果
  4. 处理返回结果
  5. 释放资源
JDBC驱动5-4
  • 使用纯java方式连接数据库
  • 由JDBC驱动直接访问数据库
  • 优点: 完全java代码,快速,跨平台
  • 缺点:访问不同的数据库需要下载专用的JDBC驱动
Statement常用方法
方法名说明
ResultSet executeQuery(String sql)执行SQL查询并获取到ResultSet对象
int executeUpdate(String sql)可以执行插入,删除,更新等操作,返回值是执行该操作所影响的行数
ResultSet常用方法
方法名说明
boolean next()将游标从当前位置向下移动一行
void close()关闭ResultSet对象

Dao模式

什么是DAO

非常流行的数据访问模式-DAO模式

Data Access Object(数据存取对象)

位于业务逻辑和持久化数据之间

实现对持久化数据的访问

DAO起着转换器的作用,把实体类转换为数据库中的记录

DAO模式的组成

DAO模式的组成部分

DAO接口

DAO实现类

实体类

数据库连接和关闭工具类

优势

隔离了数据访问代码和业务逻辑代码

隔离了不同数据库实现

properties配置文件

java中的配置文件常为properties文件

后缀为.properties

格式是“键 = 值” 格式

使用 “#” 来注释

读取配置文件

java中提供了Properties类来读取配置文件

方法名说明
String getProperty(String key )用指定的键在此属性列表中搜索属性,通过参数key得到其所对于的值
void load(InputStream inStream)从输入流中读取属性列表(键和元素对)通过对指定文件进行装载获取该文件中所有键值对

使用实体类传递数据、

实体类特征

属性一般使用private修饰

提供public修饰的getter/setter方法

实体类提供无参构造方法,根据业务提供有参构造

实现java.Serializable接口,支持序列化机制

0

评论 (0)

取消