一次执行批量sql的方法
SimpleJdbcTemplateDaoImpl .class
- /**
- * Copyright (C) DADICOM, Inc.
- */
- package com.dadi.oa.dao.impl;
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.ResultSetMetaData;
- import java.sql.SQLException;
- import java.sql.Statement;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.springframework.dao.DataAccessException;
- import org.springframework.jdbc.core.BatchPreparedStatementSetter;
- import org.springframework.jdbc.core.CallableStatementCallback;
- import org.springframework.jdbc.core.CallableStatementCreator;
- import org.springframework.jdbc.core.JdbcTemplate;
- import org.springframework.jdbc.core.PreparedStatementCreator;
- import org.springframework.jdbc.core.support.JdbcDaoSupport;
- import org.springframework.jdbc.support.GeneratedKeyHolder;
- import org.springframework.jdbc.support.KeyHolder;
- import com.dadi.oa.dao.SimpleJdbcTemplateDao;
- /**
- * @author shensheng
- *
- * Mar 15, 2009 7:00:16 PM
- */
- public class SimpleJdbcTemplateDaoImpl extends JdbcDaoSupport implements SimpleJdbcTemplateDao {
- /* (non-Javadoc)
- * @see com.dadi.chr.dao.SimpleJdbcTemplateDao#queryForList(java.lang.String)
- */
- public List<Map<String, Object>> queryForList(String sql) throws Exception {
- return this.getJdbcTemplate().queryForList(sql);
- }
- public List<Map<String, Object>> queryForList(String sql,Object...params){
- return this.getJdbcTemplate().queryForList(sql, params);
- }
- /* (non-Javadoc)
- * @see com.dadi.chr.dao.SimpleJdbcTemplateDao#update(java.lang.String)
- */
- public Integer update(String sql) throws Exception {
- return this.getJdbcTemplate().update(sql);
- }
- /* (non-Javadoc)
- * @see com.dadi.chr.dao.SimpleJdbcTemplateDao#update(java.lang.String,Object[])
- */
- public Integer update(String sql, Object... params) {
- if(params.length == 0)return getJdbcTemplate().update(sql);
- return getJdbcTemplate().update(sql,params);
- }
- public Long getCountBySql(String sql, Object...params) {
- return getJdbcTemplate().queryForLong(sql,params);
- }
- public void batchSaveOrUpdate(String sql,final List<Object[]> params) {
- getJdbcTemplate().batchUpdate(sql, new BatchPreparedStatementSetter() {
- public void setValues(PreparedStatement pstat, int i) throws SQLException {
- Object[] ps = params.get(i);
- for(int p = 0 ; p < ps.length ; p++){
- pstat.setObject(p + 1, ps[p]);
- }
- }
- public int getBatchSize() {
- return params.size();
- }
- });
- }
- @SuppressWarnings("unchecked")
- public Map<String,Object> executeStoreProc(final String sql,final Object[] paramValues,final int[] outParamTypes){
- Map<String,Object> retMap = (Map<String,Object>)this.getJdbcTemplate().execute(new CallableStatementCreator() {
- public CallableStatement createCallableStatement(final Connection arg0) throws SQLException {
- final CallableStatement cs = arg0.prepareCall(sql);
- return cs;
- }
- }, new CallableStatementCallback() {
- public Object doInCallableStatement(final CallableStatement cs) throws SQLException, DataAccessException {
- Map<String,Object> resultMap = new HashMap<String,Object>();
- final List<List<Map<String,Object>>> allRsLst = new ArrayList<List<Map<String,Object>>>();
- if(paramValues != null){
- for(int i = 0 ; i < paramValues.length ; i++){
- cs.setObject(i + 1, paramValues[i]);
- }
- }
- if(outParamTypes != null){
- for(int i = 0 ; i < outParamTypes.length ;i++){
- cs.registerOutParameter(paramValues.length + i + 1, outParamTypes[i]);
- }
- }
- cs.execute();
- ResultSet rs = cs.getResultSet();
- while (rs == null && cs.getMoreResults()) {
- rs = cs.getResultSet();
- }
- if(rs == null){
- rs = cs.executeQuery();
- }
- while (true) {
- if (rs != null) {
- List<Map<String,Object>> rsLst = new ArrayList<Map<String,Object>>();
- ResultSetMetaData rsmd = rs.getMetaData();
- int count = rsmd.getColumnCount();
- while (rs.next()) {
- Map map = new HashMap();
- for (int i = 1; i <= count; i++) {
- final String key = rsmd.getColumnLabel(i);
- final Object value = rs.getObject(key);
- map.put(key, value);
- }
- rsLst.add(map);
- }
- allRsLst.add(rsLst);
- }
- if (cs.getMoreResults()) {
- rs.close();
- rs = cs.getResultSet();
- } else {
- if(rs != null){
- rs.close();
- }
- break;
- }
- }
- resultMap.put("rs", allRsLst);
- if(outParamTypes != null){
- Map<Integer,Object> map = new HashMap<Integer,Object>();
- for(int i = 0 ; i < outParamTypes.length ;i++){
- Integer key = paramValues.length + i + 1;
- map.put(key,cs.getObject(key));
- }
- resultMap.put("out", map);
- }
- return resultMap;
- }
- });
- return retMap;
- }
- @Override
- public Integer updateGetKey(final String sql) throws Exception {
- KeyHolder keyHolder = new GeneratedKeyHolder();
- getJdbcTemplate().update(new PreparedStatementCreator() {
- @Override
- public PreparedStatement createPreparedStatement(Connection arg0)
- throws SQLException {
- PreparedStatement ps = arg0.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
- return ps;
- }
- }, keyHolder);
- return keyHolder.getKey().intValue();
- }
- @Override
- public void batchSaveOrUpdate(String[] sqls) {
- getJdbcTemplate().batchUpdate(sqls);
- }
- }
- package com.dadi.oa.service.impl;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import com.dadi.oa.dao.SimpleHibernateTempleDao;
- import com.dadi.oa.dao.SimpleJdbcTemplateDao;
- import com.dadi.oa.service.ReadExeclDataService;
- import com.dadi.oa.system.ConstantsUtil;
- import com.dadi.oa.util.ExeclReader;
- import com.sun.star.uno.RuntimeException;
- public class ReadExeclDataServiceImpl implements ReadExeclDataService{
- private Log logger = LogFactory.getLog(this.getClass());
- private SimpleJdbcTemplateDao jdbcDao;
- private SimpleHibernateTempleDao hbnDao;
- public void setJdbcDao(SimpleJdbcTemplateDao jdbcDao) {
- this.jdbcDao = jdbcDao;
- }
- public void setHbnDao(SimpleHibernateTempleDao hbnDao) {
- this.hbnDao = hbnDao;
- }
- @Override
- public void saveGatherDataMsg(ExeclReader reader,
- HashMap<String, String> inputMap) {
- //HashMap retMap = new HashMap();
- try {
- String title = inputMap.get("title");
- String userid = inputMap.get("userid");
- Integer dataMsgId = jdbcDao.
- updateGetKey("INSERT INTO dbo.t_dataPublish " +
- " ( creatorId , "+
- " createDate , "+
- " title , "+
- " remark , "+
- " publishstatus , "+
- " deleteflag "+
- " ) "+
- "VALUES ( "+userid+" , "+
- " GETDATE() , " +
- " '"+title+"' , "+
- " '' , "+
- " 0 , "+
- " 0 "+
- " )");
- List headerData = reader.getHeaderData();
- inputMap.put("dataMsgId", String.valueOf(dataMsgId));
- Integer[] datacolumnids = new Integer[headerData.size()];
- for (int i = 0 ; i < headerData.size() ; i++) {
- HashMap<String, String> cellMap = (HashMap<String, String>) headerData.get(i);
- Integer datacolumnid = jdbcDao
- .updateGetKey("INSERT dbo.t_dataPublishColumn "+
- " ( t_dataPublish_id , "+
- " columnName , " +
- " columnType "+
- " ) " +
- "VALUES (" +
- " "+dataMsgId+", "+
- " '"+cellMap.get("val")+"' , "+
- " "+ConstantsUtil.gatherDataColumnStatus.get("COMMON_COLUMN")+
- " )");
- cellMap.put("datacolumnid", String.valueOf(datacolumnid));
- datacolumnids[i] = datacolumnid;
- }
- ArrayList<String> datadetailsqls = new ArrayList<String>();
- for (int i = 1; i < reader.getDataMap().size(); i++) {
- ArrayList rowData = (ArrayList) reader.getDataMap().get(i);
- for (int j = 0; j < rowData.size(); j++) {
- HashMap<String, String> cellMap = (HashMap<String, String>) rowData.get(j);
- datadetailsqls.add("INSERT INTO dbo.t_dataPublishDetail "+
- " ( t_dataPublishColumn_id , "+
- " rownum , "+
- " cellValue "+
- " ) "+
- " VALUES ( "+datacolumnids[j]+" , "+
- " "+cellMap.get("rowNum")+" , "+
- " '"+cellMap.get("val")+"' "+
- " )");
- }
- }
- String[] batchsqls = new String[datadetailsqls.size()];
- jdbcDao.batchSaveOrUpdate(datadetailsqls.toArray(batchsqls));
- } catch (Exception e) {
- e.printStackTrace();
- logger.error("===========ERROR:ReadExeclDataServiceImpl.saveGatherDataMsg()");
- throw new RuntimeException("服务器异常!!!");
- }
- //retMap.put("resultStr", resultStr);
- }
- }
一次执行批量sql的方法的更多相关文章
- 执行大SQL脚本方法
当我们需要在SQLServer数据库里面执行一个大的文件时,会发现数据库根本无法打开该脚本文件,原因是因为查询分析器只能执行100M以内的文件,所以脚本过大就会造成内存溢出.此时我们可以使用osql工 ...
- 在C#中执行带有GO的批量sql语句
引用 思海网络 在用C#中调用ADO执行批量SQL语句的时候,会出现无法识别GO语句的错误.这个时候,我们以GO语句为分割点,把整个批量语句分割成N块独立的SQL语句代码块(不包含GO语句),然后再 ...
- Django的F查询和Q查询,事务,ORM执行原生SQL
F查询和Q查询,事务及其他 F查询和Q查询 F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个我们自己设定的常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django ...
- 在Oracle中执行动态SQL的几种方法
转载:在Oracle中执行动态SQL的几种方法 以下为内容留存: 在Oracle中执行动态SQL的几种方法 在一般的sql操作中,sql语句基本上都是固定的,如:SELECT t.empno,t.en ...
- 九、dbms_ddl(提供了在PL/SQL块中执行DDL语句的方法)
1.概述 作用:提供了在PL/SQL块中执行DDL语句的方法,并且也提供了一些DDL的特殊管理方法. 2.包的组成 1).alter_compile说明:用于重新编译过程.函数和包语法:dbms_dd ...
- thinkPHP框架中执行原生SQL语句的方法
这篇文章主要介绍了thinkPHP框架中执行原生SQL语句的方法,结合实例形式分析了thinkPHP中执行原生SQL语句的相关操作技巧,并简单分析了query与execute方法的使用区别,需要的朋友 ...
- 【转】MySQL批量SQL插入各种性能优化
原文:http://mp.weixin.qq.com/s?__biz=MzA5MzY4NTQwMA==&mid=403182899&idx=1&sn=74edf28b0bd29 ...
- mybatis执行批量更新update
Mybatis的批量插入这里有http://ljhzzyx.blog.163.com/blog/static/38380312201353536375/.目前想批量更新,如果update的值是相同的话 ...
- 如何 ︰ 执行批量更新和插入使用.NET 提供程序在 C#.NET OpenXML
https://support.microsoft.com/zh-cn/kb/315968 如何 ︰ 执行批量更新和插入使用.NET 提供程序在 C#.NET OpenXML Email Prin ...
随机推荐
- 【独立开发人员er Cocos2d-x实战 001】csb文件导出和载入
使用cocos studio进行资源文件导出: 然后在cocosproject中进行载入csb文件: auto myLayout = CSLoader::createNode("/res/ ...
- 【docker】挂载web应用
现在将webapps目录挂载在宿主机目录,方便运维 docker run -p 8090:8080 --name app -v /usr/app:/usr/local/tomcat/webapps d ...
- 【Linux】echo命令
用途 echo是用于终端打印的基本命令 说明 只需要使用带双引号的文本,结合echo命令就可以将文本打印在终端. [root@localhost test]# echo "Hello Wor ...
- Python之str方法
# -*- coding: utf-8 -*- #python 27 #xiaodeng #Python之str方法 #http://python.jobbole.com/82655/ #str为一个 ...
- linux write系统调用如何实现
在Linux下我们在使用设备的时候,都会用到write这个函数,通过这个函数我们可以象使用文件那样向设备传送数据.可是为什么用户使用write函数就可以把数据写到设备里面去,这个过程到底是怎么实现的呢 ...
- Linux内核(7) - 设备模型(上)
对于驱动开发来说,设备模型的理解是根本,毫不夸张得说,理解了设备模型,再去看那些五花八门的驱动程序,你会发现自己站在了另一个高度,从而有了一种俯视的感觉,就像凤姐俯视知音和故事会,韩峰同志俯视女下属. ...
- .Net程序猿玩转Android开发---(11)页面跳转
在不论什么程序开发中,都会遇到页面之间跳转的情况,Android开发也不例外.这一节,我们来认识下Android项目中如何进行页面跳转.页面跳转分为有參数和无參数页面跳转,已经接受还有一个页面的返回值 ...
- nginx https ssl 设置受信任证书[转然哥]
nginx https ssl 设置受信任证书[原创] 1. 安装nginx 支持ssl模块 http://nginx.org/en/docs/configure.html yum -y instal ...
- ubuntu 16.04 apt-get 更新使用中科大镜像源
1 备份系统配置 sudo cp /etc/apt/sources.list /etc/apt/source.list.bak 2 编辑配置 sudo vi /etc/apt/sources.list ...
- spring中AOP
1 AOP 的功能是把横切的问题(如性能监视.事务管理)模块化.AOP的核心是连接点模型,他提供在哪里发生横切. Spring AOP 的底层是通过使用 JDK 或 CGLib 动态代理技术为目标 b ...