jdbc

jdbc是什么?
java database connectivity (java数据库连接)是一组接口,之所以会有它,就是使用java操作各种数据库。
hibernate是ORM框架,它封装了jdbc,使程序员以更加简单的方式开发数据访问层,使开发中不再出现重复冗余的代码。
这里写图片描述
mysql-connector-java-5.1.40-bin.jar就是由mysql官方实现的驱动,jar包实现了jdbc接口,jdbc的接口大都在java.sql和javax.sql包中。
1加载驱动driver(每一个驱动都会实现Driver接口)
2创建数据库连接
3创建执行sql的对象statement
4执行sql
5结果集ResultSet
6释放连接

这里写图片描述
现在是否理解为什么dao层要有dao接口?因为解耦,业务逻辑层调用接口,至于是jdbc实现还是hibernate实现接口都无所谓了。

DAO层异常处理:
这里写图片描述
这里写图片描述
SQLException是编译期异常,或者说非RuntimeException.
编译异常你要么throws Exception ,要么try-catch捕获。
运行期异常RuntimeException
无论编译期异常还是运行期异常都是可抛的throw,
捕获编译期异常,想要throw,就要throws 声明。

1:准确定位异常
2:不污染接口(实现接口的方法,接口定义的方法没有throws异常,实现类也不能抛异常,也就是说,实现类中的方法抛出的异常只能比接口中相应的方法少,不能多)

Class是什么?
类和对象的关系就好像图纸和大楼,根据一个图纸可以盖很多大楼,就好比根据一个类可以创建多个对象。根据java万事万物皆对象的思想,图纸也是可以抽象,封装成对象的。Class类就是描述“ 图纸“的类

事务ACID
原子性:不可分割性
一致性:
隔离型:事物并发时,互不影响
持续性:改变永久保存
发生SQLException要做两件事:
1 事物回滚
2 处理异常 throw e , 让调用者知道方法发生异常

跨越多个数据库的事务:
JNDI略

这里写图片描述
这里写图片描述

注:
可重复读(Repeatable Read),当使用可重复读隔离级别时,在事务执行期间会锁定该事务以任何方式引用的所有行。因此,如果在同一个事务中发出同一个SELECT语句两次或更多次,那么产生的结果数据集总是相同的。因此,使用可重复读隔离级别的事务可以多次检索同一行集,并对它们执行任意操作,直到提交或回滚操作终止该事务。

隔离级别是事务的属性,每一个事物都一个设置自己的隔离级别,也就是说不同的事物可以具有不同的隔离级别。

以上脏读,不可重复读,幻读是可能出现的状况,两个事物操作的数据有交集的时候才会出现。

CallableStatement调用存储过程:

CallableStatement(从PreperedStatement扩展来)该类自己只有三类函数
setXxx();为占位符赋值
registerOutParameter();注册out模式的参数
getXxx();获取out模式参数的值

cs = connection.prepareCall(“{call psname(?,?,?)}”);
在执行存储过程之前,必须注册所有 OUT 参数的类型;它们的值是在执行后通过CallableStatement类提供的 get 方法获取的。 
cs.registerOutParameter(index, Types.INTEGER);
cs.setXXX(i, xxxx);
cs.executeUpdate();
int id=cs.getInt(index);

获取刚刚insert的记录的主键

PreparedStatement.getGeneratedKeys();
PreparedStatement ps =connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
ps.executeUpdate();
ResultSet rs = st.getGeneratedKeys();
//获取主键为什么返回ResultSet?
//因为主键的类型不明,是否复合主键不明
rs.getInt(1);

元数据metadata:
数据库元数据

DatabaseMetaData meta = connection.getMetaData();

参数元数据

ParameterMetaData  pmd=preparedStatement.getParameterMetaData();

结果集元数据

ResultSetMetaData meta = rs.getMetaData();

连接池
DataSource用来取代DriverManager来获取Connection;
通过DataSource获得Connection速度很快;
通过DataSource获得的Connection都是已经被包裹过的(不是驱动原来的连接),他的close方法已经被修改。
一般DataSource内部会用一个连接池来缓存Connection,这样可以大幅度提高数据库的访问速度;
连接池可以理解成一个能够存放Connection的Collection;
我们的程序只和DataSource打交道,不会直接访问连接池;

DataSource数据源
连接池初始化耗时耗资源,但是获取连接时较快。

模式:
区分变化的部分和不变的部分

装饰模式
模板模式
策略模式

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值