日期:2014-05-16 浏览次数:20647 次
1.2版本中添加了一个新插入的方法:
/**
* 在Web开发中struts框架中,页数数据在被存入数据库时会被包装在一个formbean对象中
* 在把这些数据存入数据库时,需要把formbean中值取出来,在插入数据库中这样很麻烦
* 所以我设计了这个方法,只需要一个sql语句(sql语句字段名必须和数据库中的完全一致,字段顺序可以随便)
* 和一个封装好数据对象。
* 这个方法对页面数据提交在存入数据库,有很大方便。
* 在这里插入主键时,主键值也应当包含那个封装对象中
* 思想:主要是对sql语句进行分析,解析出要插入字段名称,在利用反射技术将值set到preparedStatement对象中。
* @param sql 数据库插入 sql语句
* @param obj 已经封装好数据对象
* @return 新增成功记录数
* @throws Exception
*/
public int insert(String sql, Object obj) throws Exception {
if(obj==null){
return 0;
}
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
String [] fieldNames=resolveSQL(sql);
try {
conn=jdbcUtil.getConnection();
ps=jdbcUtil.scrollReadOnlyResultSet(sql,conn);
for(int i=0;i<fieldNames.length;i++){
Object o=valueFromObject(fieldNames[i],obj);
PreparedStatementSetValue(ps,o,i+1);
}
return ps.executeUpdate();
}finally{
jdbcUtil.free(rs,ps,conn);
}
}
?
=================================================================
package daoUtil.daoTemplate;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import jdbcUtil.JdbcUtil;
import daoUtil.PrimaryKeyer;
import daoUtil.RowMapper;
/**
* 在写jdbc程序是可以清楚的知道
* 在程序中只有sql语句和其参数值是变化
* 其余程序代码几乎类似(获得连接,关闭连接)
* 在这里我对以前所写jdbc程序进行了一下改进
* 将获得连接和关闭连接的程序代码交给一个模板类去做
* 再写jdbc程序时,调用模板类中相应的方法,传入sql语句和其参数值
* 这样大大简化jdbc程序,给我们带来方便
* 程序新版本往后日子会不断更新,渴望javaeye里面高手多多给我指点
* @author kevin.wangwei
* Email:wanwei.234@163.com
* 2010-1-30
*/
public class DAOTemplate{
/**jdbc工具类*/
private JdbcUtil jdbcUtil=JdbcUtil.getInstance();
/**
* 数据库删除操作
* @param sql 删除操作sql语句
* @param args 删除操作sql语句参数值数组
* @return 删除记录条数
* @throws SQLException
*/
public int delete(String sql, Object[] args) throws SQLException {
if(args==null||args.length==0){
return 0;
}
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
conn=jdbcUtil.getConnection();
ps=jdbcUtil.scrollReadOnlyResultSet(sql,conn);
for(int i=0;i<args.length;i++){
ps.setObject(i+1,args[i]);//在这里我们应该调用下面的PreparedStatementSetValue方法,
//不过这样写亦可以,但它不可以处理null值
}
return ps.executeUpdate();
}finally{
jdbcUtil.free(rs,ps,conn);
}
}
/**
* 数据库更新操作
* @param sql 更新操作sql语句
* @param args sql语句参数值数组
* @return 更新记录条数
* @throws SQLException
*/
public int update(String sql, Object[] args) throws SQLException {
if(args==null||args.length==0){
return 0;
}
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
conn=jdbcUtil.getConnection();
ps=jdbcUtil.scrollReadOnlyResultSet(sql,conn);
for(int i=0;i<args.length;i++){
ps.setObject(i+1,args[i]);
}
return ps.executeUpdate();
}finally{
jdbcUtil.free(rs,ps,conn);
}
}
/**
* 数据库查询操作 采用反射来给包装sql语句参数赋值
* @param sql 查询操作sql语句
* @param args 删除操作sql语句数组数值
* @return 结果对象
* @throws SQLException
*/
public Object find(String sql, Object[] args,RowMapper rowMapper) throws SQLException {
if(args==null||args.length==0){
return 0;
}
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
conn=jdbcUtil.getConnection();
ps=jdbcUtil.scrollReadOnlyResultSet(sql,conn);
for(int i=0;i<args.length;i++){
try {
PreparedStatementSetValue(ps,args[i],i+1);
} catch (Exception e) {
e.printStackTrace();
}
}
rs=ps.executeQuery();
Object obj=null;
while(rs.next()){
obj=rowMapper.rowMapping(rs);
}
return obj;
}finally{
jdbcUtil.free(rs,ps,conn);
}
}
/**
* 获得表中记录数
* @param sql sql语句
* @param args 参数数组
* @return 表中记录数
* @throws SQLException
*/
public int getRecordC