一次执行批量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 ...
随机推荐
- Oracle内存管理(之二)
[深入解析--eygle] 学习笔记 1.2.2 UGA和CGA UGA(用户全局区)由用户会话数据.游标状态和索引区组成.在共享server模式下,一个共享服务进程被多个用户进程共享,此时UGA是S ...
- Linux 系统sudo命令
Linux系统中有许多的系统命令和服务为了安全性考虑,因此只有root超级用户才可以去使用.如果普通用户需要做此类操作,则可以使用su - 命令(减号(-)指完全切换到新的用户,即把环境变量信息也变更 ...
- 在Ubuntu16.04 64bit上安装sublime text 3
安装sublime text 3 根据官网上提供的安装说明 https://www.sublimetext.com/docs/3/linux_repositories.html 进行安装, 首先是 ...
- 微信小程序条码、二维码生成模块
代码地址如下:http://www.demodashi.com/demo/13994.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 【微信小程序】用户首次进入小程序拒绝授权,如何再次调用授权页面,获取用户信息userInfo
前言:微信小程序的app.js里面,最少有2个接口,一个wx.login:一个是wx.getUserInfo: 前者得到腾讯给我们的微信用户唯一的code,通过code获取openid,这个不需要用户 ...
- java内存泄露问题
内存泄露是指一个不再被程序使用的对象或变量还在内存中占用存储空间. 在Java语言中,判断一个内存空间是否符合垃圾回收的标准有两个: ①给对象赋予了空值null,以后再没有使用过: ②给对象赋予了新值 ...
- [译]为什么Vue不支持templateURL
原文链接 Vue的新用户最常问的一个问题,特别是以前使用Angular的用户,是"我可以使用" templateURL吗?这个问题我回答过很多次,现在写一个统一回复. 在Angul ...
- RabbitMQ消息队列(三):任务分发机制[转]
在上篇文章中,我们解决了从发送端(Producer)向接收端(Consumer)发送“Hello World”的问题.在实际的应用场景中,这是远远不够的.从本篇文章开始,我们将结合更加实际的应用场景来 ...
- NSUserDefault 的使用
1.NSUserDefault的使用: 作用:NSUserDefaults类提供了一个与默认系统进行交互的编程接口.NSUserDefaults对象是用来保存,恢复应用程序相关的偏好设置,配置数据等等 ...
- 理解over()函数
1.1.两个order by的执行时机分析函数(以及与其配合的开窗函数over())是在整个sql查询结束后(sql语句中的order by的执行比较特殊)再进行的操作, 也就是说sql语句中的ord ...