JDBC事务 Connection类
Connection对象起到管理事务的作用
commit() 提交事务
rollback() 回滚事务
setAutocommit(boolean) 设置是否自动提交,false 实现开始事务效果
(自动提交后,执行一条语句提交一次)
注意:提交事务和回滚事务必须保证事务在同一个Connection对象下
高性能:
代码复用:把一些重用性很高的代码抽取出来
程序解耦合:相互依赖小
连接池
装连接对象的容器,需要连接时从连接池中获取,使用完成后在还给连接池。
链接对象创建和销毁非常耗费时间。
DataSource
DriverManager替代类,提供标准的Connection对象
1.编写一个类实现DataSource接口
javax.sql.DataSource
2.重写getConnection方法
创建一个连接池容器(List集合,可以随意改变集合大小)
3.重写归还连接方法
装饰者模式
把指定类装饰,给这个类添加额外的功能。
1.增强类和被增强类实现相同接口
2.增强类获得被增强类的引用(为了保留被增强类原有功能)(一般在构造中获取被增强类的引用)
3.在增强类方法中执行被增强类中的方法,然后在添加增强类代码
模板类
如果被增强类方法太多,就需要一个模板类。
1.模板类和被增强类实现同一个接
2.增强类继承模板类,重写方法。
模板类没添加增强方法,只是把被增强类中的方法原封不动实现一遍
Druid开源连接池使用:
阿里旗下的开源连接池产品
DruidDataSource类
setDruidClassName(String) 加载驱动
setUrl(Stirng) 设置连接对象
setUsername(String) 设置用户名
setPassword(String) 设置密码
一般不会这么用
配置文件配置Druid
DruidDataSourceFactory类
DataSource createDataSource(Properties)
配置文件格式:
driverClassName=数据库驱动路径 (默认根据URL判断数据库类型)
url=连接mysql路径
username=mysql用户名
password=mysql密码
initialSize=初始化链接几个对象
maxActive=最大链接数量
maxIdle=最大空闲链接
minIdle最小空闲链接
maxWait=超时等待事件单位
配置文件中,url、username、password必须保证全小写
C3P0连接池
核心类:ComboPooledDataSource
设置属性
setDriverClass() 加载驱动
setJdbcUrl() 链接字符串
setUser() 设置mysql用户
setPassword() 设置mysql密码
配置文件方式:重要
C3P0支持XML(c3p0-config.xml)、properties
XML格式:
1.添加w3cp0-config根节点
2.添加默认配置default-config
property
DriverClass
jdbcUrl
user
password
DBUtils工具类
对JDBC的一个简单封装
QueryRunner核心类
构造方法:
QueryRunner(DataSource ds)
QueryRunner()
方法:
int update(String sql,Object ... params) 更新操作
update(Connection conn,String sql,Object ... params)
T query(Connection conn,String sql,Object ...params) 查询操作
常用执行SQL:
int update(String sql,Object ... params)
T query(String sql,ResultSetHandler rsh,Object ...params)
常用执行事务CRUD(以后还会学简单了解):
QueryRunner()因为事务必须保证是同一个Connection对象,所以每次都需要传连接对象
方法:
int updarte (Connection conn,String sql,Object ...params)
T query (Connection conn ,String sql,ResultSetHandler rsh,Object ...params)
因为事务执行时,必须保证是同一个Connnection对象(传入Connection对象),提交时必须也用传入的Connectin对象才可以
DBUtils
ResultSetHandler
实现类:
ArrayHandler和ArrayListHandler
ArrayHandler
将一条记录封装到一个数组当中,Object[]
Object数组:
一行中,每列数据是一个Object对象,根据查询结果的列为准
ArrayListHandler
将多条记录封装到List中,每个List对象是一个Object[]
BeanHandler和BeanListHandler
封装数据中,根据实体类对象中setxxx方法决定根据数据库字段封装到实体类中
实体类属性根据setxxx/getxxx方法决定,不是根据属性决定
BeanHandler
将一条记录封装到JavaBean中
实体类 query(....BeanHandler<实体类>(实体类.class)...)
BeanListHandler
多条记录封装到JavaBean
List<实体类> query(...BeanListHandler<实体类>(实体类.class)...)
MapHandler
一条记录装到Map集合中,key是列,value是列对应的值
Map<String(列),Object(值)>
MapListHandler
多条记录装到Map集合中
ColumnListHandler
构造:
ColumnListHandler("列名")
List<Object> query(..new ColumnListHandler("列") ...)
数据中的某列封装到List集合中
ScalerHandler
单个值封装
注意:如果count(*)查询,返回的数据是long类型,Object一定强转成Long
Object query(...new ScalerHandler()..)
XML
比HTML更严格
允许用户自定义标签
作用:传输和存储数据、软件配置文件
XML语法:
1.XML文档声明
出现在第一行第一列位置
<?xml 属性名=属性值 属性名=属性值?>
属性:
version="" //必须有,版本号 一般1.0
encoding 字符集
standalone 描述XML文档是否依赖其他文件 yes/no
2.注释
eclipse注释快捷 键:Ctrl+Shift+?/
3.元素
大小写敏感
属性名必须加 “”
名称中不能包含冒号 :
元素标签必须关闭
4.属性
属性命名规范和元素一致
5.特殊字符和CDATA区
<![CDATA[ ... 所有内容原意输出 ]]>
XML解析
DOM解析
一次性将文档加载到内存,形成树形结构解析
缺点:如果文档特别大,容易导致内存溢出
优点:可以对XML进行增删改操作
SAX解析
缺点:不能对文档进行增删改操作
优点:如果文档特别打,不会导致内存溢出
针对两种DOM和SAX 的解析工具
DOM4J 开源组织提供一套XML解析的API
Pull 关于安卓的XML解析
JAXP :SUN公司提供的一套XML的解析的API.
JDOM :开源组织提供了一套XML的解析的API-jdom.
DOM4J解析
1. 导入DOM4Jjar包
2. 创建解析器
3. 获得文档的根节点Document
4. 查找子节点
所有节点、属性、内容都可用NODE(节点)表示
节点:Node
元素:Element
文档:Document
SAXReader DOM4J解析器
Read(“XML文件路径”)
Document
getRootElement() //获取根节点
Document element(String) //获取当前节点下指定元素
Element
getText() 获取元素下文本
attributeValue(String attriName)根据元素属性名获取值
element() 获取子节点
elements() 获取子节点下所有节点
elements(String eleName) 获取指定名称子节点
getName() 获取当前标签
getPath() 获取当前标路径
XPath 表达式
导入jaxen的jar包,DOM4J支持jaxen jar包
List<T> document.selectNodes(String xpath(XPath表达式))
Node document.selectSingleNode(String xpath);
XML约束
用来规范XML写法,出现那些标签,不能出现那些标签,标签出现次数…..
XML的约束种类及区别
DTD : 约束字符串
DTD语法:
内部DTD
<!DOCTYPE persons []>
外部DTD
本地DTD
<!DOCTYPE persons SYSTEM “*.dtd”>
网络DTD
<!DOCTYPE persons PUBLIC “////” “*.dtd”>
元素
<!ELEMENT 元素名称 元素类型>
EMPTY
ANY
子元素
是否有序使用,逗号, | 表示或者
出现次数
?: 0次或1次
+:1次或多次
*:0次或多次
PCDATA
普通字符串
属性
<!ATTLIST 元素名称 属性名称 属性类型 属性约束>
属性的类型
ID类型:表示属性值需要时唯一的
CDATA类型:普通的字符串
Schema : Schema有比DTD更加强大的语义和语法约束
Schema支持名称空间
*.xsd是Schema文档 名称空间:一个XML可以到多个名称空间,每个名称空间有一个别名,有一个名称空间没有别名(代表默认名称空间)。
|
|