疯狂Java学习笔记(034)
回顾:
结果集:游标的定位:
绝对定位:
last():
first():
afterLast():
beforeFirst():
absolute(int row):
相对定位:
next():
previous():
relative(int amount):
使用结果集元数据可以获取结果集的描述信息:
sql注入:
sql语句出现了关键字,导致sql语句的含义发生变化!
delete from stu where id = 1 or 1 = 1;
预防:让sql语句中不出现关键字!!
1.关键字过滤
2.预编译语句
预编译语句:PreparedStatement
是Statement的子接口!
在获取该对象时,指定sql语句,一般都包含占位符!!
使用setXXX(占位符的索引,值):索引从1开始!
优点:
1.提高了效率
2.防止sql注入
事务:如何开启事务:
jdbc中自动事务!
使用连接对象的setAutoCommit(false):手动开启事务!
结束事务:
commit();
rollback();
标准的事务处理:
try中提交
catch中异常回滚
finally中释放资源
回滚点:Savepoint:
接口!
数据源:(连接池)datasource!
dbcp连接池:
使用的是装饰者模式.
底层封装的是从jdbc中获取的连接对象!在close方法上进行了增强!
两方面的参数:
1.获取连接时的参数:四大参数
2.池参数:一般是默认的!
装饰者模式:decorator:Wrapper:
是你还有你!
是你:装饰类和被装饰的类有共同的父类(接口)
还有你:在成员变量位置保持一个被装饰对象的引用!!
一切拜托你!
不关心的方法,直接调用底层被包装的对象的相应方法!
增强点增强!
在增强方法上进行逻辑上的增强!!
对一个对象的有返回值的方法进行增强!
在方法前加"hello",方法调用后,加"world".
---------------------
c3p0数据源:
1.手动指定参数:在程序中通过数据源对象的setXXX方法对参数进行设置!不推荐!
2.配置文件设置参数:
配置文件内容:
c3p0-config.xml <c3p0-config> <default-config> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql:///day229</property> <property name="user">root</property> <property name="password">root</property> </default-config> </c3p0-config>
配置文件的位置和文件名都固定!
连接池会在启动时,自动读取配置文件中的内容!
动态代理模式:
在程序运行期间,动态生成指定一组接口的一个实现类对象!
这个类没有名字.但是却实现了指定的一组接口中的所有的抽象方法!!
使用系统提供的Proxy类的静态方法可以实现!
动态代理方法的三大参数:
1.ClassLoader loader:指定生成的动态代理类是通过哪个类加载器到达内存中的
2.Class[] interfaces:指定代理对象所要实现的接口们
3.InvocationHandler h:指定代理对象的方法调用时是如何处理的
调用处理器详解:InvocationHandler
调用处理器是代理对象的方法被调用时,如何处理的业务逻辑的一个封装!
动态代理工厂:
将被增强的目标对象和增强的业务逻辑组合在一起的工厂类主要目的是返回一个被增强的对象!
在成员位置保持需要传递三个对象:
1.被增强的目标对象:
2.前置增强:
3.后置增强:
提供getProxy方法获取一个代理对象.
Buffer抽象类的实现子类:
基本数据类型中,除了boolean类型都有对应的实现子类!
比较常用的是ByteBuffer.
获取一个ByteBuffer对象,使用的方法是本类的静态方法:allocate(int size).
位置:
position:当前指针所在的位置.
limit:第一个不能读写的位置.
capacity:缓冲区的大小(字节数).
mark:标记.方便重复读取数据.
各个指标之间的关系:
0 <= mark <= position <= limit <= capacity
常用通道:
FileChannel:文件通道
SocketChannel:TCP协议的客户端通道
ServerSocketChannel:TCP协议的服务端通道
DategramChannel:UDP协议通道
FileChannel:文件通道,针对本地文件进行操作.
获取方式:
1.通过一些流对象可以获取
FileInputStream,FileOutputStream,RandomAccessFile.
2.通过FileChannel类的静态方法open
FileChannel.open(Path,OpenOption... type);
通道的非阻塞模式的设置:
非阻塞模式只是针对网络通道而言,针对文件通道,没有响应的设置方法.