当前位置: 首页 > news >正文

java web2(黑马)

数据库设计

简介

1.软件的研发步骤

2.数据库设计概念

>  数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优

的数据存储模型

>  建立数据库中的表结构以及表与表之间的关联关系的过程,

简单来说就是有哪些表?表里有哪些字段?表和表之间有什么关系?

3.数据库设计的步骤

① 需求分析   (数据是什么?数据具有哪些属性? 数据与属性的特点是什么)

② 逻辑分析  (通过ER图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统)

③ 物理设计  (根据数据库自身的特点把逻辑设计转换为物理设计)

④ 维护设计  (1.对新的需求进行建表; 2.表优化)

表关系

>  一对一
 如:  用户和用户详情
( 一对一关系多用于表拆分,将一个实体中经常使用的字段放张表,不经常使用的字段放另一张

表,用于提升查询性能)

实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一。

>  一对多(多对一)

 如:  部门和员工
    (一个部门对应多个员工,一个员工对应一个部门)

实现方式:在多的一方建立外键,指向一的一方的主键。

>  多对多

 如:商品 和 订单

(一个商品对应多个订单,一个订单包含多个商品)

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

多表查询

概念

>  笛卡尔积:取 A,B集合所有组合情况

多表查询:从多张表查询数据。

   1.连接查询:
          > 内连接:相当于查询A 、B交集数据
          > 外连接:

              左外连接:相当于查询A表所有数据和交集部分数据

              右外连接:相当于查询B表所有数据和交集部分数据
   2.子查询

内连接

1.内连接查询语法

        >   隐式内连接

         SELECT 字段列表 FROM 表1,表2..WHERE 条件;

        >   显示内连接

         SELECT 字段列 表 FROM 表1 [INNER] JOIN 表2 ON 条件;

注:INNER可以省略不写

外连接

1.外连接查询语法

              >  左外连接

    SELECT 字段列表 FROM 表1 LEFT [OUTER] J0IN 表2 ON 条件;

              >  右外连接

    SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;

注:OUTER可以省略不写

子查询

1.概念:查询中嵌套查询,称嵌套查询为子查询

2.子查询根据查询结果不同,作用不同:

     >  单行单列:作为条件值,使用= != > <等进行条件判断

  SELECT 字段列表 FROM 表 WHERE 字段名 = (子查询);

     >  多行单列:作为条件值,使用in 等关键字进行条件判断

  SELECT 字段列表 FROM 表 WHERE 字段名 in (子查询);

     >  多行多列:作为虚拟表

  SELECT 字段列表 FROM (子查询) WHERE 条件;

事务

简介

>  数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令

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

时成功,要么同时失败

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

> 语法:

          -- 开启事务

START TRANSACTION;    或者    BEGIN;

          -- 提交事务

COMMIT;

          -- 回滚事务

ROLLBACK;

特征

事务四大特征

原子性: 事务是不可分割的最小操作单位,要么同时成功,要么同时失败

一致性: 事务完成时,必须使所有的数据都保持一致状态

隔离性: 多个事务之间,操作的可见性

持久性: 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

JDBC

简介

1.JDBC就是使用Java语言操作关系型数据库的一套API

2.全称(Java DataBase Connectivity)   Java 数据库连接。

3.本质:

      >  官方(sun公司)定义的一套操作所有关型数据库的规则,即接口

      >  各个数据库厂商去实现这套接口,提供数据库驱动jar包

      >  我门可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类

快速入门

JDBC API详解

DriverManager

DriverManager(驱动管理类)作用:   1. 注册驱动    2. 获取数据库连接

1.注册驱动

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


提示:
MySQL5之后的驱动包,可以省略注册驱动的步骤

自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类

2.获取连接
      static Connection         getconnection(strimg url,string uer, string password)
     > 参数
  1.url: 连接路径
              语法:jdbc:mysql:/ip地址(域名):端口号/数报库名称?参数健值对1&参数健值对2...
              示例:jdbc:mysq!://127.0.0.1:3306/db1
              细节:
                 >如果连接的是本机mysql服务器,并且mysql服务默认口是3306,则url可以简写                                    为:jdbc:mysql:///数据库名称?参数键值对

                >配置 useSSL=false 参数,禁用安全连接方式,解决警告提示
2.user:用户名
3.password:密码

Connection

Connection(数据库连接对象)作用:1. 获取执行 SQL 的对象   2.管理事务

