数据库底层操作

package com.ytu.imanager.common;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.jdbc.datasource.DataSourceUtils;

public class DaoOperateTemplate
{

    /**
     * <p>Discription:[获取DataSource连接]</p>
     */
    private DataSource dataSource;

    /**
     * <p>Discription:[获取DataSource连接,使用Set方法注入]</p>
     * @param dataSource
     * @author:陈晓东
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public void setDataSource(DataSource dataSource)
    {
        this.dataSource = dataSource;
    }

    /**
     * <p>Discription:[数据库连接]</p>
     */
    private Connection conn = null;

    /**
     * <p>Discription:[预处理]</p>
     */
    private PreparedStatement pstmt = null;
    /**
     * <p>Discription:[调用存储过程]</p>
     */
    private CallableStatement proc = null;
    /**
     * <p>Discription:[返回结果集]</p>
     */
    private ResultSet rs = null;
 
    /**
     * <p>Discription:[单个信息查询]</p>
     * @param sql   查询的SQL语句
     * @param args 条件参数
     * @param rowMapper VO层
     * @return  Object类型的类对象,需要强制转换成VO
     * @throws DaoException
     * @author:[陈晓东]
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public Object find(String sql, Object[] args, RowMapper rowMapper)
            throws DaoException
    {
        conn = DataSourceUtils.getConnection(dataSource);
        if (conn ==null)
        {
            return null;
        }
        try
        {
            pstmt = conn.prepareStatement(sql);
            for (int i = 0; i < args.length; i++)
                pstmt.setObject(i + 1, args[i]);
            rs = pstmt.executeQuery();
            Object obj = null;
            if (rs.next())
            {
                obj = rowMapper.mapRow(rs);
            }
            return obj;
        }
        catch (SQLException e)
        {
            throw new DaoException(e.getMessage(), e);
        }
        finally
        {
            ConnectionUtil.close(rs, pstmt, conn, dataSource);
        }
    }

    /**
     * <p>Discription:[方法功能中文描述]</p>
     * @param sql   查询的SQL语句
     * @param args 条件参数
     * @param rowMapper VO层
     * @return  List集,
     * @throws DaoException
     * @author:[陈晓东]
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public List<Object> doQuery(String sql, Object[] args, RowMapper rowMapper)
            throws DaoException
    {
        List<Object> results = new ArrayList<Object>();
        conn = DataSourceUtils.getConnection(dataSource);
        if (conn ==null)
        {
            return null;
        }
        try
        {
            pstmt = conn.prepareStatement(sql);
            for (int i = 0; i < args.length; i++)
                pstmt.setObject(i + 1, args[i]);
            rs = pstmt.executeQuery();
            Object obj = null;
            while (rs.next())
            {
                obj = rowMapper.mapRow(rs);
                results.add(obj);
            }
            return results;
        }
        catch (SQLException e)
        {
            throw new DaoException(e.getMessage(), e);
        }
        finally
        {
            ConnectionUtil.close(rs, pstmt, conn, dataSource);
        }
    }

    /**
     * <p>Discription:[通过存储过程进行分页查询]</p>
     * @param sql   查询的SQL语句
     * @param args 条件参数
     * @param rowMapper VO层
     * @return  List集,
     * @throws DaoException
     * @author:[陈晓东]
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public List<Object> doQueryByCall(String sql, Object[] args, RowMapper rowMapper)
            throws DaoException
    {
        List<Object> results = new ArrayList<Object>();
        conn = DataSourceUtils.getConnection(dataSource);
        if (conn ==null)
        {
            return null;
        }
        try
        {
           
            proc = conn.prepareCall(sql);//sql = "{ call scott.prc_page(?,?,?,?,?,?,?,?,?) }";
            proc.setString(1, String.valueOf(args[0])); //--表名
            proc.setString(2, String.valueOf(args[1])); //--查询条件
            proc.setString(3, String.valueOf(args[2])); //--要排序的列名
            proc.setString(4, String.valueOf(args[3])); //--排序方式
            proc.setString(5, String.valueOf(args[4])); //--当前页
            proc.setString(6, String.valueOf(args[5])); //--每页显示的记录数

            proc.registerOutParameter(7, Types.INTEGER); //--总记录数
            proc.registerOutParameter(8, Types.INTEGER); //--总页数
            proc.registerOutParameter(9, oracle.jdbc.OracleTypes.CURSOR); //--返回的结果集

            proc.execute();
           
            //总记录数
            int totaRecords = proc.getInt(7);
            //总页数
            int totalPages = proc.getInt(8);
            results.add(totaRecords);
            results.add(totalPages);
           
            rs = (ResultSet) proc.getObject(9);
           
            Object obj = null;
            while (rs.next())
            {
                obj = rowMapper.mapRow(rs);
                results.add(obj);
            }
            return results;
        }
        catch (SQLException e)
        {
            throw new DaoException(e.getMessage(), e);
        }
        finally
        {
            ConnectionUtil.close(rs, proc, conn, dataSource);
        }
    }
  
    /**
     * <p>Discription:[update/insert/delete]</p>
     * @param sql   查询的SQL语句
     * @param args 条件参数
     * @param isGeneralKey
     * @return 是否成功
     * @throws DaoException
     * @author:[陈晓东]
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public boolean doUpdate(String sql, Object[] args, boolean isGeneralKey)
            throws DaoException
    {
        boolean result = false;
        conn = DataSourceUtils.getConnection(dataSource);
        if (conn ==null)
        {
            return result;
        }
        try
        {
            pstmt = (isGeneralKey ? conn.prepareStatement(sql,
                    Statement.RETURN_GENERATED_KEYS) : conn
                    .prepareStatement(sql));
            for (int i = 0; i < args.length; i++)
            {
                pstmt.setObject(i + 1, args[i]);
            }
            if (pstmt.executeUpdate() > 0)
            {
                pstmt.close();
                conn.close();
                result = true;
            }
            else
            {
                result = false;
            }

        }
        catch (SQLException e)
        {
            throw new DaoException(e.getMessage(), e);
        }
        finally
        {
            ConnectionUtil.close(rs, pstmt, conn, dataSource);
        }
        return result;
    }
   
}

猜你喜欢

转载自mumian0417.iteye.com/blog/1515576
今日推荐