可以拿去用咯~
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数据库操作演示...
这些数据库文件可以包含表、查询、窗体、报表、宏和模块等对象,使得非程序员也能通过直观的界面设计和操作数据库。 在使用Dao Jet数据库引擎时,需要注意以下几点: - 性能:虽然适用于小型应用,但相比现代的...
### 用DAO操作数据库——数据库操作 #### 一、DAO体系结构与对象模型 ##### 1.1 DAO体系结构 **DAO(Data Access Objects)**是一种面向对象的数据库访问技术,它提供了一种统一的方式,使得开发人员能够通过标准...
它会将必要的DLL和OCX文件复制到系统目录,注册这些文件以便于其他应用程序能够调用DAO接口进行数据库操作。安装过程可能会涉及到设置环境变量,确保系统路径包含DAO的库文件,例如dbdao35.dll。此安装程序对于那些...
在这个“工厂模式DAO模式操作数据库小例子”中,我们可以预期看到以下结构: 1. 数据库连接配置:通常会有一个配置类或.properties文件来存储数据库连接信息,如URL、用户名和密码。 2. 数据库接口:定义了对数据库...
DAO(Data Access Objects)是微软在早期开发的一种数据库访问技术,它是Microsoft Jet数据库引擎的一部分,主要用于与Access...在处理类似问题时,了解DAO的基本原理和操作步骤,对解决MCGS数据库连接问题至关重要。
2. SQL执行:这是数据库操作的核心,Dao金山词霸会提供一系列的函数或类,用于执行SQL查询、插入、更新和删除等操作。这些函数可能支持预编译的SQL语句,以提高执行速度和安全性。 3. 错误处理:良好的错误处理机制...
DAO(Data Access Objects)是微软在早期开发的一种用于访问数据库的应用程序编程接口(API),它在Visual Basic 6和早期的Microsoft Office版本中被广泛使用。DAO 3.5是该技术的一个特定版本,适用于32位操作系统。...
Java DAO(Data Access Object)模式是Java编程中用于数据库操作的一种设计模式,它提供了一种在业务逻辑和数据库之间解耦的方式。DAO类是专门用来与数据库进行交互的,负责执行SQL语句,处理结果集,以及进行事务...
本例子是自己做的,,有很强的可读性。。代码使用率高。是用DAO模式设计的, 实现了对数据库的添加、删除、查询、更新等操作。。不懂的可以联系我:qq:420804832
本文将深入探讨如何使用MFC与DAO来连接和操作Access数据库。 首先,了解DAO的基本概念。DAO是一种面向对象的接口,它允许程序员直接与数据库进行交互,执行诸如读取、写入和更新数据等操作。在MFC中,DAO被封装在`...
标题中的"DAO Jet数据库引擎"是指DAO接口与Jet数据库引擎的结合,用于处理和操作数据库。当你的计算机上缺失这个组件时,依赖DAO接口来访问Jet数据库的应用程序可能会出现问题,例如描述中提到的"无法对DAO/Jet db...
在本教程中,我们将深入探讨如何使用VC++通过DAO来访问和操作数据库。 1. **DAO基础**: DAO是一种面向对象的API,允许开发者直接与数据库进行通信。它包含了一系列的类,这些类代表了数据库、表、查询、字段等...
本篇文章将深入探讨如何利用C#创建一个名为`SQLiteDao`的辅助类来实现对SQLite数据库的操作。我们将讨论相关的类、方法以及如何使用它们来执行常见的数据库操作。 首先,`SQLiteDao`类是数据库操作的核心,通常包含...
DAO的主要目的是为了简化数据库操作,提高代码的可测试性和可维护性。在这个例子中,我们将深入探讨如何使用DAO来访问数据库。 首先,DAO接口通常定义了所有对数据库进行操作的方法,例如查询、插入、更新和删除...
本文将详细介绍一个简单的Java DAO工具类,该类用于执行基本的数据库查询和更新操作。 #### 二、类结构与功能实现 1. **包声明**:`package com.book.dao;` - 这条语句指定了当前类所在的包名。在这个例子中,类...
标题"dao.zip_dao_java dao_java数据库连接_struts_struts dao"暗示了这个压缩包包含与DAO相关的内容,特别是关于Java中的数据库连接以及如何在Struts框架中应用DAO。 描述提到"java数据库连接,主要适用于struts...