SQL 数据库
基础加强
Junit单元测试
- 测试分类:黑盒(关注结果),白盒(关注过程)。
- Junit使用:白盒测试
- 使用建议
- 建议测试类名:被测试的类名Test
- 方法名:test测试的方法名
- 返回值:void
- 参数列表:空参
- 给方法加@Test
- 补充:
- @Before: 测试前执行
- @After: 测试后执行
反射:框架设计灵魂
1. 反射: 将类中的各个组成部分封装为其他对象。(将已经加载进内存里运行的类获取出来,使其透明化)
2. 优点:
1. 可以在程序运行过程中,操作这些对象。
2. 可以解耦,提高程序的可扩展性。
3. 获取class对象的方式:
1. Class.forName(全类名):多用于配置文件。此时该类还是源文件状态,并没有字节码文件。
2. 类名.class:多用于参数传递。该类处于字节码阶段,相当于获取自己。
3. 对象.getClass():多用于对象的获取字节码方式。该类处于创建对象阶段。
4. 特例: 利用反射,在泛型为int的arryaList集合中存放一个String类型的对象。
实现原理:泛型只在编译期有效,到了运行期,泛型将会失效。
`
List<Integer> list = new ArrayList<
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(3);
// list.add("aaaa"); // 在编译期报错
Class aClass = list.getClass();
try {
Method add = aClass.getMethod("add", Object.class);
add.invoke(list,"aaaa");
System.out.println(list);
} catch (Exception e) {
e.printStackTrace();
}
`
数据库
SQL
概念: 使用统一的方式操作数据库。
SQL分类
DDL:数据库定义语言
1. 操作数据库:CRUD
2. 操作表:
1. 创建表:
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
....
列名n 数据类型n
);
2. 复制表:
create table 表名 like 被复制的表名;
DML:数据库操作语言
1. 添加数据: insert into 表名() values()
2. 删除数据: delete from 表名 where 条件
- 如果要清空数据建议用: TRUNCATE TABLE 表名 提高效率
3. 修改数据: update 表名 set 列名=值 where 条件
DQL: 数据库查询语言####
1. 语法
select
字段列表 // 想要查询的内容
from
表名列表
where // 数据来源
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
2. 去重:distinct
3. 运算去null: ifnull(需要除null的列 , 替代值)
4. 条件查询(运算符):
- 、< 、<= 、>= 、= 、<> ,!=
- BETWEEN...AND
- IN( 集合)
- LIKE:模糊查询
- 占位符:
- _:单个任意字符
- %:多个任意字符
- IS NULL
- and 或 &&
- or 或 ||
- not 或 !
查询语句:
1. 排序查询:order by + 条件 + 方式(ASC升/DESC降)
2. 聚合函数:
1. count:计算个数
1. 一般选择非空的列:主键
2. count(*)
2. max:计算最大值
3. min:计算最小值
4. sum:计算和
5. avg:计算平均值
3. 分组查询:
1. where 和 having 的区别
1. where在分组前进行限定,having在分组后进行限定。
2. where 后不跟聚合函数,having可以进行聚合函数的判断。
约束
1. 主键约束:primary key
2. 非空约束:not null
3. 唯一约束:unique
4. 外键约束:foreign key
数据库设计
分类:
1. 一对一
2. 一对多(多对一)
3. 多对多
多表查询
- 多表查询分类
1. 内连接查询
1. 隐式内连接:使用where条件消除无用数据
- 语法: select 字段列表 from 表名1 ,表名2 where 条件
2. 显式内连接:
- 语法: select 字段列表 from 表名1 [inner] join 表名2 on 条件
2. 外链接查询:
1. 左外连接:
- 语法:select 字段列表 from 表1 left [outer] join 表2 on 条件;
- 查询的是左表所有数据以及其交集部分。
2. 右外连接:
- 语法:select 字段列表 from 表1 right [outer] join 表2 on 条件;
- 查询的是右表所有数据以及其交集部分。
3. 子查询:
- 概念:查询中嵌套查询,称嵌套查询为子查询。
- 子查询不同情况
- 子查询的结果是单行单列的:作为数值条件
- 子查询的结果是多行单列的:作为数组条件
- 子查询的结果是多行多列的:作为新表
事务
1. 概念: 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
2. 操作:
1. 开启事务: start transaction;
2. 回滚:rollback;
3. 提交:commit;
3. 特性:原子性、持久性、隔离性、一致性。
JDBC
1. 概念: Java语言操作数据库
2. 步骤:
1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
1. 复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
2. 右键-->Add As Library
2. 注册驱动
3. 获取数据库连接对象 Connection
4. 定义sql
5. 获取执行sql语句的对象 Statement
6. 执行sql,接受返回结果
7. 处理结果
8. 释放资源
3. 代码实现
//1. 导入驱动jar包
//2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3.获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");
//4.定义sql语句
String sql = "update account set balance = 500 where id = 1";
//5.获取执行sql的对象 Statement
Statement stmt = conn.createStatement();
//6.执行sql
int count = stmt.executeUpdate(sql);
//7.处理结果
System.out.println(count);
//8.释放资源
stmt.close();
conn.close();
JDBC工具类:JDBCUtils
使用:
1.获取连接对象: JDBCUtils.getConnection();
|
|