应用程序和数据库打交道
李爽
客户端(GUI,web)
业务逻辑层(增、删、改、查) java
*和数据库的交互 jdbc
chapter 01
1.ODBC-Open Database Connectivity
开放式数据库连接
基于C语言的,以SQL为基础,提供和数据库交互(通信,相关元数据的访问)的软件。
application-->odbc-->db(sql,server,oracle)
2.jdbc:java版的odbc
3.jdbc的API:
分类: 1)针对数据库厂商(实现相应的驱动)
所有种类的驱动的实现都要实现jdbc中的interface(规范,基本功能)
2)针对程序员的(连接,查询,结果集处理等)
4。四种类型的jdbc驱动:
(1)jdbc-odbc桥
jdbc-->jdbc-odbc桥-->odbc-->db
特点: a)由于复杂的转换过程,效率低下。
b)要求必须在客户端安装相应的驱动程序,我们无法做到网络中所有的客户都包含相应的驱动。
c)仅限于实验和小型的系统
(2)部分java实现的本地API:
(java+本地驱动(只有一部分是java实现的))-->db
特点: a)减少了中间转换过程,因此效率上相对与第一种有所提高
b)仍然要求客户端安装驱动,无法实现大型的网络应用
(3)纯java实现的jdbc的网络驱动
java-网络->server(网络服务器)-网络->db
特点: a)中间和数据库的交互完全依赖网络服务器,可以实现应用程序和各种数据库的交互,效率相对前两种都有所提高。
b)无需在客户端安装驱动
(4)纯java实现的本地协议的驱动
(java+本地协议驱动(纯java实现的,可以动态下载))-->db
特点: a)由于支持动态下载,安装简单,又没有中间的转换过程,因此效率为四种当中最高的。
第一,第二 使用较少
如果系统要频繁更换数据库,建议使用第三种
如果数据库固定,建议使用第四种
5。接口和类的简介:
(1)Driver:驱动
(2)DriverManager:驱动管理器:获得连接对象
(3)Connection:连接
Connection conn=DriverManager.getConnection();
(4)执行:
Statement:普通的执行
CallableStatement:专门用于存储过程的执行
PreparedStatement:效率有所提高(可以设置参数)
存储过程:数据端完成特定功能的代码段
(5)ResultSet:结果集
(6) DatabaseMatedata:数据库的元数据
ResultSetMatedata:结果集的元数据
(7)Types:用户自定义类型
6。连接数据库的要素
url="jdbc:oracle:thin:@192.168.1.220:1521:briupdb"
userName="jd0804"
pwd="jd0804"
7。jdbc编程步骤
(1)注册驱动:
方式一:
try{
Class.forName("orcale.jdbc.driver.oracleDriver");
}catch(Exception e){
}
方式二:
Driver driver=new oracle.jdbc.driver.OracleDriver();
方式三:
设置运行时参数
-Djdbc.drivers=oracle.jdbc.driver.OracleDriver
PreparedStatement
Common:
Class JDBCemplate{
查询: query(String sql,用户处理结果集的方式);
query(String sql,new Handler(){});
query(String sql,用户设置参数的方式,用户处理结果集的方式);
query(String sql,new PrepareStatementSetter(){},new Handler(){});
删除:
更新:
添加:
update(String sql,用户设置参数的方式);
update(String sql,new PrepareStatementSetter(){});
}
//用户处理结果集方式的定义
interface Handler{}
//用户设置参数的方式
interface PrepareStatementSetter{}
JDBC实现分页:
SQLException e1=e.getNextException();
SQLWaring w1=w.getNextWarning();
获得下一个异常对象或警告
class DBError{
public static void out(SQLException e,StringBuffer buffer) {
}
public static void out(SQLWarning w,StringBuffer buffer) {
}
public static void save(StringBuffer buffer) {
}
}
事务的特性:
1)原子性:事务是由很多工作单元组成,这些单元只能同时成功或失败,工作单元“不可分”
2)一致性:不管发生多少操作,事务应该保证其正确性
3)隔离性:事务之间是独立的,互相之间不受影响
4)持久性:一旦事务提交,将永久保持,包括系统崩溃之后的复原也要保持事务提交之后的所在状态。
通过设置隔离级别来保证数据的正确(保证在一个事务操作某个数据的时候不允许其他事务对数据进行操作)。
隔离级别越高,效率将缺失越多。
并发控制:
(1)脏读:两个事务同时操作表的记录。 可能:一个事务读到另一个事务未提交的结果,一个事务的回滚覆盖
另一个事务已提交的结果。
(2)不可重复读:同一个事务在不同时点执行同一个sql语句,两次结果不一样,说明中间存在其他的事务对结果进行了修改称为不可重复读。
(3)幻读:一个事务两次执行相同的查询(where子句相同),所得到的结果集不同,中间可能存在其他的事务对表进行插入,删除或更新操作。
作业练习:
对银行帐户的操作:
class AccountService{
开户:输入密码 提供产生随机帐号的类
update:
存款: 取款:要求做到一个方法里(考虑并发的问题:java/Oracle)
查询:金额,用户信息
注销:
}
class AccountCode{
//总能产生不重复的16位的帐号
public String getCoge(){
}
}
浙公网安备 33010602011771号