JavaWeb之MySql与JDBC

JDBC(JAVA DataBase connectivity)-java数据库连接

为什么会出现JDBC

  • SUN公司提供的一种数据库访问规则、规范,由于数据库种类较多,并且java语言使用比较广泛,sun公司就提供了一种规范,让其它的数据库提供商去实现底层的访问。java程序只要使用java提供的JDBC驱动就能访问数据库

    JAVA连接数据库的基本步骤(JDBC使用基本步骤)

    //1.注册驱动
    DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    //2.建立连接
    //DriverManager.getConnection("jdbc:mysql://localhost/studnet?user=monty&password=greatsqldb");
    java.sql.Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "root");
    //3.创建Statement对象,和数据库打交道需要此对象
    Statement st = connection.createStatement();
    //4.执行sql,得到结果
    String sql="select * from t_stu";
    ResultSet rs = st.executeQuery(sql);
    //5.查询到的数据库数据进行遍历输出
    while(rs.next()) {
    int id = rs.getInt("id");
    String name = rs.getString("name");
    int age = rs.getInt("age");
    System.out.println("id="+id+"name="+name+"age="+age);
    }
    //关闭数据库操作对象
    rs.close();
    st.close();
    conn.close();
    
    
    • JDBC通过配置文件连接数据库

      //属性配置文件jdbc.properties
      driverClass=com.mysql.jdbc.Driver
      url=jdbc:mysql://localhost/student
      name=root
      password=root
      //创建一个配置属性对象
      Properties properties=new Properties();
      //InputStream is=new FileInputStream("jdbc.properties");
      //使用类加载器获取src下的资源文件
      InputStream is=MainTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
      //导入输入流
      properties.load(is);
      //读取属性
      String driverClass=properties.getProperty("driverClass");
      String name=properties.getProperty("name");
      String url=properties.getProperty("url");
      String password=properties.getProperty("password");
      Class.forName(driverClass);
      java.sql.Connection connection = DriverManager.getConnection(url, name, password);
      
      
    • 预处理sql语句,propertiesStatement

