本帖最后由 htb52110 于 2017-11-27 18:09 编辑
MySql
1.1 [MySql的概述]
1.1.1、什么是数据库
就是一个文件系统,这个文件必须通过标准的sql语句访问
1.1.2、关系型数据库
关系型的数据库存放的都是实体之间的关系:
1.1.3、常见的关系型数据库
1.1.4、数据库的存储结构
1.2、SQL的概述
1.2.1、什么是SQL:
结构化的查询语言
1.2.2、SQL分类:
1.2.3、SQL的特点:
非过程性语言:一条语句就会有一个运行结果。
1.2.4、使用SQL
1.2.4.1、使用SQL操作数据库(对数据库的CRUD的操作)
【创建数据库】
【查看数据库】
【删除数据库】
【修改数据库】
【切换数据库】
1.2.4.2、使用SQL操作数据库中的表(对数据库的表的CRUD的操作)
【创建表】
注意:给类型长度的时候尽量给8的整数倍!!!!
【约束】
【查看表】
【删除表】
drop table 表名;
【修改表】
1.2.4.3、使用SQL操作数据库中的表的记录(对表的记录的CRUD的操作)
【插入记录】
注意:在使用dos命令操作数据库,插入中文时会出现编码错误的问题,解决该问题的方法是:
方法一(一次性使用):使用-----show variables like ‘%character%%’;---命令可以临时解决该错误!
方法二(永久改变):找到MySQL的安装路径 /my.ini 文件:修改client的字符集为gbk;改完之后,需要重新加载mysql的配置文件:1、services.msc 2、停止mysql的服务,重新启动mysql服务3、 执行之前的SQL语句.
【修改记录】
语法:* update 表 set 列名=值,列名=值 [where 条件];(不添加Where条件会修改全部的记录)
注意事项:
列名和值的类型要一致
值不能超过列的最大长度
值是字符串或日期格式的情况,需使用单引号引起来。
【删除记录】
语法:
* delete from 表 [where 条件];
注意事项:
* 删除表中的一行记录,不能删除某列值
* 如果没有条件删除表中的所有列.
提示:删除表中的所有记录 truncate table 表名 和 delete from 表 的区别?
truncate table 删除表的记录:将整个表删除,重新创建一个新表。有自动编号的列会重新归零,属于DDL,删除后数据不可以找回
delete table 删除表的记录:一条一条的进行删除,有自动增加的字段不会归零,属于DML。(事物管理,只能作用在DML语句上,如果再一个事务中使用delete删除所有记录,可以找回)
【查询记录】
查询语句:
select [distinct] *|列名 from 表 [where 条件];(distinct是去重的操作【查出来的内容完全重复才会去重】,不加where条件会查到所有信息)
条件查询:
where:=,> ,< ,>=,<=,<> , like 中可以使用占位符:_和%(下划线匹配一个字符,%可以匹配任意多个字符);in后跟着一组值:in (1, 2 ,3)[包含1 2 3中的一个];
排序查询:
order by 对数据进行排序,默认升序, desc为降序;
聚合函数:
sum() :求和(注意:计算的是列的值的总和当有数据为null时,不会计算在列)
count() :总数
max() :最大
min() :最小
avg() :平均
分组 :
group by
【SQL的查询语句的总结】
书写顺序: select --- from----- where----- group by---- having---- order by
注意:having是对分组之后的数据进行筛选
where是对分组之前的数据进行筛选
1.3、数据库的多表设计
1.3.1、【多表设计】
数据库都是关系型的数据库,存的是实体之间的关系:
实体关系总结起来就有三种关系:
一对多:
举例:客户和订单 一个客户可以产生多个订单,一个订单只能属于某一个客户
多对多:
举例:学生和课程 一个学生可以选择多门课程,一门课程可以被多个学生选择
一对一:
举例:公司和地址 一个公司只能有一个注册地址,一个地址只能被一个公司注册
1.3.2、【多表的设计】
一对多的关系的建表原则:
在多的一方创建一个字段,这个字段作为外键执向一的一方的主键.
多对多的关系的建表原则:
创建一个第三种表,中间表中至少需要两个字段分别作为外键执向多对多双方的各自的主键.
一对一的关系的建表原则:
唯一外键对应:假设一对一的双方是一对多的关系.在多的一方创建外键执向一的一方的主键.需要在外键上添加一个unique约束.
主键对应:将一对一的双方的主键建立映射.
1.3.2、【使用SQL创建一对多的关系】
举例:创建客户表:
create table customer(
cid int primary key auto_increment,
cname varchar(20)
);
创建订单表
create table orders(
oid int primary key auto_increment,
addr varchar(50),
cid int
);
注意:约束是用老保证数据的完整性。
多表约束:外键约束!!!(foreign key)
语法:alter table A add foreign key(BID) references B(BID)
1.4、【数据库的多表查询】
1.4.1、多表查询的SQL:
多表的查询方式:
交叉连接 :
语法 :select * from A,B -----获得的是两个表的笛卡尔积
内连接 :inner join ----inner 可以省略
显示内连接:select * from A inner join B on 条件
隐式内连接:select * from A ,B where 条件
外连接 :outer join ----outer 可以省略
左外连接:left out join 语法: select * from A left outer join B on 条件
右外连接:right out join 语法:select * from B right outer join B on 条件
理解:内连接查询出来的是两个表的交集,左外连接查询出来的是左边表的全部和两个表的交集,右外连接查询出来的是右边标的全部和两个表的交集!!!
优先使用 left join
1.4.2、多表查询的子查询
一个SQL语句查询过程中需要依赖另一个查询语句
举例:
SELECT * FROM customer c,orders o WHERE c.cid = o.cid AND c.cid IN (SELECT cid FROM orders WHERE addr LIKE '海淀%');
JDBC
1.1、【JDBC的概述】
1.1.1、JDBC:Java DataBase Connectivity Java数据库的连接
是SUN公司统一提供的一套接口规范
1.1.2、驱动:两个硬件设备之间通信的桥梁
1.2、【JDBC的开发步骤】
注册驱动
获取链接
获得执行SQl的对象
1.3、【JUnit的使用】
可以使用JUnit Test进行方法的测试
注意:类名不能为Test,@Test为修饰测试方法的注解
注意导包
方法参数必须是无参的
不能用static修饰
只能用void修饰,没有返回值
1.4、【批处理】
1.5、【常见的开源的数据库连接池】
DBCP:
DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。
C3P0:
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
Tomcat内置连接池:
【C3P0连接池的使用】
第一步:引入c3p0的jar包
第二步:ComboPooledDataSource dataSource=new ComboPooledDataSource()获 取连接
元数据
1.1、JDBC的元数据MataData
1.1.1、DatabaseMetaData:获得数据库连接的信息,获得数据库的表信息。
获得数据库元数据:Connection中的getMetaData();
1.1.2、ParameterMetaData:获得SQL中的参数的个数及类型
获得参数元数据:PreparedStatement中getParmeterMetaData();
1.1.3、ResultSetMetaData:获得结果集中的列名及列的类型
获得结果集元数据:ResultSet中getMetaData(); |
|