[分享]Oracle&JDBC&Hibernate知识总结_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2248 | 回复: 0   主题: [分享]Oracle&JDBC&Hibernate知识总结        下一篇 
ljss
注册用户
等级:新兵
经验:56
发帖:53
精华:0
注册:2012-1-19
状态:离线
发送短消息息给ljss 加好友    发送短消息息给ljss 发消息
发表于: IP:您无权察看 2014-11-25 15:33:47 | [全部帖] [楼主帖] 楼主

DML数据操作语言:insert、update、delete(merge)

DDL数据定义语言:create、drop、alter、truncate、rename

DCL数据控制语言:grant

DQL数据查询语言:select

Transaction:commit、rollback、savepoint


1、 介绍

存储方式:文件、DB(DBMS)

SQL语句的分类

关系型数据库:二维表

SQLPLUS


2、 Select语句 选择、投影、连接

select …… from ……


distinct、算术表达式、字符串拼接||、[’字符串’、”列别名case sensitive、特殊字符如空格”]、NVL(salary,100)

[where ……]限制

可以出现列名、表达式、常量、运算符

<=、>=、!=、=、not between……and、in、like(%匹配0-n,_匹配一个,escape转义)、is (not) null、and、or、not
[group by……]


select语句只能出现group by从句中出现的字段或者组函数

mysql不做限制

[having ……]


对分组后的数据进行进一步限制

[order by ……]


默认asc、desc,select中未出现字段可做排序

标准的 SQL 的解析顺序为:

   (1).FROM 子句, 组装来自不同数据源的数据

   (2).WHERE 子句, 基于指定的条件对记录进行筛选

   (3).GROUP BY 子句, 将数据划分为多个分组

   (4).使用聚合函数进行计算

   (5).使用 HAVING 子句筛选分组

   (6).计算所有的表达式

   (7).使用 ORDER BY 对结果集进行排序

举例说明: 在学生成绩表中 (暂记为 tb_Grade), 把 "考生姓名"内容不为空的记录按照 "考生姓名" 分组, 并且筛选分组结果, 选出 "总成绩" 大于 600 分的.

   标准顺序的 SQL 语句为: 

   select 考生姓名, max(总成绩) as max总成绩

from tb_Grade


   where 考生姓名 is not null

   group by 考生姓名

having max(总成绩) > 600


   order by max总成绩

   在上面的示例中 SQL 语句的执行顺序如下:

   (1). 首先执行 FROM 子句, 从 tb_Grade 表组装数据源的数据

   (2). 执行 WHERE 子句, 筛选 tb_Grade 表中所有数据不为 NULL 的数据

   (3). 执行 GROUP BY 子句, 把 tb_Grade 表按 "学生姓名" 列进行分组

   (4). 计算 max() 聚集函数, 按 "总成绩" 求出总成绩中最大的一些数值

   (5). 执行 HAVING 子句, 筛选课程的总成绩大于 600分的.

   (7). 执行 ORDER BY 子句, 把最后的结果按"Max 成绩" 进行排序.

单行函数:数据计算、修改条目、控制输出、格式转换

操作字符串lower、nvl、to_char(number,”fmt”)、to_number(char)

多行函数(组函数):select或者having从句

count、avg、min、max、sum


多表:笛卡尔积

join 等值(=)、非等值(运算符)、外连接(+在右边相当于left outjoin)、自连接(用别名区分同一张表)

子查询:内部查询结束进行外部查询

oracle分页借助rownum实现

select salary from
(select salary,rownum rn from
(select salary from s_emp order by salary)
) where rn between 5 and 10;


数据库设计

实体、属性、关系(one-to-one、one-to-many、many-to-many)

数据库范式:

第一范式:记录唯一、列不可再分

第二范式:非主键列完全依赖主键列,主键唯一

第三范式:非主键列互不依赖

第四范式:禁止非主键列与主键列一对多关系不受约束

第五范式:尽可能细分、排除冗余

3、 Table

建表:表名字母开头、1-30、_/$/#开头、表名不能重复、与保留字不冲突

数据类型:varchar2(可变长20)、char(定长20)、number、number(p,s)、date(sysdate函数)、clob、blob(4G)

Date相关:to_date(date,’fmt’),DD-MON-RR、to_char(char[,’fmt’])、java语言SimpleDateFormat、last_day()、next_day()

约束Constraint:表级约束/行集约束,主键约束primary key、外键约束foreign key references、唯一性约束unique、非空约束not null、check约束

DML
insert into……values ……
delete from …… where (drop、truncate差异?)
update …… set …… where


4、  数据库事务

ACID:原子性、一致性、隔离性(事务并发)、持久性

事务开始:第一个DML

事务结束:手动控制commit/rollback、自动提交(DDL、DCL、会话正常结束)、系统异常终止即回滚

事务并发:脏读(读到未提交的数据)、不可重复读(两次读出的记录内容不一致)、幻读(两次读出来的记录条数不一致)

5、 数据库对象

Sequence(配合触发器实现主键自增,nextval、currval)


index索引由数据库自动维护(具体数据——rowid)相当于目录 唯一性索引(主键约束或唯一性约束自动创建)

好处:加快检索速度、减少IO、Oracle自动维护索引

view视图

方便检索数据、简单查询得到复杂的结果、数据独立多表检索、相同数据不同视图

简单视图(一个表、DML)、复杂视图(多个表、函数、分组、不能用DML)

创建视图时 withcheck option:插入或修改需满足定义的约束

                  with readonly:禁止DML

6、 其它

exists 子查询(判断子查询的结果是否存在) not exists

