一次执行批量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 ...
随机推荐
- 11个强大的 Visual Studio 调试技能
简介 调试是软件开辟周期中很首要的一项目组.它具有挑衅性,同时也很让人困惑和懊恼.总的来说,对于稍大一点的法度,调试是不成避免的.比来几年,调试对象的成长让很多调试任务变的越来越简单和省时. 这篇文章 ...
- java Socket Tcp 浏览器和服务器(二)
package cn.itcast.net.p2.ie_server; import java.io.IOException;import java.io.InputStream;import jav ...
- HDUOJ-----4512吉哥系列故事——完美队形I(LCIS)
吉哥系列故事——完美队形I Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- HDUOJ---(4708)Rotation Lock Puzzle
Rotation Lock Puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- Oracle用同义词可以不使用用户名.表名查询表 Oracle 创建synonym
一般在PL/SQL下,Oracle 用户查询其他用户的表一定要使用user.table格式才能查询,每次用户名.表名嫌麻烦的话.可以使用同义词,意思将user.table访问格式改成table格式即可 ...
- Android开发之Button事件实现方法的总结
下面介绍Button事件实现的两种方法 main.xml <?xml version="1.0" encoding="utf-8"?> <Li ...
- 《JAVA与模式》之参考资料
1.书籍 <JHead First 设计模式(中文版)> <JAVA与模式> <大话设计模式> 2.连接地址 http://blog.csdn.net/jason0 ...
- Win8.1设置ftp服务器并设定用户操作权限的详细教程
http://wenku.baidu.com/link?url=VTDLnDa_yfQN9OldjVnYsOBf7UdIj76QjaLDyHP-I0A6iFEfzB8EyBf9uztwm2JDXlFL ...
- Python max() 方法
描述 Python max() 方法返回字符串中最大的字母(26个字母中最大的是Z). 语法 max() 方法语法: max(S) 参数 S -- 字符串. 返回值 返回字符串中最大的字母. 实例 以 ...
- W5500初始化过程