一、JDBC应用的分层(DAO)
分层就是对功能的隔离,降低层与层之间的耦合性。
软件的分层初步:
JSP Struts
View(界面) --> Controlle --> Atio ---> Service/Biz --> DAO ----> DB
重新封装 可复用 封装信息 懂业务逻辑 数据访问层 数据层
调业务 无技术难度 与业务无关
谁依赖谁就看谁调用谁。
软件的分层设计,便于任务的划分、降低层间的耦合。
结合PMS的设计方法,思考这样分层的好处。
并且,使代码尽量减少重复,可复用性好,扩展余地加大,而且尽量减少硬编码。
需求:实现对Person类的数据库持久化基本操作(CRUD)。
BS架构和CS架构:
C-S架构:两层体系结构,主要应用于局域网中。
B-S架构:三层体系结构,表现层+业务逻辑层+数据存储层
注:层面越多,软件越复杂,但更灵活。分层是必须的但是要有个度。
层次一但确定,数据必须按层访问,不能跨层访问。
层与层之间最好时单向依赖(单向调用)。
纵向划分:按功能划分。分成三层体系结构(也有两层的)。
横向划分:按抽象划分。分成抽象部分和实现部分。
二、JDBC异常处理:
JDBC中,和异常相关的两个类是SQLException和SQLWarning。
1.SQLException类:用来处理较为严重的异常情况。
比如:① 传输的SQL语句语法的错误;
② JDBC程序连接断开;
③ SQL语句中使用了错误的函数。
SQLException提供以下方法:
getNextException() —— 用来返回异常栈中的下一个相关异常;
getErrorCode() —— 用来返回代表异常的整数代码 (error code);
getMessage() —— 用来返回异常的描述信息 (error message)。
2.SQLWarning类:用来处理不太严重的异常情况,也就是一些警告性的异常。
其提供的方法和使用与SQLException基本相似。
结合异常的两种处理方式,明确何时采用哪种。
A. throws 处理不了,或者要让调用者知道;
三、JavaBean的定义:
1、是一个普通的Java类
2、在结构上没有预先的规定,不需要容器,不需要继承类或实现接口
3、要求必须放在包中,要求实现Serializable接口
4、要求有一个无参的构造方法.
5、属性的类型必须保持唯一,get方法返回值必须和set方法参数类型一致
6、对每个属性要有对应的get和set方法。注:隐藏属性可以没有
7、可以有外观作为显示控制,事件机制。
四、SQL数据类型及其相应的Java数据类型
SQL数据类型 ? ? ? ? ? ? Java数据类型 ? ? ? ? ? ? ?说明
??---------------------------------------------------------------------------------------
? ?INTEGER或者INT ? ? ? ? ? int ? ? ? ? ? ? ? 通常是个32位整数
? ?SMALLINT ? ? ? ? ? ? ? short ? ? ? ? ? ? 通常是个16位整数
? ?NUMBER(m,n) ? ? ? Java.sql.Numeric ? ?合计位数是m的定点十进制数,小数后面有n位数
DECIMAL(m,n) 同上
? ?DEC(m,n) ? ? ? ? ? ? ? Java.sql.Numeric ? ?合计位数是m的定点十进制数,小数后面有n位数
? ?FLOAT(n) ? ? ? ? ? ? ? double ? ? ? ? ? 运算精度为n位二进制数的浮点数
? ?REAL ? ? ? ? ? ? ? ? ? float ? ? ? ? ? ?通常是32位浮点数
? ?DOUBLE ? ? ? ? ? ? ? ? double ? ? ? ? ? 通常是64位浮点数
? CHAR(n) ? ? ? ? ? String ? ? ? ? ? 长度为n的固定长度字符串
CHARACTER(n) 同上
? ?VARCHAR(n) ? ? ? ? ? ?String ? ? ? ? ? 最大长度为n的可变长度字符串
? ?BOOLEAN ? ? ? ? ? ? ? ?boolean ? ? ? ? ?布尔值
? ?DATE ? ? ? ? ? ? ? ? ? Java.sql.Date ? ? 根据具体设备而实现的日历日期
? ?TIME ? ? ? ? ? ? ? ? ? Java.sql.Time ? ? ? 根据具体设备而实现的时戳
? ?TIMESTAMP ? ? ? ? ? ?? Java.sql.Timestamp ?根据具体设备而实现的当日日期和时间
? ?BLOB ? ? ? ? ? ? ? ? Java.sql.Blob ? ?? 二进制大型对象
? ?CLOB ? ? ? ? ? ? ? ? ?Java.sql.Clob ? ?? 字符大型对象
? ?ARRAY ? ? ? ? ? ? ? ?? Java.sql.Array
五、 面向对象的数据库设计
类的关联,继承在数据库中的体现:
类定义―――>表定义
类属性―――>表字段
类关系―――>表关系
对 象―――>表记录
注: Oid(对象id)―――>业务无关
在数据库中每一条记录都对应一个唯一的id;
Id通常是用来表示记录的唯一性的,通常会使用业务无关的数字类型
字段的个数不会影响数据库的性能,表则越多性能越低。
(一)类继承关系对应表,
1、 为每一个类建一张表。通过父类的Oid来体现继承关系。
特点:在子类表中引用父类表的主建作为自己的外建。
优点:方便查询。属性没有冗余。支持多态。
缺点:表多,读写效率低。生成报表比较麻烦。
2、 为每一个具体实现类建一个表
特点:父类的属性被分配到每一个子类表中。
优点:报表比较容易
缺点:如果父类发生改变会引起所有子类表随之更改。并且不支持多态。数据有少量冗余。
3、 所有的类在一张表中体现,加一个类型辨别字段
特点:效率高,查询不方便,用于字段不多时。
优点:支持多态,生成报表很简单。
缺点:如果任何一个类发生变化,必须改表。字段多,难以维护。
(二)类关联关系对应表
1、 一对一关联,类关系对应成表时有两种做法:
一是引用主键,也就是一方引用另一方的主键既作为外键有作为自身的主键。
二是外键引用,一方引用另一方的主键作为自身的外键,并且自己拥有主键。
2、 一对多关联,也就是多端引用一端的主键当作外键,多端自身拥有主键。
3、 多对多关系,多对多关系是通过中间表来实现的,中间表引用两表的主键当作联合主键,就可以实现多对多关联。