`

关于DAO的类(操作数据库)

阅读更多
可以拿去用咯~
package com.scitel.gdnumcommon.utils;   
  
import java.math.BigDecimal;   
import java.sql.Connection;   
import java.sql.PreparedStatement;   
import java.sql.ResultSet;   
import java.sql.ResultSetMetaData;   
import java.sql.Types;   
import java.util.ArrayList;   
import java.util.HashMap;   
import java.util.Iterator;   
import java.util.List;   
import java.util.Map;   
  
import org.apache.commons.beanutils.BeanUtils;   
import org.apache.commons.logging.Log;   
import org.apache.commons.logging.LogFactory;   
  
import com.scitel.gdnumcommon.entity.Pagination;   
import com.scitel.gdnumcommon.entity.BaseVO;   
  
public class BaseDAO {   
    private static final Log log = LogFactory.getLog(BaseDAO.class);   
  
    /**  
     * 保存数据,新建和修改都用这个  
     *  
     * @param con  
     * @param SQL  
     * @param params  
     * @throws Exception  
     * @author   
     */  
    public void save(Connection con, String SQL, List params)   
            throws Exception {   
        PreparedStatement ps = null;   
        try {   
            ps = con.prepareStatement(SQL);   
            if (SQL == null) {   
                throw new Exception();   
            }   
  
            if (params != null && params.size() > 0) {   
                int count = 0;   
                for (Iterator iterator = params.iterator(); iterator.hasNext(); count++) {   
                    Object object = iterator.next();   
                    setObjectValue(ps, count + 1, object);   
                }   
            }   
            ps.executeUpdate();   
        } catch (Exception e) {   
            log.error(e);   
            throw e;   
        } finally {   
            try{   
                if(ps != null) {   
                    ps.close();   
                }   
            }catch(Exception e){   
  
            }   
        }   
    }   
  
    /**  
     * 保存数据,新建和修改都用这个,通过字段名称匹配类型  
     * @param con  
     * @param SQL  
     * @param voclass  
     * @param paramMap  
     * @throws Exception  
     * @author   
     */  
    public void save(Connection con, String SQL, Class voclass, Map paramMap)   
            throws Exception {   
        PreparedStatement ps = null;   
        try {   
            ps = con.prepareStatement(SQL);   
            if (SQL == null) {   
                throw new Exception();   
            }   
  
            if (paramMap != null && paramMap.size() > 0) {   
                int count = 0;   
                for (Iterator iterator = paramMap.keySet().iterator(); iterator.hasNext(); count++) {   
  
                    String key = (String)iterator.next();   
                    Object object = paramMap.get(key);   
                    setObjectValue(ps, voclass, count+1, key, object);   
                }   
            }   
            ps.executeUpdate();   
        } catch (Exception e) {   
            log.error(e);   
            throw e;   
        } finally {   
            try{   
                if(ps != null) {   
                    ps.close();   
                }   
            }catch(Exception e){   
  
            }   
        }   
    }   
  
    /**  
     * 删除数据  
     *  
     * @param con  
     * @param SQL  
     * @param params  
     * @throws Exception  
     * @author   
     */  
    public void remove(Connection con, String SQL, List params)   
            throws Exception {   
        PreparedStatement ps = null;   
        try {   
            ps = con.prepareStatement(SQL);   
            if (SQL == null) {   
                throw new Exception();   
            }   
            if (params != null && params.size() > 0) {   
                int count = 0;   
                for (Iterator iterator = params.iterator(); iterator.hasNext(); count++) {   
                    Object object = iterator.next();   
                    setObjectValue(ps, count + 1, object);   
                }   
            }   
            ps.executeUpdate();   
        } catch (Exception e) {   
            log.error(e);   
            throw e;   
        } finally {   
            try{   
                if(ps != null) {   
                    ps.close();   
                }   
            }catch(Exception e){   
  
            }   
        }   
    }   
  
    /**  
     * 根据ID选择数据  
     *  
     * @param con  
     * @param SQL  
     * @param id  
     * @param voclass  
     * @return  
     * @throws Exception  
     * @author   
     */  
    public BaseVO selectById(Connection con, String SQL, String id,   
            Class voclass) throws Exception {   
        Object po = null; // 承载值对象   
        PreparedStatement ps = null;   
        ResultSet rs = null;   
        ResultSetMetaData rsm = null;   
        try {   
            ps = con.prepareStatement(SQL);   
            if (SQL == null) {   
                throw new Exception();   
            }   
  
            ps.setString(1, id);   
  
            rs = ps.executeQuery();   
            rsm = rs.getMetaData();   
            if (rs.next()) {   
                Map entity = new HashMap();   
                for (int i = 1; i <= rsm.getColumnCount(); i++) {   
                    String columnName = rsm.getColumnName(i).toLowerCase();   
                    Object columnValue = getObjectValue(rs, voclass, i, columnName);   
                    entity.put(columnName, columnValue);   
                }   
                if (voclass != null) {   
                    po = voclass.newInstance();   
                    BeanUtils.populate(po, entity);   
                }   
                    
            }   
        } catch (Exception e) {   
            log.error(e);   
            throw e;   
        } finally {   
            try {   
                if (rs != null) {   
                    rs.close();   
                }   
            } catch (Exception e) {   
  
            }   
            try {   
                if (ps != null) {   
                    ps.close();   
                }   
            } catch (Exception e) {   
  
            }   
        }   
        return (BaseVO) po;   
    }   
  
    /**  
     * 选择记录,不分页  
     * @param con  
     * @param SQL  
     * @param params  
     * @param voclass  
     * @return  
     * @throws Exception  
     * @author   
     */  
    public List select(Connection con, String SQL, List params, Class voclass)   
            throws Exception {   
        Object vo = null; // 承载值对象   
        PreparedStatement ps = null;   
        ResultSet rs = null;   
        ResultSetMetaData rsm = null;   
        List relist = null;   
        try {   
            ps = con.prepareStatement(SQL);   
            if (SQL == null) {   
                throw new Exception();   
            }   
            if (params != null && params.size() > 0) {   
                int count = 0;   
                for (Iterator iterator = params.iterator(); iterator.hasNext(); count++) {   
                    Object object = iterator.next();   
                    setObjectValue(ps, count + 1, object);   
                }   
            }   
            rs = ps.executeQuery();   
            rsm = rs.getMetaData();   
            relist = new ArrayList();   
            while (rs.next()) {   
                Map entity = new HashMap();   
                for (int i = 1; i <= rsm.getColumnCount(); i++) {   
                    String columnName = rsm.getColumnName(i).toLowerCase();   
                    Object columnValue = getObjectValue(rs, voclass, i, columnName);   
                    entity.put(columnName, columnValue);   
                       
                }   
                if (voclass != null) {   
                    vo = voclass.newInstance();   
                    BeanUtils.populate(vo, entity);   
                    relist.add(vo);   
                } else {   
                    relist.add(entity);   
                }   
            }   
        } catch (Exception e) {   
            log.error(e);   
            throw e;   
        } finally {   
            try {   
                if (rs != null) {   
                    rs.close();   
                }   
            } catch (Exception e) {   
  
            }   
            try {   
                if (ps != null) {   
                    ps.close();   
                }   
            } catch (Exception e) {   
  
            }   
               
        }   
        return relist;   
    }   
  
    /**  
     * 分页查询  
     *  
     * @param con  
     * @param SQL  
     * @param params  
     * @param voclass  
     * @param pagination  
     * @return  
     * @throws Exception  
     * @author   
     */  
    public List selectPagination(Connection con, String SQL, List params,   
            Class voclass, Pagination pagination) throws Exception {   
        if (SQL == null) {   
            throw new NullPointerException("SQL不能为空!");   
        }   
        if (pagination == null) {   
            throw new NullPointerException("分页类不能为空!");   
        }   
  
        // TODO Auto-generated method stub   
        Object vo = null; // 承载值对象   
        PreparedStatement ps = null;   
        ResultSet rs = null;   
        ResultSetMetaData rsm = null;   
        List relist = null;   
        try {   
  
            ps = con.prepareStatement("select count(1) as count_ from ( " + SQL + " )");   
  
            if (params != null && params.size() > 0) {   
                int count = 0;   
                for (Iterator iterator = params.iterator(); iterator.hasNext(); count++) {   
                    Object object = iterator.next();   
                    setObjectValue(ps, count + 1, object);   
                }   
            }   
  
            rs = ps.executeQuery();   
            if (rs.next()) {   
                pagination.setTotalCount(rs.getInt(1));   
                   
            }   
               
  
            if (pagination.getTotalCount() > 0) {   
                /* 组成分页内容 */  
                StringBuffer pagingSelect = new StringBuffer(100);   
                pagingSelect   
                        .append("select * from ( select row_.*, rownum rownum_ from ( ");   
                pagingSelect.append(SQL);   
                pagingSelect   
                        .append(" ) row_ where rownum <= ?) where rownum_ > ?");   
  
                ps = con.prepareStatement(pagingSelect.toString());   
                int count = 0;   
                if (params != null && params.size() > 0) {   
                    for (Iterator iterator = params.iterator(); iterator.hasNext(); count++) {   
                        Object object = iterator.next();   
                        setObjectValue(ps, count + 1, object);   
                    }   
                }   
                   
                ps.setInt(count + 1, pagination.getPage()   
                        * pagination.getCount());   
                ps.setInt(count + 2, (pagination.getPage() - 1)   
                        * pagination.getCount());   
  
                log.info("pagination.getPage():" + pagination.getPage());   
                log.info("pagination.getCount():" + pagination.getCount());   
                rs = ps.executeQuery();   
                rsm = rs.getMetaData();   
                relist = new ArrayList();   
                while (rs.next()) {   
                    Map entity = new HashMap();   
                    for (int i = 1; i <= rsm.getColumnCount(); i++) {   
                        String columnName = rsm.getColumnName(i).toLowerCase();   
                        Object columnValue = getObjectValue(rs, voclass, i, columnName);   
                        entity.put(columnName, columnValue);   
                    }   
                    if (voclass != null) {   
                        vo = voclass.newInstance();   
                        BeanUtils.populate(vo, entity);   
                        relist.add(vo);   
                    } else {   
                        relist.add(entity);   
                    }   
                }   
            }   
        } catch (Exception e) {   
            log.error(e);   
            throw e;   
        } finally {   
            try {   
                if (rs != null) {   
                    rs.close();   
                }   
            } catch (Exception e) {   
  
            }   
            try {   
                if (ps != null) {   
                    ps.close();   
                }   
            } catch (Exception e) {   
  
            }   
  
        }   
        return relist;   
    }   
  
    /**  
     * 获得SequenceValue  
     * @param sequenceName  
     * @return  
     * @throws Exception  
     * @author   
     */  
    public Long getSequenceValue(Connection con, String sequenceName)throws Exception {   
        PreparedStatement ps = null;   
        ResultSet rs = null;   
        Long sequenceValue = null;   
        try{   
            ps = con.prepareStatement("select " + sequenceName + ".nextval from dual");   
            rs = ps.executeQuery();   
            if(rs.next()) {   
                sequenceValue = new Long(rs.getLong(1));   
            }   
        }catch(Exception e){   
            log.error(e);   
            throw e;   
        }finally{   
            try {   
                if (rs != null) {   
                    rs.close();   
                }   
            } catch (Exception e) {   
  
            }   
            try {   
                if (ps != null) {   
                    ps.close();   
                }   
            } catch (Exception e) {   
  
            }   
        }   
        return sequenceValue;   
    }   
    /**  
     * 把对象传入数据库  
     * @param ps  
     * @param count  
     * @param object  
     * @author   
     */  
    private final void setObjectValue(PreparedStatement ps, int count, Object object) throws Exception {   
        log.debug("count is " + count + " object is " + object);   
        if(object != null) {   
            if(object instanceof Integer){   
                ps.setInt(count, ((Integer)object).intValue());   
            }else if(object instanceof Long) {   
                ps.setLong(count, ((Long)object).longValue());   
            }else if(object instanceof BigDecimal){   
                ps.setBigDecimal(count, (BigDecimal)object);   
            }else if(object instanceof String){   
                ps.setString(count, (String)object);   
            }else if(object instanceof java.util.Date) {   
                if(object!=null){   
                    long time = ((java.util.Date)object).getTime();   
                    ps.setDate(count, new java.sql.Date(time));   
                }else{   
                    ps.setDate(count, null);   
                }   
            }else{   
                ps.setObject(count, object);   
            }   
        }else{   
            ps.setNull(count, Types.INTEGER);   
        }   
    }   
  
    /**  
     * 把对象传入数据库  
     * @param ps  
     * @param clazz  
     * @param count  
     * @param columnName  
     * @param object  
     * @throws Exception  
     * @author   
     */  
    private final void setObjectValue(PreparedStatement ps, Class clazz, int count,   
            String columnName, Object object)throws Exception {   
        log.debug("count is " + count + " columnName is " + columnName + " object is " + object);   
        String classType = clazz.getDeclaredField(columnName).getType().getName();   
        if(classType.equals("java.lang.Integer")){   
            if(object != null) {   
                ps.setInt(count, ((Integer)object).intValue());   
            }else{   
                ps.setNull(count, Types.INTEGER);   
            }   
        }else if(classType.equals("java.lang.Long")) {   
            if(object != null ) {   
                ps.setLong(count, ((Long)object).longValue());   
            }else{   
                ps.setNull(count, Types.INTEGER);   
            }   
        }else if(classType.equals("java.math.BigDecimal")){   
            if(object != null) {   
                ps.setBigDecimal(count, (BigDecimal)object);   
            }else{   
                ps.setNull(count, Types.NUMERIC);   
            }   
        }else if(classType.equals("java.lang.String")){   
            if(object != null) {   
                ps.setString(count, (String)object);   
            }else{   
                ps.setString(count, null);   
            }   
        }else if(classType.equals("java.util.Date")) {   
            if(object!=null){   
                long time = ((java.util.Date)object).getTime();   
                ps.setDate(count, new java.sql.Date(time));   
            }else{   
                ps.setDate(count, null);   
            }   
        }else{   
            ps.setObject(count, object);   
        }   
    }   
  
    /**  
     * 把数据从数据取出来  
     * @param rs  
     * @param clazz  
     * @param count  
     * @param columnName  
     * @return  
     * @throws Exception  
     * @author   
     */  
    private final Object getObjectValue(ResultSet rs, Class clazz, int count, String columnName) throws Exception {   
        Object fieldValue = null;   
        log.debug("columnName is " + columnName + " count is " + count);   
        if(columnName != null) {   
            if("rownum".equals(columnName)) {   
                fieldValue = new Long(rs.getLong(count));   
            }else if("rownum_".equals(columnName)) {   
                fieldValue = new Long(rs.getLong(count));   
            }else if("count_".equals(columnName)) {   
                fieldValue = new Long(rs.getLong(count));   
            }else{   
                String classType = clazz.getDeclaredField(columnName).getType().getName();   
  
                if(classType.equals("java.lang.Integer")){   
                    fieldValue =new Integer( rs.getInt(count));   
                }else if(classType.equals("java.lang.Long")) {   
                    fieldValue =new Long( rs.getLong(count));   
                }else if(classType.equals("java.math.BigDecimal")){   
                    fieldValue = rs.getBigDecimal(count);   
                }else if(classType.equals("java.lang.String")){   
                    fieldValue = rs.getString(count);   
                }else if(classType.equals("java.util.Date")) {   
                    java.sql.Date date = rs.getDate(count);   
                    if(date!= null){   
                        fieldValue = new java.util.Date(date.getTime());   
                    }   
                }else{   
                    fieldValue = rs.getString(count);   
                }   
            }   
        }   
        return fieldValue;   
    }   
  
  
}  
 
分享到:
评论

相关推荐

    9.DAO数据库操作演示(Visual C++编程 源代码)

    9.DAO数据库操作演示(Visual C++编程 源代码)9.DAO数据库操作演示(Visual C++编程 源代码)9.DAO数据库操作演示(Visual C++编程 源代码)9.DAO数据库操作演示(Visual C++编程 源代码)9.DAO数据库操作演示...

    Dao Jet数据库引擎

    这些数据库文件可以包含表、查询、窗体、报表、宏和模块等对象,使得非程序员也能通过直观的界面设计和操作数据库。 在使用Dao Jet数据库引擎时,需要注意以下几点: - 性能:虽然适用于小型应用,但相比现代的...

    用DAO操作数据库--数据库操作

    ### 用DAO操作数据库——数据库操作 #### 一、DAO体系结构与对象模型 ##### 1.1 DAO体系结构 **DAO(Data Access Objects)**是一种面向对象的数据库访问技术,它提供了一种统一的方式,使得开发人员能够通过标准...

    dao3.5数据库+引擎.zip

    它会将必要的DLL和OCX文件复制到系统目录,注册这些文件以便于其他应用程序能够调用DAO接口进行数据库操作。安装过程可能会涉及到设置环境变量,确保系统路径包含DAO的库文件,例如dbdao35.dll。此安装程序对于那些...

    工厂模式dao模式操作数据库小例子

    在这个“工厂模式DAO模式操作数据库小例子”中,我们可以预期看到以下结构: 1. 数据库连接配置:通常会有一个配置类或.properties文件来存储数据库连接信息,如URL、用户名和密码。 2. 数据库接口:定义了对数据库...

    Dao3.5数据库引擎

    DAO(Data Access Objects)是微软在早期开发的一种数据库访问技术,它是Microsoft Jet数据库引擎的一部分,主要用于与Access...在处理类似问题时,了解DAO的基本原理和操作步骤,对解决MCGS数据库连接问题至关重要。

    Dao金山词霸数据库代码

    2. SQL执行:这是数据库操作的核心,Dao金山词霸会提供一系列的函数或类,用于执行SQL查询、插入、更新和删除等操作。这些函数可能支持预编译的SQL语句,以提高执行速度和安全性。 3. 错误处理:良好的错误处理机制...

    dao3.5数据库安装文件

    DAO(Data Access Objects)是微软在早期开发的一种用于访问数据库的应用程序编程接口(API),它在Visual Basic 6和早期的Microsoft Office版本中被广泛使用。DAO 3.5是该技术的一个特定版本,适用于32位操作系统。...

    JAVA Dao 数据库操作

    Java DAO(Data Access Object)模式是Java编程中用于数据库操作的一种设计模式,它提供了一种在业务逻辑和数据库之间解耦的方式。DAO类是专门用来与数据库进行交互的,负责执行SQL语句,处理结果集,以及进行事务...

    DAO模式数据库操作源代码

    本例子是自己做的,,有很强的可读性。。代码使用率高。是用DAO模式设计的, 实现了对数据库的添加、删除、查询、更新等操作。。不懂的可以联系我:qq:420804832

    MFC DAO连接Access数据库

    本文将深入探讨如何使用MFC与DAO来连接和操作Access数据库。 首先,了解DAO的基本概念。DAO是一种面向对象的接口,它允许程序员直接与数据库进行交互,执行诸如读取、写入和更新数据等操作。在MFC中,DAO被封装在`...

    dao jet数据库引擎

    标题中的"DAO Jet数据库引擎"是指DAO接口与Jet数据库引擎的结合,用于处理和操作数据库。当你的计算机上缺失这个组件时,依赖DAO接口来访问Jet数据库的应用程序可能会出现问题,例如描述中提到的"无法对DAO/Jet db...

    vc++访问DAO数据库_DAO数据库访问_

    在本教程中,我们将深入探讨如何使用VC++通过DAO来访问和操作数据库。 1. **DAO基础**: DAO是一种面向对象的API,允许开发者直接与数据库进行通信。它包含了一系列的类,这些类代表了数据库、表、查询、字段等...

    C#分享辅助类:SQLite数据库操作(SQLiteDao)

    本篇文章将深入探讨如何利用C#创建一个名为`SQLiteDao`的辅助类来实现对SQLite数据库的操作。我们将讨论相关的类、方法以及如何使用它们来执行常见的数据库操作。 首先,`SQLiteDao`类是数据库操作的核心,通常包含...

    使用DAO访问数据库的例子(189KB)

    DAO的主要目的是为了简化数据库操作,提高代码的可测试性和可维护性。在这个例子中,我们将深入探讨如何使用DAO来访问数据库。 首先,DAO接口通常定义了所有对数据库进行操作的方法,例如查询、插入、更新和删除...

    Dao数据库工具类

    本文将详细介绍一个简单的Java DAO工具类,该类用于执行基本的数据库查询和更新操作。 #### 二、类结构与功能实现 1. **包声明**:`package com.book.dao;` - 这条语句指定了当前类所在的包名。在这个例子中,类...

    dao.zip_dao_java dao_java数据库连接_struts_struts dao

    标题"dao.zip_dao_java dao_java数据库连接_struts_struts dao"暗示了这个压缩包包含与DAO相关的内容,特别是关于Java中的数据库连接以及如何在Struts框架中应用DAO。 描述提到"java数据库连接,主要适用于struts...

Global site tag (gtag.js) - Google Analytics