MYSQL

  • MYSQL免安装版配置

    • 下载MYSQL解压

    • 在MYSQL安装目录根目录下新建my.ini文件

      [mysql]  
      # 设置mysql客户端默认字符集  
      default-character-set=utf8  
      [mysqld]  
      #设置3306端口  
      port = 3306  
      # 设置mysql的安装目录  
      basedir=E:\BriskTools\mysql-5.7.24-winx64
      # 设置mysql数据库的数据的存放目录  
      datadir=E:\BriskTools\mysql-5.7.24-winx64\data
      # 允许最大连接数  
      max_connections=200  
      # 服务端使用的字符集默认为8比特编码的latin1字符集  
      character-set-server=utf8  
      # 创建新表时将使用的默认存储引擎  
      default-storage-engine=INNODB  
      
      
    • 配置环境变量,cmd安装mysql服务,登录mysql

  • 数据库概述

    • 数据库就是一个文件系统,只不过我们需要通过命令来操作这个文件系统
    • 数据库是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库
    • 数据库是长期存储在计算机内、有组织的、可共享的数据集合.数据库中的数据指的是以一定的数据模型组织、描述和存储在一起、具有尽可能小的冗余度、较高的数据独立性和易扩展的特点并可在一定范围内位多个用户共享、
  • 数据库的作用

    • 存储数据,数据的仓库,带有访问权限限制不同人可以有不同操作
    • 应用页面操作的大多是后台数据,从数据库取到后台数据进行封装,然后交给前端去展现
  • 常见的数据库

    • 关系型数据库(主要是用来描述实体与实体之间的关系)

      • mysql:sun公司收购了mysql,sun公司被oracle收购了
      • oracle
      • db2
      • sqlServer:windpws、政府网站多用
    • NOSQL类型的非关系数据库:mongodb、redis

  • E-R图实体-联系图

    • 定义:是指提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。E-R方法:是“实体-联系方法”(Entity-Relationship Approach)的简称。它是描述现实世界概念结构模型的有效方法。

    • 基本要素

      • 实体型:方框
      • 属性:椭圆
      • 联系:菱形
  • MYSQL数据库服务器

    • MYSQL数据库:数据库管理软件
    • 服务器:就是一台电脑,这台电脑安装相关的服务器软件,这些软件会监听不同的端口号,根据用户访问的端口号,提供不同服务
  • MYSQL的安装和卸载

    • 卸载

      1. 控制面板卸载mysql
      2. 删除mysql安装目录的所有文件
      3. 删除mysql数据存放文件:c:\ProgramData\MySql
    • 安装

      • 免安装版
      • 安装版
  • MYSQL的SQL语句

    • SQL:结构化查询语言(Structured Query Language)
    • DDL:数据定义语言,定义数据库、数据表的结构:create、drop(删除)、alter(修改)
    • DML:数据库操纵语言,主要用来操作数据:insert()、update、delete
    • DCL:数据库控制语言,定义访问权限,取消访问权限,安全设置:grant
    • DQL:数据库查询语言:select、from、where
  • 数据库的CRUD的操作

    • 数据库登录:mysql -u root -p

    • 创建数据库:create database day06 | create database day06_1 character set utf8;

    • 表操作

      • 查看表的定义:show create table student.
      • 查看表结构:desc student.
      • 添加列:alter table student add 列名 列的类型 列的约束(alter table student add chengji int not null)
      • 修改列:alter table student modify sex varchar(2);
      • 修改列名:alter table student change sex gender varchar(2);
      • 删除列:ater table student drop chengji;
      • 修改表名:rename table student to xuesheng;
      • 修改表字符集:alter table student character set gbk;
      • 删除表:drop table student;
      • 数据库约束:primary key(主键)、unique(唯一)、not null
    • 表中数据操作

      • 插入数据:insert into student (id,name,sex) values(1,'zhangsan','男');

      • 批量插入:insert into student (1,'lisi','男'),(2,'zhaoliu','男')

      • 查看数据:select * from student;

      • 删除数据:delete from student where id=2;

      • 更新表:update student set name='李四' where id=8;

      • 查询表:select distinct price from product; (distinct 去重)

        • select ,price1.5 from product;(运算查询)
        • elect ,price1.5 as 折后价 from product;
        • 查询可以使用where大于和小于:select * from product where price >10 and price <100;
        • 查询还可以使用between关键字:select * from product where price between 100 and 10;
        • 查询逻辑运算符的应用:and ,or, not
        • select * from product where pname like '%饼%'
        • select * from product where pname like '_熊%';
        • select * from product where cno in(1,4,5);
        • 查询所有按价格排序:select * from product order by price;
        • select * from product order by price desc; (asc-升序,desc-降序)
        • sum():求和--select sum(price) from product;
        • avg():求平均值--select avg(price) from product;
        • count():统计数量--select count(*) from product;
        • select * from product where price >(select avg(price) from product);//条件语句后面不能跟函数所以这么写
        • 查询结果分组:select cno,count(*) from product group by cno;
        • 分组统计平均值,并且平均值大于60:select cno,avg(price) from product group by cno having avg(price) > 60;
        • sql编写顺序(S..F..W..G..H..O):select .. from .. where .. group by .. having .. order by
        • sql执行顺序:F .. W .. G .. H .. S .. O
        • max():最大值
        • min():最小值
    truncate和delete 和drop的区别(面试题)
    • delete是DML,执行时从加where会删除指定行,不加where会逐行全部删除,可以回滚需要commit

    • truncate是DDL,会隐式提交,不能回滚,没有日志,执行很快,删除表所有数据

    • drop是DDL,会隐式提交,不能回滚,会删除表结构及所有数据,并释放全部空间

    • 总结

      • 1、在速度上,一般来说,drop> truncate > delete。(数据少delete高效,数据多truncate高效)

        2、在使用drop和truncate时一定要注意,虽然可以恢复,但为了减少麻烦,还是要慎重。

        3、如果想删除部分数据用delete,注意带上where子句,回滚段要足够大;

        如果想删除表,当然用drop;

        如果想保留表而将所有数据删除,如果和事务无关,用truncate即可;

        如果和事务有关,或者想触发trigger,还是用delete;

        如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

