Java学习笔记06——JDBC

时间:2023-02-25 17:02:37

一、关系数据库模型和范式

1.关系:二维表;元组:表中的一行;属性:表中的一列;属性域:属性的取值范围;主键:表中的一个属性或几个属性的组合,唯一标识表中的一个元组,不能取空;外键:另一个关系的主键在本关系中称为外键。
2.数据库范式:数据库设计所需满足的规范。
1NF:属性具有原子性,不能再分解;
2NF:记录具有唯一性,非主键字段依赖于主键字段;
3NF:任何字段都不能派生自其他字段,不能相互依赖。
3.常用:MySQL(支持多种操作系统/多种语言/多种连接方式/多线程,事务支持/集群支持),Oracle(支持完整的数据库管理功能/分布式处理),PostgreSQL。


二、MySQL使用

1.下载安装MySQL community版本;
2.xampp可以对MySQL的启动和关闭进行管理;
3.MySQL Workbench用来可视化MySQL数据库操作。


三、JDBC编程

1.在操作数据库前需要调用DriverManage类中的getConnection()方法获取Connection对象,通过Connection接口中提供的createStatement()方法获得Statement接口实例,其executeUpdate()和executeQuery()方法分别用于增删改和查询数据。
2.JDBC事务是并发时系统一致性的维护单位,如转账和收款,需同时处理或同时不处理。JDBC事务处理:
conn.setAutoCommit(false);//禁止实物自动提交
conn.commit();//提交事务
conn.callback();//有异常时回滚事务
3.JDBC编程优化:
(a)将数据库的配置信息提取到属性文件.properties中,包括driver、dburl、user、password,在Java代码中编写工厂类(单例模式)读取配置信息(将配置信息都入到输入流中,再用Properties类的load方法读入),并根据获取的配置信息创建一个获取数据库连接的方法。
*静态代码块用于初始化类的属性,在加载类的时候调用一次。
(b)编写数据表的实体类DTO(Data Transfer Object),构造方法和getter/setter方法,不包含业务逻辑。自增长的id为抽象类,供其他实体类继承。
(c)编写数据访问对象DAO(dataAccessObject)类,封装对数据库的访问,将数据库中的表转化成DTO类。创建UserDao接口,定义save/update/delet方法。实现接口的类中采用PreparedStatement类执行参数化的查询,用?作为占位符。


四、MySQL语句

1.MySQL数据类型

主要有三类,数值类型、字符类型、日期和时间类型。
数值类型:整数类型、浮点数类型,TINYINT/SMALLINT/MEDIUMINT/INT/BIGINT,FLOAT/DOUBLE/DECIMAL。
字符类型:CHAR/VARCHAR/TEXT/BLOB/TINYTEXT/LONGBLOB,ENUM/SET。
日期和时间类型:DATE/TIME/YEAR/DATETIME/TIMESTAMP.

2.使用图形化工具Workbench或者Navicat来连接管理数据库,比使用shell脚本语言方便直观。

3.比较运算符:

数据库没有布尔类型,返回0/1表示真假。
=,<>,!=,<,>,<=>(含有null的比较,尖括号表示安全比较运算符),(not) between...and...,in(取值集合,不能含有null),is null,like(与通配符组合匹配,性能较低不推荐)等等。
字符比较不区分大小写(binary类型区分大小写),字符后面有空格换行符等会被忽略,按字母表中的顺序比较。

4.逻辑运算符:NOT/!,AND/&&,OR/||,异或XOR;

位运算符:&,|,^,~,>>,<<(向左移位,位数由后面的数字决定);数字转换成二进制计算。