1. 获取执行 SQL 的对象

         >  普通执行SQL对象

  Statement createStatement()

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

  PreparedStatement prepareStatement (sql)

         >  执行存储过程的对象

  CallableStatement prepareCall (sql)

2. 事务管理

>  MySQL 事务管理

              开启事务:BEGIN; / STARTTRANSACTION:

              提交事务:COMMIT;

              回滚事务:ROLLBACK;

   注:MySQL默认自动提交事务

>  JDBC 事务管理: Connection接口中定义了3个对应的方法

              开启事务:setAutoCommit(boolean autoCommit):  true为自动提交事务;false为手动提交事

务,即为开启事务

              提交事务:commit()

              回滚事务:rollback()

Statement

Statement作用:  1. 执行SQL语句

1. 执行SQL语句

       int executeUpdate(sql): 执行DML、DDL语句

     返回值:(1)DML语句影响的行数

                 (2)DDL添句执行后,执行成功也可能返回0

       ResultSet executeQuery(sql): 执行DQL语句

     返回值: ResultSet结果集对象

ResultSet

>ResultSet(结果集对象)作用:

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

ResultSet stmt.executeQuery(sql): 执行DQL语句,返回 ResultSet 对象

>获取查询结果
       boolean next():(1)将光标从当前位置向前移动一行

                               (2)判断当前行是否为有效行
       返回值:  true:有效行,当前行有数据
                       false:无效行,当前行没有数据

       xxx   getXxx(参数): 获取数据
              >  xxx:数 据类型; 如:int getnt(参数); Sting getSting(参数)
              > 参数:  Int: 列的编号,从1开始
                           Sting: 列的名称

>使用步聚:

         1.游标向下移动一行,并判断该行否有数据:next0)

         2.获取数据:getXxx(参数)

//循环判断游标是否是最后一行末尾
       whlle(rs.next(){
    //获取数据
       rs.getXxx(参数);

}

PreparedStatement

PreparedStatement作用:  1.预编译SQL语句并执行: 预防SQL注入问题

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

的方法

1.预编译SQL并执行SQL语句

获取 PreparedStatement 对象

        //SQL语句中的参数值,使用?占位符替代

String sql = "select * from user where usemame = ? and password = ?";

       //通过Connection对象获取,并传入对应的sql语句

PreparedSlatement pstmt = conn.prepareSlatement(sql);

设置参数值

PreparedStatement对象:setXxx(参数1,参数2):给?赋
   > Xxx:数据类型;  如 setlnt(参数1,参数2)
   参数:
              参数1: ? 的位置编号,从1开始
              参数2: ? 的值

执行SQL

executeUpdate():/ executeQuery(); : 不需要再传递sql

2.PreparedStatement 原理

在获取PreparedStatement对像时,将sgl语句发送给mysql服务器,进行检查,编译(这些步票很耗时)

执行时就不用再进行这些步票了,速度更快

如果sgl模板一样,则只需要进行一次检查、编译

http://www.lqws.cn/news/600517.html

相关文章:

  • 7.1_JAVA_其他
  • Excel
  • 【前端】vue工程环境配置
  • 洛谷P1379 八数码难题【A-star】
  • LangChain4j在Java企业应用中的实战指南-3
  • uniapp 中使用路由导航守卫,进行登录鉴权
  • css函数写个loading动画 | css预编译scss使用
  • MAC环境搭建SVN,并将TOMCAT集成到IDEA
  • 地震灾害的模拟
  • Springboot整合高德地图
  • filebeat收集日志到es
  • 大模型MCP技术之一句话安装Hadoop
  • 图神经网络(篇二)-基础知识
  • 安全左移(Shift Left Security):软件安全的演进之路
  • Badoo×亚矩云手机:社交约会革命的“云端心跳加速剂“
  • 计网学习笔记第1章 计算机网络体系结构(灰灰题库)
  • 微信小程序实现table表格
  • vue+three.js 加载模型,并让模型随航线飞行
  • 服务器种类与超融合
  • CSS 安装使用教程
  • mysql的自增id用完怎么办?
  • 【MobaXterm、Vim】使用合集1
  • 多容器应用与编排——AI教你学Docker
  • 单端输入转差分输出
  • ELK日志分析系统(filebeat+logstash+elasticsearch+kibana)
  • 学习字符串
  • AKAZE(Accelerated-KAZE)图像特征点检测算法详解和C++代码实现示例
  • 初识QT-对象树
  • Adobe AI高效设计秘籍与创新思维进阶
  • STM32