SQL多表操作

多表之间关系如何维护

  • 外键约束:forerign key

    • alert table product add foreign key(cno) references category(cid);
  • 数据库建表建库原则

    • 通常一个项目建一个数据库

    • 建表原则

      • 一对多:在多的一方添加一个外键指向一的一方的主键

      • 多对多:多建一张中间表,将多对多的关系拆成一对多的关系,中间表至少要有两个外键,分别对应原来的表

      • 一对一(不多用,拆表操作可能用,将个人常用信息和不常有信息拆分,减少表的臃肿)

        • 将一对一情况当作是一对多,在任意一张表添加一个外键,并且这个外键要唯一,指向另一张表
        • 直接将两张表合并成一张表
        • 将两张表建立连接,让两张表主键相等
  • 主键约束:默认不能为空,必须唯一,外键都是指向另外一张表的主键,一张表只有一个主键

  • 唯一约束:必须唯一,可以为空,唯一约束不可以作为其它表的外键,一张表可以有多个唯一约束

多表查询

  • 交叉连接查询,笛卡尔积

    • select * from product ,category where cno=cid;
  • 内链接查询:查询出两张表交集数据

    • 隐式内连接(在查询出结果的基础上做where条件过滤):select * from product p,category c where p.cno=c.cid;
    • 显示内连接(带着条件去查询结果,执行效率高):select * from product p INNER JOIN category c ON p.cno=c.cid;
  • 左外连接:会将左表数据都查询出来,如果右表没有对应的用null代替

    • select * from product p left outer join category c ON p.cno=c.cid;
  • 右外连接:会将右表所有数据都查询出来,左表没有对应数据用null代替

    • select * from product p right outer join category c ON p.cno=c.cid;

分页查询

  • select * from product limit (页数-1)*每页条数 ,每页条数

子查询

  • select * from product where cno=(select cid from category where cname='手机数码');

  • select pname,(select cname from category c where p.cno=c.cid) as 商品分类名称 from product p;

  • select * from emp where sal=(select max(sal) from emp);

  • 单行子查询(> < >= <= = <>)

    • 查询出高于10号部门的平均工资的员工信息
  • 多行子查询(in not any all)

    • 查询出比10号部门任何员工薪资高的员工信息
  • 多列子查询(实际使用较少)

    • 和10号部门同名同工作信息的员工
  • select 接子查询

    • 获取员工的名字和部门的名字
  • from后面接子查询

    • 查询emp表中的经理信息
  • where接子查询

    • 薪资高于10号部门平均工资的所有员工信息
  • having后面接子查询

    • 有哪些部门的平均工资高于30号部门的平均工资
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,772评论 5 116
  • 观其大纲 page 01 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 M...
    周少言阅读 3,147评论 0 33
  • 最近打算采用关系型数据库来理一下公司的运营数据,先拿点东西练手找感觉。下面是几个关于学生课业的表,需要建立一个数据...
    九天朱雀阅读 966评论 0 3
  • 曲曲渐行离地高,浮浮白云遮身腰。娆娆青松随山去,渐渐仙境围身俏。
    桃李天下秀阅读 283评论 0 0
  • 今日读了《色眼识人》中有关黄色优势的部分,感觉与我的期盼很是吻合,希望自己也能做一个果敢有行动力的人。 附上一些文...
    刘小花Crystal阅读 286评论 0 0