`

java调用sqlserver存储过程

 
阅读更多

package com.senlany.service.impl.k3;

import java.io.IOException;
import java.io.OutputStream;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.senlany.comm.ConnUtil;
import com.senlany.mapper.k3.FinancialReportMapper;
/**
 * @author Amos   E-mail : zhangxiaopeng@wlspjt.com
 *    @version 创建时间:2015年5月28日 下午2:36:37
 *  @description
 *  因程序未按照标准java程序结构创建
 *  现将程序逻辑放在service中
 */
@Service
public class FinancialReportService {
     private static Log log = LogFactory.getLog(FinancialReportService.class);     
    @Autowired
    private FinancialReportMapper financialReportMapper;   

    /**
     * @param map
     * @return
     */
    public List<Map> getList(Map map){
        return financialReportMapper.getList(map);
    }
   
    /**
     * 导出财务报表
     * @param begindate
     * @param enddate
     */
    public void exportExcel(HttpServletRequest request, HttpServletResponse response){
       
        Connection conn = null;
        Statement st  = null;
        ResultSet rs = null;
        conn = ConnUtil.getConn();
        WritableWorkbook workbook = null;
        WritableSheet sheet = null;
        Label label = null;
        Label label0 = null;
       
       
        try {
       
            /**
             * 此程序块必须放在此处执行
             * 因此处调用函数中有批量更新操作
             */
             conn.setAutoCommit(false);
             st = (Statement) conn.createStatement();
             st.addBatch("dbo.WL_F_MAIN");
             st.executeBatch();
             conn.commit();
             
             //查询全局临时表
             CallableStatement  cs = conn.prepareCall("SELECT * FROM ##financial_report_table");    
             rs = cs.executeQuery();  
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
 
        // 创建Excel表
        try {
            /**
             * 将工作薄输出至前台文件输出流
             */
           String contentType = "application/vnd.ms-excel";
           response.reset();
           response.setContentType(contentType);
           response.setHeader("Content-Disposition", "attachment; filename=\"" + new String("休闲营销财务报表.xls".getBytes("gb2312"), "ISO8859-1") + "\"");
           OutputStream out = response.getOutputStream();              
           workbook = Workbook.createWorkbook(out);
            
             // 创建Excel表中的sheet
            sheet = workbook.createSheet("First Sheet", 0);
         
            // 向Excel中添加数据
            ResultSetMetaData rsmd = rs.getMetaData();
            int columnCount = rsmd.getColumnCount();
            String colName = null;
            int row = 2;
           
            int income_count = 0;//收入计数
            int inc_cat_xxd_ct = 0;//收入_休闲豆计数
            int inc_cat_rsb_ct = 0;//收入_肉松饼计数
            int inc_cat_dxm_ct = 0;//收入_点心面计数
           
            int gift_count = 0;//搭赠计数
            int gif_cat_xxd_ct = 0;//搭赠_休闲豆计数
            int gif_cat_rsb_ct = 0;//搭赠_肉松饼计数
            int gif_cat_dxm_ct = 0;//搭赠_点心面计数
           
            int fee_count = 0;//运费计数
         
            // 添加标题
            for (int i = 0; i < columnCount; i++) {
                colName = rsmd.getColumnName(i + 1);
                if("FCustID".equals(colName)){
                    colName = "客户编号";
                    label = new Label(i, 0, colName);
                }else if("BIGAREA".equals(colName)){
                    colName = "大区";
                    label = new Label(i, 0, colName);
                }else if("AREAMANAGER".equals(colName)){
                    colName = "大区经理";
                    label = new Label(i, 0, colName);
                }else if("PROVINCE".equals(colName)){
                    colName = "省区";
                    label = new Label(i, 0, colName);
                }else if("PROVINCEMANAGER".equals(colName)){
                    colName = "省区经理";
                    label = new Label(i,0, colName);
                }else if("CLIENT".equals(colName)){
                    colName = "客户";
                    label = new Label(i,0, colName);
                }else if("SALESMAN".equals(colName)){
                    colName = "业务员";
                    label = new Label(i,0, colName);
                } else if("DATE".equals(colName)){
                    colName = "日期";
                    label = new Label(i, 0, colName);
                }else{
                    if(colName.contains("QUANTITY")){
                        label = new Label(i, row+1, "数量");
                        sheet.addCell(label);
                    }else if(colName.contains("PRICE")){
                        label = new Label(i, row+1, "单价");
                        sheet.addCell(label);
                    }else if(colName.contains("AMOUNT")){
                        label = new Label(i, row+1, "金额");
                        sheet.addCell(label);
                    }
                    label = new Label(i, row, colName);
                }    
               
                if(colName.endsWith("0")){
                        income_count++;
                        if(colName.startsWith("xxd")){
                            inc_cat_xxd_ct ++;
                        }else if(colName.startsWith("rsb")){
                            inc_cat_rsb_ct ++;
                        }else{
                            inc_cat_dxm_ct ++;
                        }
                       
                }else if(colName.endsWith("1")){
                        gift_count++;
                        if(colName.startsWith("xxd")){
                            gif_cat_xxd_ct ++;
                        }else if(colName.startsWith("rsb")){
                            gif_cat_rsb_ct ++;
                        }else{
                            gif_cat_dxm_ct ++;
                        }
                }else if(colName.endsWith("3")){
                        fee_count++;
                }
                log.debug("标题:"+i+"---"+row +"---"+ colName);
                sheet.addCell(label);
            }
            /**
             * 单元格合并各参数含义
             * mergeCells(startColNum, startRowNum, endColNum, endRowNum);
             */
            sheet.mergeCells(0, 0, 0, 3);
            sheet.mergeCells(1, 0, 0, 3);
            sheet.mergeCells(2, 0, 0, 3);
            sheet.mergeCells(3, 0, 0, 3);
            sheet.mergeCells(4, 0, 0, 3);
            sheet.mergeCells(5 ,0, 0, 3);
            sheet.mergeCells(6, 0, 0, 3);
            sheet.mergeCells(7, 0, 0, 3);
           
            sheet.mergeCells(8, 0,7+income_count, 0);
            label = new Label(8, 0, "销售收入");
            sheet.addCell(label);
            sheet.mergeCells(8, 1,7+inc_cat_xxd_ct,1);
            label = new Label(8,1, "休闲豆");
            sheet.addCell(label);
            sheet.mergeCells(8+inc_cat_xxd_ct, 1,7+inc_cat_xxd_ct+inc_cat_rsb_ct,1);
            label = new Label(8+inc_cat_xxd_ct, 1, "肉松饼");
            sheet.addCell(label);
            sheet.mergeCells(8+inc_cat_xxd_ct+inc_cat_rsb_ct, 1,7+inc_cat_xxd_ct+inc_cat_rsb_ct+inc_cat_dxm_ct,1);
            label = new Label(8+inc_cat_xxd_ct+inc_cat_rsb_ct, 1, "点心面");
            sheet.addCell(label);
           
            sheet.mergeCells(8+income_count, 0,7+income_count+gift_count,0);
            label = new Label(8+income_count, 0, "搭赠");
            sheet.addCell(label);
            sheet.mergeCells(8+income_count, 1,7+income_count+gif_cat_xxd_ct, 1);
            label = new Label(8+income_count, 1, "休闲豆");
            sheet.addCell(label);
            sheet.mergeCells(8+income_count+gif_cat_xxd_ct, 1,7+income_count+gif_cat_xxd_ct+gif_cat_rsb_ct,1);
            label = new Label(8+income_count+gif_cat_xxd_ct, 1, "肉松饼");
            sheet.addCell(label);
            sheet.mergeCells(8+income_count+gif_cat_xxd_ct+gif_cat_rsb_ct, 1,7+income_count+gif_cat_xxd_ct+gif_cat_rsb_ct+gif_cat_dxm_ct,1);
            label = new Label(8+income_count+gif_cat_xxd_ct+gif_cat_rsb_ct, 1, "点心面");
            sheet.addCell(label);
           
            sheet.mergeCells(8+income_count+gift_count, 0,7+income_count+gift_count+fee_count,0);
            label = new Label(8+income_count+gift_count, 0, "运费");
            sheet.addCell(label);
            row += 2;
//               row ++;
            log.debug("写入标题成功");
            while (rs.next()) {
                for (int i = 0; i < columnCount; i++) {
                    label = new Label(i, row, rs.getString(i + 1));
                    log.debug("行:"+i+"---"+row +"---"+ rs.getString(i+1));
                    sheet.addCell(label);
                }
                row++;
            }
            log.debug("写入内容成功");
            // 关闭文件
            workbook.write();
            workbook.close();
            log.info("数据成功写入Excel");
        } catch (SQLException e) {
              log.debug(e.getMessage());
        } catch (RowsExceededException e) {
              log.debug(e.getMessage());
        } catch (WriteException e) {
              log.debug(e.getMessage());
        } catch (IOException e) {
              log.debug(e.getMessage());
        } finally {
                try {
                     workbook.close();
                        //删除全局临时表
                        st = (Statement) conn.createStatement();
                        st.addBatch("if object_id('tempdb..##financial_report_table') is not null      DROP TABLE ##financial_report_table;");
                        st.executeBatch();
                        conn.commit();
                        //释放数据库相关链接
                    ConnUtil.free(null, st, conn);
                   
                } catch (Exception e) {
                      log.debug(e.getMessage());
                }
        }
    }   
   
}

分享到:
评论

相关推荐

    java调用sqlserver存储过程.pdf

    Java 调用 SQL Server 存储过程是指在 Java 应用程序中调用 SQL Server 数据库中的存储过程,以实现数据的增删改查等操作。下面是关于 Java 调用 SQL Server 存储过程的知识点: 1. 创建存储过程 在 SQL Server 中...

    Java中调用SQL Server存储过程详解

    本篇文章详细介绍了如何通过Java调用SQL Server存储过程,涵盖了几种不同类型的存储过程调用方式。 1. 使用不带参数的存储过程 对于不带参数的存储过程,我们可以通过`Statement`对象的`executeQuery`方法,配合`{...

    Java中调用SQL Server存储过程

    在Java编程环境中,如Eclipse 3.3,与数据库进行交互是常见的需求,而调用SQL Server存储过程是其中一种高效的操作方式。存储过程是预编译的SQL语句集合,可以封装复杂的业务逻辑,提高性能并降低网络流量。本篇文章...

    Java调用带参数的存储过程并返回集合

    本话题将详细讲解如何使用Java调用带有参数的Oracle存储过程,并获取存储过程返回的集合。 首先,Oracle存储过程是一种预编译的SQL语句集合,它可以在数据库服务器端执行,提高性能,减少网络传输。`PROCEDURE.sql`...

    jsp如何调用sqlserver存储过程

    在JavaServer Pages (JSP) 中调用SQL Server存储过程是一项常见的任务,特别是在构建Web应用程序时需要执行复杂的数据库操作。存储过程是预先编译的SQL语句集合,可以在数据库服务器上执行,提供性能优化和代码复用...

    java+sqlserver+存储过程

    通过学习《Java存储过程学习必看.doc》和《sqlserver存储过程入门例子加讲解.pdf》,你将能够深入了解如何在Java中有效地使用SQL Server的存储过程,包括参数传递、事务控制、异常处理等高级主题。这两个文档应该...

    Java中调用SQL存储过程示例

    总的来说,Java调用SQL Server存储过程涉及以下几个关键点: 1. 加载JDBC驱动。 2. 建立数据库连接。 3. 创建CallableStatement对象,设置SQL语句,使用问号作为占位符。 4. 注册输出参数,并设置输入参数。 5. 执行...

    Java调用SQL_Server的存储过程详解1

    Java调用SQL_Server的存储过程详解 1使用不带参数的存储过程 2使用带有输入参数的存储过程 3使用带有输出参数的存储过程 4 使用带有返回状态的存储过程 5 使用带有更新计数的存储过程

    sql server调用存储过程

    在Java应用程序中,你可以使用JDBC(Java Database Connectivity)来调用SQL Server的存储过程。以下是一个简单的示例: ```java import java.sql.*; public class CallSPExample { public static void main...

    JSP调用SQL Server的存储过程

    ### JSP调用SQL Server的存储过程 在本篇文章中,我们将探讨如何通过JSP页面来调用SQL Server中的存储过程。此示例涉及到数据库表的创建、存储过程的定义以及JSP页面上的具体实现。 #### 数据库表的创建 首先,...

    java调用ms sql 存储过程(全)

    在Java编程中,调用Microsoft SQL Server(MS SQL)的存储...这就是Java调用MS SQL存储过程的基本步骤。确保遵循最佳实践,如使用连接池管理数据库连接,以及在生产环境中处理异常和错误,以提高程序的稳定性和性能。

    java连接SqlServer数据库调用存储过程代码.docx

    通过以上两个示例,我们可以看到使用Java调用SQL Server数据库中的存储过程是比较简单的。关键在于正确地建立数据库连接、准备`CallableStatement`以及处理可能的异常情况。在实际应用中,还需要注意资源的管理和...

    游标 和 存储过程的创建 及 在程序中的调用

    存储过程是一组预编译的SQL语句,可以接受参数、返回结果集,甚至可以包含控制流程语句,如循环和条件判断。存储过程有以下几个主要优点: 1. 提高性能:由于存储过程预先编译,执行时只需调用即可,减少了解析和...

    SQL Server中存储过程比直接运行SQL语句慢的原因

    SQL Server 中存储过程比直接运行 SQL 语句慢的原因 在 SQL Server 中,存储过程比直接运行 SQL 语句慢的原因是 Parameter sniffing 问题。Parameter sniffing 是指 SQL Server 在执行存储过程时,使用参数的统计...

    实例讲解JSP调用SQL Server的存储过程

    实例讲解JSP调用SQL Server的存储过程 知识点一:创建表 在SQL Server中,创建表是使用CREATE TABLE语句来实现的。在这个例子中,我们创建了一个名为BookUser的表,包含了多个字段,例如UserID、UserName、Title、...

    java调用oracle sqlserver存储过程共用方法

    ### Java调用Oracle与SQL Server存储过程的通用方法 #### 1. **建立数据库连接** 在Java中,使用JDBC(Java Database Connectivity)来连接数据库。根据`dbType`参数动态选择正确的数据源,即Oracle或SQL Server的...

Global site tag (gtag.js) - Google Analytics