union多条查询语句的并集,不显示重复字段、unionall显示重复、intersect交集、minus差集

修改表和约束

alter 增删改列、增删约束、enable或disable约束

drop不能回滚、删除空间、约束、索引全部失效

truncate 不能回滚、释放空间、可以恢复

(删表——drop、删数据,可能需要回滚——delete、删数据,不要回滚truncate)

rename 重命名

SQL练习

JDBC


1、 JDBC使用

java数据库连接

API分为两部分:java程序员java.sql、javax.sql包、jdbc驱动程序开发人员

Driver:驱动程序

DriverManager:驱动程序的管理类,利用连接字符串测试已注册的一个或多个驱动中哪个可用

Connecton:数据库连接

Statement:数据库的操作对象,PreparedStatement预编译、CallableStatement存储过程等

ResultSet:结果集

DataBaseMetaData(通过Connection获得,isReadOnly),ResultSetMetaData(通过ResultSet获得,rowCount),元数据有关容器本身结构方面的数据

Types:类型

开发步骤:

注册驱动:三种方式(类加载器Class.forName,直接实例化驱动new ,使用java -Djdbc.drivers属性)

建立连接:DriverManager.getConnection()——Driver.connect (PPT19检索连接示意图)

创建Statement:createStatement,preparedStatement

执行SQL:无改变的传至数据库

处理结果集:while(rs.next()){rs.getInt…… setter/getter}

关闭连接:ResultSet、Statement、Connection

2、 高级特性

元数据

事务:事务包含若干条数据库操作,并且保证这些操作具有原子性,可以正确的恢复 ACID

默认自动提交,setAutoCommit(false)——执行若干数据库操作——提交/回滚

并发控制:脏读、不可重复读、幻读

3、2.0核心特性

可滚动、可更新结果集:前后滚动+相对/绝对定位,通过结果集对数据库进行增删改

       可更新结果集限制(单表、不能join、包含主键、不能为空、不能有默认值)

批量更新:addBatch、executeBatch

新增加数据类型:clob、blob流式读取(PPT67-69)

4、2.0扩展

数据源和JNDI:封装了数据库连接的具体细节,制定特定的逻辑名称将其绑定到JNDI服务器上

连接池:利用对可重用数据库连接对象的缓存来提高数据库连接效率(牺牲空间换时间)

行集RowSet(继承ResultSet):ResultSet(可滚动可更新)+Statement+Connection

Hibernate


JDBC适用于数据量较大、表之间关系较为简单

Hibernate适用于数据量较小、表之间关系较为复杂

1、 概述

对象持久化:序列化、保存在数据库(CRUD)

对象关系映射:java对象和关系型数据库之间的映射(类——表,对象——条目,属性——字段,关系——表间关系或表)

PPT 8 Hibernate应用程序结构

Session:连接和事务之间,非线程安全,轻量级,一线程一session

Sessionfactory:获取Session,线程安全,重量级,多线程共享,缓存

Configuration:配置对象,读取hbm.cfg.xml,*.hbm.xml,创建SessionFactory

Transaction:jdbc事务/jta事务

Query:执行HQL

2、 实体映射

id生成方式(oid独立于数据库,唯一,与业务无关,简化对象到表的映射):native、hilo、seqhilo、sequence(DB2)、increment、identity(DB2)、assigned(默认)、foreign、uuid-hex等等

映射类型:java类型和SQL字段类型的映射类型

integer、string、class(java.lang.Class——varchar2类全限定名)、clob、blob


3、 持久化对象的管理

对象状态:暂态(new创建、与session无关、没有id)、持久态(session管理、有id)、游离态(session管理过了、有id)

状态管理 PPT38

get(直接查数据库,找不到返回null)和load(先查缓存,找不到抛异常)

list(Query接口下)、find(直接查数据库)和iterate(先通过id查缓存,找不到再去查数据库)

close、clear、evict、lock、saveOrUpdate、delete


自动脏检查

批量处理:循环save,超过限量会报错

Hibernatenate查询方式:根据id查询(单个)、HQL(常用、跟SQL类似、面向对象、只被Hibernate支持、不限制DB类型)、Criteria(模糊匹配、动态查询、只被Hibernate支持)、Native SQL(适用于不熟悉Hibernate,有些HQL不能实现的SQL,指定DB类型)

4、 实体映射

关联关系:单向、双向one-to-one(唯一外键、共享主键)one-to-many、many-to-many

inverse(true放弃维护关系,one方写)、lazy(延迟加载带来的问题?fetch)


传播性持久化:cascade:all、save-update、delete、delete-orphon、all-delete-orphon

组件映射:某些对象不要求共享,没必要重新分配一张表

集合映射:set(无序不重复)、bag(无序可重复,list实现)、list(有序可重复)、map(键值对)

继承映射:

table-per-class(支持多态、表太多)、table-per-concrete-class(表较少、重复定义属性、不支持多态)、table-per-class-hierarchy(表最少、表可能很大、支持多态)


5、 事务和并发控制

提交(某些查询,commit,flush)setFlushMode

beginTransaction——commit


读未提交(1)——读提交(2)——重复读(4)——串行(8)

应用程序事务:悲观锁(慎重使用、效率太低)、乐观锁(version、timestamp)

6、 高级查询

分页setFirstResult、setMaxResult

NamedQuery(查询语句写在映射文件按中)


集合过滤session.createFilter()

报表查询:like、投影、函数lower、分组、distinct、count(*)

join(fetch 解决延迟加载问题)


参数绑定(位置从1开始,名称:name)

多试,看执行SQL

标注可以补充

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论