日期:2014-05-16  浏览次数:20634 次

jdbc工具类(2) (JDBC模板类)

这是我个人采用策略模式设计JDBC模板类:(供大家参考)

package daoUtil.daoTemplate;

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.DAO;
import daoUtil.PrimaryKeyer;
import daoUtil.RowMapper;

public class DAOTemplate implements DAO{
	/**jdbc工具类*/
	private JdbcUtil jdbcUtil=JdbcUtil.getInstance();
	
	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]);
			}
			return ps.executeUpdate();
		}finally{
			jdbcUtil.free(rs,ps,conn);
		}
	}

	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);
		}
	}

	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++){
				ps.setObject(i+1,args[i]);
			}
			rs=ps.executeQuery();
			Object obj=null;
			while(rs.next()){
				obj=rowMapper.rowMapping(rs);
			}
			return obj;
		}finally{
			jdbcUtil.free(rs,ps,conn);
		}
	}


	public int getRecordCount(String tableName) throws SQLException {
		if(tableName==null||tableName.equals("")){
			return 0;
		}
		int count=0;
		Connection conn=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		try {
			conn=jdbcUtil.getConnection();
			String sql="select count(*) from "+tableName;
			ps=jdbcUtil.scrollReadOnlyResultSet(sql,conn);
			if(rs.next()){
				count=rs.getInt(1);
			}
		}finally{
			jdbcUtil.free(rs,ps,conn);
		}
		return count;
	}

	public int insert(String sql, Object[] args, int primaryKeyIndex,PrimaryKeyer primaryKeyer) 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);
			if(primaryKeyIndex<=-1){
				for(int i=0;i<args.length;i++){
					ps.setObject(i+1,args[i]);
				}
			}else if(primaryKeyIndex>-1&&primaryKeyIndex<args.length){
				for(int i=0;i<args.length;i++){
					if(i==primaryKeyIndex){
						ps.setObject(i+1,primaryKeyer.getPrimaryKey());
					}else{
						ps.setObject(i+1,args[i]);
					}
				}
			}else{
				throw new IllegalArgumentException("设置主键位置不正确!");
			}
			return ps.executeUpdate();
		}finally{
			jdbcUtil.free(rs,ps,conn);
		}
	}


	public Collection ObjectList(String sql, Object[] args,RowMapper rowMapper) throws SQLException {
		if(args==null||args.length==0){
			return null;
		}
		Connection conn=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		Collection list=null;
		try {
			conn=jdbcUtil.getConnection();
			ps=jdbcUtil.scrollReadOnlyResultSet(sql,conn);
			for(int i=0;i<args.length;i++){
				ps.setObject(i+1,args[i]);
			}
			list=new ArrayList();
			rs=ps.executeQuery();
			while(rs.next()){
				Object obj=rowMapper.rowMapping(rs);
				list.add(obj);
			}
		}finally{
			jdbcUtil.free(rs,ps,conn);
		}
		return list;
	}

}

?