日期:2014-05-16 浏览次数:20593 次
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