package mtn.gfkd.ceip.jdbc;
import java.sql.Blob;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcOperations;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.support.rowset.ResultSetWrappingSqlRowSet;
import org.springframework.util.Assert;
import mtn.gfkd.ceip.dao.TreeDAO;
import mtn.gfkd.ceip.jdbc.support.QueryObject;
import mtn.gfkd.ceip.jdbc.support.QueryParam;
import mtn.gfkd.ceip.jdbc.support.QuerySqlParser;
import mtn.gfkd.ceip.jdbc.support.QueryWebParameter;
import mtn.gfkd.ceip.jdbc.support.QueryWebUtils;
import mtn.gfkd.ceip.model.TreeModel;
import mtn.gfkd.ceip.util.SqlUtil;
import mtn.gfkd.ceip.util.StringUtil;
/**
* 基于spring NamedParameterJdbcTemplate封装的jdbc操作
*
* 待补充的功能:TODO 1)、中间需要增加sql 函数的转换;日志、异常的处理 <br>
* 2)、另外结合实际需要直接给出xml数据格式
*
* @author 陈志平 chenzp
*
* @说明: web 应用基础平台
* @date Aug 1, 2006 4:57:47 PM
* @版权所有: All Right Reserved 2006-2008
*/
public class JdbcDAOImpl extends NamedParameterJdbcDaoSupport implements IJdbcDAO {
protected static Log log = LogFactory.getLog(JdbcDAOImpl.class);
public JdbcDAOImpl() {
}
public JdbcOperations getJdbcOperations() {
return getNamedParameterJdbcTemplate().getJdbcOperations();
}
/**
* 直接执行一条sql
*
* @param sql
*/
public void execute(String sql) {
Assert.hasText(sql, "sql must be not null");
getJdbcOperations().execute(sql);
}
/**
* 可直接运行的sql语句数组
*
* @param sql
* update ca_user set a ='newea' ,b=3 where c = 5
* @return
*/
public int[] batchUpdate(String[] sql) {
return getJdbcOperations().batchUpdate(sql);
}
/**
* 注意:这里的sql不支持 命名参数,只能用 ? 代替
*
* @param sql
* update ca_user set a =? ,b=? where c = ?
* @param dataSet
* List<String[]>
* @return
*/
public int[] batchUpdate(String sql, final List<String[]> dataSet) {
BatchPreparedStatementSetter setter = new BatchPreparedStatementSetter() {
public int getBatchSize() {
return dataSet.size();
}
public void setValues(PreparedStatement psmt, int i) {
String[] obj = dataSet.get(i);
try {
for (int j = 0; j < obj.length; j++) {
psmt.setString(j + 1, obj[j]);
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
return getJdbcOperations().batchUpdate(sql, setter);
}
/**
* 更新sql语句的执行,没有参数的情况
*
* @param sql
* @return 受影响的行数
*/
public boolean update(String sql) {
Assert.hasText(sql, "sql must be not null");
return getJdbcOperations().update(sql) > 0;
}
/**
* 只有一个参数更新语句执行
*
* @param sql
* :更新语句
* @param paramMap
* :命名参数
* @return 受影响的行数
*/
public boolean update(String sql, String namedParam, Object value) {
Map<String, Object> paramMap = new HashMap<String, Object>(1);
paramMap.put(StringUtil.strnull(namedParam), value);
return update(sql, paramMap);
}
/**
* 更新语句执行
*
* @param sql
* :更新语句
* @param paramMap
* :命名参数
* @return 受影响的行数
*/
public boolean update(String sql, Map paramMap) {
// sql = DBSqlParse.parseSql(sql, paramMap);
getLogInfo(sql, paramMap);
return getNamedParameterJdbcTemplate().update(sql, new MapSqlParameterSource(paramMap)) > 0;
}
/**
* 单个参数的情况
*
* @param sql
* select count(*) from demo where a =: a and b =: b<br>
* select nid from demo where a =: a and b =: b ;其中nid 为数值型
* @param namedParam
* @param value
* @return 返回一个整数值
*/
public int queryForInt(String sql, String namedParam, Object value) {
Map<String, Object> paramMap = new HashMap<String, Object>(1);
paramMap.put(StringUtil.strnull(namedParam), value);
return queryForInt(sql, paramMap);
}
/**
* 查询单列(类型为整型),返回一个整数值<br>
* 多个参数的情况
*
* @param sql
* :select count(*) from demo where a =: a and b =: b<br>
* select nid from demo where a =: a and b =: b ;其中nid 为数值型
* @param paramMap
* 命名参数为key;参数值为value的Map
* @return 整数值
*/
public int queryForInt(String sql, Map paramMap) {
getLogInfo(sql, paramMap);
int i = -1;
try {
i = getNamedParameterJdbcTemplate().queryForInt(sql, new MapSqlParameterSource(paramMap));
} catch (EmptyResultDataAccessException ex) {
logger.error("忽略此类错误[EmptyResultDataAccessException],允许查询为空时,返回-1!");
}
return i;
}
/**
* 没有参数的情况,查询单列(类型为整型),返回一个整数值<br>
*
* @param sql
* :select count(*) from demo where a =: a and b =: b<br>
* select nid from demo where a =: a and b =: b ;其中nid 为数值型
* @return 整数值
*/
public int queryForInt(String sql) {
return queryForInt(sql, null);
}
/**
* 查询单列(类型为整型),返回一个长整数值<br>
* 单个参数的情况
*
* @param sql
* :select count(*) from demo where a =: a <br>
* select nid from demo where a =: a ;其中nid 为数值型
* @param namedParam
* 命名参数
* @param value
* 参数值
* @return
*/
public long queryForLong(String sql, String namedParam, Object value) {
Map<String, Object> paramMap = new HashMap<String, Object>(1);
paramMap.put(StringUtil.strnull(namedParam), value);
return queryForLong(sql, paramMap);
}
/**
* 查询单列(类型为整型),返回一个整数值<br>
*
* @param sql
* :select count(*) from demo where a =: a and b =: b <br>
* select nid from demo where a =: a and b =: b ;其中nid 为数值型
* @param paramMap
* 命名参数为key;参数值为value的Map
* @return 长整数值
*/
public long queryForLong(String sql, Map paramMap) {
getLogInfo(sql, paramMap);
long l = -1L;
try {
l = getNamedParameterJdbcTemplate().queryForLong(sql, new MapSqlParameterSource(paramMap));
} catch (EmptyResultDataAccessException ex) {
logger.error("忽略此类错误[EmptyResultDataAccessException],允许查询为空时,返回-1!");
}
return l;
}
/**
* 查询单列(类型为整型),返回一个整数值<br>
*
* @param sql
* :select count(*) from demo where a =: a and b =: b <br>
* select nid from demo where a =: a and b =: b ;其中nid 为数值型
* @return 长整数值
*/
public long queryForLong(String sql) {
return queryForLong(sql, null);
}
/**
* 只取一列的值
*
* @param sql
* :select cname from demo where a =: a and b =: b <br>
* @param paramMap
*
jone33
- 粉丝: 81
- 资源: 469
最新资源
- 基于 Qt 的仓库管理系统详细文档+全部资料+高分项目.zip
- 基于 Qt 的系统字体管理器详细文档+全部资料+高分项目.zip
- 基于Qt 与 FluentUI 的操作系统实验应用详细文档+全部资料+高分项目.zip
- 基于Qt 的一个上位机 水产养殖自动控制系统详细文档+全部资料+高分项目.zip
- 基于QT,使用c++写的简单的学生管理系统详细文档+全部资料+高分项目.zip
- 基于QT、ARM开发板、Linux系统并对接百度AI的停车管理系统详细文档+全部资料+高分项目.zip
- 基于QT、sqlite数据库实现员工信息管理系统详细文档+全部资料+高分项目.zip
- 基于QT、MySQL开发的酒店管理系统(c++课设)详细文档+全部资料+高分项目.zip
- (176181450)利用Servlet实现的在线考试系统.zip
- kotlin库jar包资源
- 基于QT+MySQL+C++实现的机房管理系统详细文档+全部资料+高分项目.zip
- 基于QT+Mysql的医院预约管理系统详细文档+全部资料+高分项目.zip
- 基于Qt+MySQL的机房收费管理系统详细文档+全部资料+高分项目.zip
- 基于Qt-qvfb开发的电子点菜系统。详细文档+全部资料+高分项目.zip
- (176818240)基于Servlet+JSP+JavaBean的图书管理系统 .zip
- 基于QT+SQL数据库开发的教室管理系统详细文档+全部资料+高分项目.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