A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 金城武 初级黑马   /  2018-5-1 23:49  /  1137 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

数据库概述
         什么是数据库
                   是一个文件系统,方便用户对数据的操作,通过标准的sql语句进行访问
         什么是关系型数据库
                   里面存的是实体与实体之间的关系
mysql数据库的存储方式(以表为单位进行存储,给他一个javabean对象就可以存起来)
         ------
         属性----表中的字段
         对象----记录
使用sql
         sql对数据库进行crud的操作
                   :createdatabase 数据库名称
                   :dropdatabase 数据库名称
                   :alterdatabase 数据库名称 character set 字符集 collate 校对规则;
         sql对数据库中的表进行crud的操作
                   :createtable 表名称 (字段名称字段类型(长度) 约束,...)
                   :drop table 表名称;
                   :alter table表名称 add 列名类型(长度) 约束;
         sql对数据库中的表的记录进行crud的操作
                   :insert into表名 values (1,2,3,...)
                   :delete from表名 where  id = 2;
                   :update userset password = "aaa" where username = "zhangsan"
                   :
                            基本查询
                                     select* from user;
                            条件查询
                                     select* from user where username = "张三"
                            排序查询
                                     使用 orderby  asc / desc
                            聚合函数
                                     sumcount(*) max min avg limit
                            分组查询
                                     groupby
                            总结
                                     书写顺序select--from---where--group by--having--order by
                                     执行顺序from--where--group by--having--select--order by
                           
         常见错误
                   语法错误(syntax错误)
                   没有注意约束
                   聚合函数写在where后面(如果筛选条件里面没有聚合函数,就可以写在where后面,如果有必须写在having)
         
         数据库的远程访问
                   1,打开系统的mysql数据库下面的user,修改里面的Host字段的值为%(%表示允许任何ip地址)并保存
                   2,重启mysql服务
单表:
IS NULL 表示是否为空
DISTINCT distinct 去重
排序查询使用order by 字段名称 asc/desc
聚合函数 sum count max min avg 不能在where后面使用
分组查询使用group by 字段名称;
一般顺序: S(select) F(from)W(where)G(group by)H(having)O(order by);
多表:
交叉连接:
select* from classes ,student
内连接:
select*from classes c inter join student son c.cid = s.cno
外连接
左外连接select*from classes c left outer join student s on c.cid = s.cno
右外连接select*from classes c right outer join student s on c.cid = s.cno
多表查询之子查询: in exists all any
子查询使用场景: 后面条件进行查询的时候需要依赖前面的查询结果
思路:
                            1,先写要查询的东西(学生姓名,选课总数)
                            2,再写要从哪些表中查
                            3,再写上关联的条件
                            4,然后将结果分组
                            5,最后再用having显示聚合函数
select后面有表本身的字段,和聚合函数(sum)的字段,就要用group by.
jdbc
         是什么
                   API接口
                   面向接口编程:通过jdbc里面的接口,从驱动中取出实现类,调用实现类的重写方法,来操作数据库
         步骤:
                   1,加载驱动
                   2,获得连接
                   3,执行sql
                            获得执行sql语句的对象
                            Statementstmt = conn.createStatement();
                            编写sql语句
                            Stringsql = "delete from user where id = 4"
                            执行sql,需要传入sql语句
                            intnum = stmt.executeUpdate(sql);
                            遍历结果集
                   4,释放资源
         接口:
                   DriverManager
                            1,注册驱动
                            2,获取连接
                   Connection
                            1,创建执行sql语句的对象
                            2,管理实务
                   Statement
                            1,执行sql
                            2,执行批处理
                   ResultSet
                            结果集的遍历
                            结果集的获取
         jdbcCRUD的操作
         jdbc的抽取
                   工具类的抽取
                   配置信息提取到配置文件key=value
         SQL注入漏掉
                   登录的案例
                   注入漏掉的分析解决(sql and 优先级大于 or)
         prepareStatement进行改写
                   执行sql语句有所不同
                            1,sql语句,参数用?占位
                            Stringsql = "delete from user where id = ?";
                            2,预编译sql,需要传入写好sql语句
                             POPUPrepareStatement pstmt =conn.prepareStatement(sql);
                            3,设置参数,同时设置了参数的格式
                            pstmt.setInt(1,4);
                            4,执行sql,不需要传入sql语句
                             int num = pstmt.executeUpdate();
         jdbc批处理
                   创建批处理的对象
                            statement实现
                                     Statementstmt = conn.createStatement();
                            prepareStatement实现
                                     PrepareStatementpstmt = conn.prepareStatement(sql);
//他的语句格式是一样的,参数不同
//用在批量的插入和删除
             添加批处理
                            addBatch()
                   执行批处理
                            executeBatch()
                   请空批处理
                            clearBatch()
jdbc的事务管理
         事务的概念
                   逻辑上的一组操作,组成这个操作的各个逻辑单元,要么全部成功,要么全部失败.
         开启事务
                   conn.setAutoCommit(false)
         提交事务
                   conn.commit();
         回滚事务
                   conn.rollback();
连接池
         就是一个池子,初始化的时候会放一些连接进去,用的时候从中间去拿,不用的时候归还过去
         Druid连接池
         C3p0连接池
                   区别:单纯使用连接池的话,c3p0更快捷,但是Druid功能更多一些,能监控sql语句的执行状态,并且起到拦截作用.
                  
改写工具类
         因为连接池的创建和销毁是很耗资源,只需要创建一次就可以
    步骤:
                   1,创建连接池,用静态进行修饰
                   2,重写获得连接的方法
                   3,提供一个获得连接池的方法
DBUtils:提供了封装数据库的一些操作
         QueryRunner核心运行类:提供了对sql语句操作的方法
                   没有事务处理
                            构造
                                     QueryRunner(连接池)
                            普通方法
                                     qr.update(sql语句,参数)
                                     qr.query(sql语句,结果集,参数)
                                    
                   有事务处理
                            构造
                                     QueryRunner()
                            普通方法
                                     qr.update(连接,sql语句,参数)
                                     qr.query(连接,sql语句,结果集,参数)//保证多个操作来自同一个连接
                  
         ResultSetHandler接口:用于定义进行查询操作之后,怎样封装结果集
                   实现类
                            ArrayHandlerArrayListHandler
                            BeanHandlerBeanListHandler
                            MapHandlerMapListHandler
                            ColumnListHandler//将一列值封装      
                            ScalarHandler// 将单个值封装
                            KeyedHandler//将一条记录封装到map集合中,将多条记录封装到map集合中的map集合,而且外面的key的值是可以指定的
         DBUtils:定义了关闭资源和事务处理的方法
                   DBUtils.commitAndCloseQuietly(conn);提交并且安静的释放资源
                   DBUtils.rollbackAndCloseQuietly(conn);回滚并且安静的释放资源

1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马