说明:此篇小编收集整理,非原作者。
第一章 JDBC FrameWork
1. JdbcSession的创建:
PersistenceManager sessionManager= PersistenceManager. getInstance ();
try {
JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话
相关业务操作
} catch (DbException e) {
}
finally {
sessionManager. release ();//需要关闭会话
}
2. 数据访问异常的处理
DbException是一个抽象异常类, 它被用来处理SQLException和我们的数据访问异常之间的转换。在数据访问框架中提供了不同数据库对不同DbException的实现并对每种数据库的SQLErrorCode进行了处理,统一转化成不同的方法,通过DbException能够精确的指定出数据访问过程中所出现的问题。
try {
数据访问过程
} catch (DbException e) {
//根据数据库的不同统一异常处理
if(e.isBadSQLGrammar())//如果是语法错误
//to do 相关处理
if(e.isDataIntegrityViolation())//如果是数据一致性错误
//to do 相关处理
}
finally {
//关闭会话
}
3. 结果集合的处理
对查询结果集合的处理,主要由ResultProcessor类来实现,这是一个接口 ResultProcessor包含有一个简单的方法,不同的ResultProcessor实现返回不同的结果对象。系统提供了一系列常用的默认实现。
ArrayProcessor 数组处理器,返回一个对象数组,结果集中只有一行数据,其中结果集中每一列对应数组的一个元素。
ArrayListProcessor 数组集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个数组,每个数组对应结果集中的一行数据,其中结果集中每一列对应数组的一个元素。
MapProcessor HashMap处理器,返回一个HashMap, 结果集中只有一行数据,其中结果集合中每一列的列名和列值对应HashMap的一个关键字和相应的值。
MapListProcessor HashMap集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个HashMap,每个HashMap对应结果集中的一行数据, 其中结果集合中每一列的列名和列值对应HashMap的一个关键字和相应的值。
BeanProcessor 值对象处理器,返回一个JavaBean,结果集中只有一行数据,该处理器能自动把结果集中的值按列的名称映射到javaBean中,如结果集中有名称为”name”的字段,那么只要该java对象中有getName()方法就能把结果集合中”name”对应的值映射到对象中。
BeanProcessor 值对象集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个javaBean,每个javaBean对应结果集合中一行数据,其中每个JavaBean中的数据映射关系和BeanProcess同理。
ColumnProcessor 列值处理器,返回一个Java对象,结果集中只有一行数据,该对象对应与结果集中某一列的值,该处理器通过结果集列的序号或名称来确定列。
BeanMappingListProcessor:值对象集合处理器,根据映射信息返回一个ArrayList集合,集合中的每一个元素是一个javaBean,每个javaBean对应结果集合中一行数据,其中每个JavaBean中的数据映射关系和BeanMappingProcess同理
BeanMappingProcessor:值对象处理器,根据映射信息返回一个JavaBean,结果集中只有一行数据,该处理器能自动把结果集中的值按列的名称映射到javaBean中,如结果集中有名称为”name”的字段,那么只要该java对象中有getName()方法就能把结果集合中”name”对应的值映射到对象中
上述的默认实现并不能满足所有的业务需求,在开发过程中还需要实现自定义的结果集处理器。如:
public class CustomProcessor extends BaseProcessor {
public Object processResultSet(ResultSet rs) throws SQLException {
… 自定义实现
…
}
}
4. 更新的实现
4.1 无参数更新数据
PersistenceManager sessionManager=null;
try {
sessionManager =PersistenceManager. getInstance ();
JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话
String sql = "update bd_invmandoc set pk_invmandoc ='0001AA10000000000DDD' where pk_invmandoc='0001AA10000000000DDD' ";
session.executeUpdate(sql);
} catch (DbException e) {
}
finally {
if(sessionManager!=null)
sessionManager. release ();//需要关闭会话
}
4.2 带参数更新数据
PersistenceManager sessionManager=null;
try {
sessionManager =PersistenceManager. getInstance ();
JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话
String sql = "update bd_invmandoc set pk_invmandoc ='0001AA10000000000DDD' where pk_invmandoc=?”;
SQLParameter parameter = new SQLParameter(); 构造参数对象
parameter.addParam("0001AA10000000000DDD");添加参数,JdbcSession会将参数对象中的每个对象放入到预处理对象的相应位置
session.executeUpdate(sql,parameter);
} catch (DbException e) {
}
finally {
if(sessionManager!=null)
sessionManager. release ();//需要关闭会话
}
4.3 批量带参数更新数据
PersistenceManager sessionManager=null;
try {
sessionManager =PersistenceManager. getInstance ();
JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话
String sql = "update bd_invmandoc set pk_invmandoc ='0001AA10000000000DDD' where pk_invmandoc=? ";
SQLParameter parameter = new SQLParameter();
parameter.addParam("0001AA10000000000DDD");
session.addBatch(sql, parameter);
int rows = session.executeBatch();
} catch (DbException e) {
}
finally {
if(sessionManager!=null)
sessionManager. release ();//需要关闭会话
}
4.4 批量无参数更新
PersistenceManager sessionManager=null;
try {
sessionManager =PersistenceManager. getInstance ();
JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话
String sql = "update bd_invmandoc set pk_invmandoc ='0001AA10000000000DDD' where pk_invmandoc=’ '0001AA10000000000DDD'’ ";
session.addBatch(sql);
int rows = session.executeBatch();
} catch (DbException e) {
}
finally {
if(sessionManager!=null)
sessionManager. release ();//需要关闭会话
}
5. JdbcSession中特殊参数类型
在JdbcSession中有3中特殊的参数特性Null,Blob,Clob;
使用Null参数类型
PersistenceManager sessionManager=null;
try {
sessionManager =PersistenceManager. getInstance ();
JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话
String sql =更新或插入Null字段的SQL语句 ……
SQLParameter parameter = new SQLParameter();
parameter. addNullParam (Types.INTEGER);
session.addBatch(sql, parameter);
int rows = session.executeBatch();
} catch (DbException e) {
}
finally {
if(sessionManager!=null)
sessionManager. release ();//需要关闭会话
}
使用Blob参数类型
PersistenceManager sessionManager=null;
try {
sessionManager =PersistenceManager. getInstance ();
JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话
String sql =更新或插入Blob字段的SQL语句 ……
SQLParameter parameter = new SQLParameter();
parameter. addBlobParam (new Object());
session.addBatch(sql, parameter);
int rows = session.executeBatch();
} catch (DbException e) {
}
finally {
if(sessionManager!=null)
session.closeAll();//关闭会话
}
使用Clob参数类型
SessionManager sessionManager=null;
try {
sessionManager =PersistenceManager. getInstance ();
JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话
String sql =更新或插入Clob字段的SQL语句 ……
SQLParameter parameter = new SQLParameter();
parameter. addClobParam (new String());
session.addBatch(sql, parameter);
int rows = session.executeBatch();
} catch (DbException e) {
}
finally {
if(sessionManager!=null)
session.closeAll();//关闭会话
}