`
wuhuizhong
  • 浏览: 682864 次
  • 性别: Icon_minigender_1
  • 来自: 中山
社区版块
存档分类
最新评论

Java Oracle 导入到 Excel

 
阅读更多

附件:ExportExcelInst.java

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
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 org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import com.fund.etrading.eccapp.dto.ExportExcelDto;

/**
 * 导出EXCEL公共类
 * @author Karl.luo at 2013-08-19
 *
 */
public class ExportExcelInst {
    protected static final Log log = LogFactory.getLog(ExportExcelInst.class.getName());
    /*
     * Excel文件后缀名
     */
    private static final String EXCEL_POSTFIX = ".xls";
    /*
    * 所查询sequence id
    */
    private String seq_id;
    /*
    * 传值map数据
    */
    private Map map = new HashMap();
    /*
    * procedure 名称
    */
    private String pro_name;
    
    /***********************************DB config*****************************************/
    private String classString="oracle.jdbc.driver.OracleDriver";
    private String username="ec1016";
    private String password="password";
    private String url="java:oracle:thin:@192.168.1.171:1521:htfdbweb";
    private Connection conn=null;
    private PreparedStatement ps = null;
    private CallableStatement cStmt = null;
    private ResultSet rs = null;
    /****************************************************************************/
    public Connection getConnection() {
        try {
            Class.forName(classString);
            conn = DriverManager.getConnection(url, username, password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
    
    /**
    * 拿SEQ_REPORT_ID 最新的下一个ID  NEXTVAL
    */
    public void getSeq(){
        conn = getConnection();
        String sql = "";
        try {
            sql = "SELECT SEQ_REPORT_ID.NEXTVAL FROM DUAL";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while(rs.next()){
                seq_id = rs.getString(1);
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try{
                freeConnection(conn, ps, rs);
            }catch(java.sql.SQLException ex){
                ex.printStackTrace();
            }    
        }
    }
    
    /**
    * 删除table数据
    * @return
    */
    public String delReportDateData(){
        String result = "9999";
        String sql = null;
        try {
            sql = "DELETE FROM REPORT_DATE WHERE REPORT_ID = " + seq_id;
            conn = getConnection();
            ps = conn.prepareStatement(sql);
            ps.execute();
            result = "0000";
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try{
                freeConnection(conn, ps, rs);
            }catch(java.sql.SQLException ex){
                ex.printStackTrace();
            }    
        }
        return result;
    }
    
    private void freeConnection(Connection conn,PreparedStatement pStmt, ResultSet rs ) throws SQLException {
        try {
        
            if(rs != null){
                rs.close();
                rs = null;
            }
            if(pStmt != null){
                pStmt.close();
                pStmt = null;
            }
            if((conn != null) && (!conn.isClosed())){
                conn.close();
                conn = null;
            }
        } catch (java.sql.SQLException ex) {
            log.error("Exception : ",ex);
            throw ex;
        }
    }
    
    /**
     * 判断指定文件的路径是否是Excel文件
     * @param filePath  文件的路径 
     * @return   是否是Excel文件
     *          true:是Excel文件
     *          false:不是Excel文件
     */
    public boolean isExcel(String filePath){
        //获取文件后缀名
        String postfix = getPostfix(filePath);
        if(!postfix.equals(ExportExcelInst.EXCEL_POSTFIX)){
            return false;
        }
        return true;
    }
    
    /**
    * 返回一个文件的后缀 如.txt,.doc
    *
    * @param filename
    * @return
    */
    public static String getPostfix(String filename) {
        int pos = filename.lastIndexOf('.');
        if (pos == -1)
            return "";
        return filename.substring(pos);
    }
    
    /**
    * 传入文件地址,copy到相应的新Excel文件
    * @param filePath
    * @return
    */
    public String createExcel(String filePath){
        String newTotalPath = null;
        String cpre = "1";
        //判断是否为Excel文件
        if(!isExcel(filePath)){
            System.out.println("文件必须是Excel文件,必须是xls格式的文件");
            cpre = "0";
            return "";
        }
        //如果是,copy一个新的Excel文件,并用新的名字:fileName+yyyyMMdd
        if("1".equals(cpre)){
            // 获取文件的存放文件夹
            // 得到最后一个“/”位置
            int filePos = filePath.lastIndexOf("/");
            String newFilePath = filePath.substring(0, filePos + 1);
            // 拿到时间yyyyMMdd
            SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");//设置日期格式
            String dfDate = df.format(new Date());
            // 新的excel 文件名
            int fileNamePosBg = filePath.lastIndexOf("/");
            int fileNamePosEnd = filePath.lastIndexOf(".");
            String excelName = filePath.substring(fileNamePosBg + 1,fileNamePosEnd);
            newTotalPath = newFilePath + excelName + dfDate + ".xls";
            //判断文件是否已存在
            if(new File(newTotalPath).exists()){
                System.out.println("文件已存在");
                return newTotalPath;
            }
            FileInputStream fis;
            FileOutputStream fos;
            try {
                fis = new FileInputStream(new File(filePath));
                fos = new FileOutputStream(new File(newTotalPath));
                int bytesRead; 
                byte[] buf = new byte[4 * 1024];  // 4K 
                while ((bytesRead = fis.read(buf)) != -1) { 
                    fos.write(buf, 0, bytesRead); 
                } 
                fos.flush(); 
                fos.close(); 
                fis.close(); 
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } 
        }
        //返回新的文件地址
        return newTotalPath;
    }
    
    /**
    * 查询table数据结果
    * @return
    */
    public List getTableData(){
        List list = new ArrayList();
        String sql = null;
        try {
            sql = "SELECT REPORT_ID, X_NUMBER, Y_NUMBER, VALUE_DATE FROM REPORT_DATE WHERE REPORT_ID = " + Integer.parseInt(seq_id);
            System.out.println(sql);
            conn = getConnection();
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery(sql);
            ExportExcelDto dto;
            while(rs.next()){
                dto = new ExportExcelDto();
                dto.setExportId(rs.getInt("REPORT_ID"));
                dto.setX(rs.getInt("X_NUMBER"));
                dto.setY(rs.getInt("Y_NUMBER"));
                dto.setValueDate(rs.getString("VALUE_DATE"));
                list.add(dto);
            }
            
            return list;
        } catch (Exception ex) {
            log.error("(EC-Exception)异常:", ex);
        } finally {
            try{
                freeConnection(conn, cStmt, rs);
            }catch(java.sql.SQLException ex){
                ex.printStackTrace();
            }    
        }
        return null;
    }
    
    /**
    * 把list数据导入到excel文件
    * @param path
    * @param list
    * @return
    */
    public String exportToExcel(String path, List list){
        POIFSFileSystem fs;
        HSSFWorkbook wb = null;
        HSSFSheet sheet = null;
        FileOutputStream fos = null;
        HSSFRow row = null;
        HSSFCell cell = null;
        String result = "9999";
        try {
            fs = new POIFSFileSystem(new FileInputStream(path));
            wb = new HSSFWorkbook(fs);
            sheet = wb.getSheetAt(0);
            for (int i = 0; i < list.size(); i++) {
                ExportExcelDto dto = (ExportExcelDto)list.get(i);
                row = sheet.createRow((short)dto.getY());
                cell = row.createCell((short)dto.getX());
                cell.setCellValue(dto.getValueDate());
            }
            
            fos = new FileOutputStream(path);
            wb.write(fos);
            fos.close();
            // 导出excel文件成功后,删除数据库数据
            delReportDateData();
            result = "0000";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    
    /**
    * 将相关数据插入表report_date作导出记录
    * @return
    */
    public String insertIntoTable(){
        getSeq();
        try {
            conn = getConnection();
            String procedure = "{call " + pro_name + "(?,?,?,?,?)}"; 
            cStmt = conn.prepareCall(procedure);
            log.debug("存储过程:" + procedure);
            log.debug(" opid :" +  (String) map.get("opid"));
            log.debug(" reportname :" + (String) map.get("reportname"));
            log.debug(" reportid :" + (String) map.get("reportid"));
            cStmt.setString(1, (String) map.get("opid"));
            cStmt.setString(2, (String) map.get("reportname"));
            cStmt.setString(3, seq_id);
            cStmt.registerOutParameter(4, Types.VARCHAR);
            cStmt.registerOutParameter(5, Types.VARCHAR);
            cStmt.execute();
            String errCod = cStmt.getString(4);
            String errMsg = cStmt.getString(5);
            log.debug("errCod: " + errCod);
            log.debug("errMsg: " + errMsg);
            
            return errCod + "," + errMsg;
        } catch (Exception ex) {
            log.error("(EC-Exception)异常:", ex);
        } finally {
            try{
                freeConnection(conn, cStmt, rs);
            }catch(java.sql.SQLException ex){
                ex.printStackTrace();
            }    
        }
        return null;
    }
    
    
    public Map getMap() {
        return map;
    }

    public void setMap(Map map) {
        this.map = map;
    }

    public String getPro_name() {
        return pro_name;
    }

    public void setPro_name(String pro_name) {
        this.pro_name = pro_name;
    }

    public static void main(String[] args) {
        String proName = "REOPRT_DSPAY_EXPORT";
        ExportExcelInst x = new ExportExcelInst();
        Map maps = new HashMap();
        maps.put("opid", "9999");
        maps.put("reportname", "demo");
        x.setMap(maps);
        x.setPro_name(proName);
        String result = x.insertIntoTable();
        if("0000".equals(result.split(",")[0])){
            String filePath = x.createExcel("D:/HTF_space/newECCJSP2.0/WEB-INF/config/Excel/demo.xls");
            System.out.println("新的文件地址:" + filePath);
            List list = x.getTableData();
            String res = x.exportToExcel(filePath, list);
            System.out.print(res);
        }
    }
    
}

 

分享到:
评论

相关推荐

    Excel树形结构数据导入Oracle数据库(Java)

    当我们面对大量结构化数据,例如Excel表格,需要将其导入到关系型数据库如Oracle时,通常会利用编程语言如Java来实现自动化处理。这篇博客“Excel树形结构数据导入Oracle数据库”提供了一个解决方案,下面将详细解析...

    JAVA实现Excel表数据导入ORACLE数据库

    本文将详细介绍如何使用Java编程语言将Excel表格中的数据导入到Oracle数据库中。这一过程涉及到的关键技术包括:使用JDBC连接Oracle数据库、利用ODBC连接Excel文件、以及通过Java代码读取Excel数据并将其插入到...

    jxl.jar包(java导入导出Excel文件)

    在Java编程中,处理Excel文件是一项常见的任务,尤其在数据导入导出、报表生成或数据分析等场景下。jxl.jar是一个专门为Java设计的库,它允许开发者轻松地读取、写入和修改Excel文件。这个库的功能强大,覆盖了从...

    excel数据导入oracle

    通过上述步骤,我们可以使用Java语言和SQL*Loader工具将Excel文件中的数据导入到Oracle数据库中。这种方法不仅提高了数据处理的效率,还减少了手动录入数据时可能出现的错误。对于需要频繁进行数据迁移或批量导入的...

    导入Excel表格插入Oracle数据库

    首先,让我们详细了解标题“导入Excel表格插入Oracle数据库”所涵盖的知识点: 1. **Excel表格数据**:Excel是Microsoft Office套件中的一款电子表格程序,广泛用于数据存储和分析。数据通常以行和列的形式组织,...

    将excel数据导入到oracle数据库

    总结,将Excel数据导入Oracle数据库涉及到数据预处理、数据库操作和数据迁移工具的使用。理解这个过程有助于提升数据管理效率,确保数据的一致性和准确性。虽然可能需要一些技术背景,但通过实践和学习,任何人都...

    根据excel文件生成oracle表,并导入数据

    该程序根据Excel文件的第一个Sheet页内容,生成数据库表,并将数据导入生成的表中; 操作说明:1&gt;:输入数据库相关信息,登陆数据库; 2&gt;:选择Excel文档,输入设置信息,创建数据库表结构; 3&gt;:点击导入数据按钮...

    java_Excel上传数据到Oracle数据库

    在Java编程环境中,将Excel数据上传到Oracle数据库是一项常见的任务,尤其在数据处理和系统集成中。本项目涉及的关键技术包括Java、jxl库(用于处理Excel文件)和Oracle数据库的连接与操作。以下是对这些知识点的...

    jxl-2.6.10.rar odjbc14.jar : oracle导入导出Excel所需 jar包

    例如,你可以使用JXL库将Oracle数据库中的数据导出到Excel文件,或者将Excel文件中的数据导入到Oracle数据库中。这对于数据报表、数据分析或数据迁移场景非常有用。 具体步骤可能如下: 1. **导出数据到Excel**:...

    oracle导出表结构到excel中

    在Oracle数据库管理中,将表结构导出到Excel文件是一个常见的需求,这有助于数据分析、报告制作或数据共享。以下是一个详细的步骤指南,介绍如何完成这个任务。 首先,我们需要准备一个SQL查询来获取所需表的数据...

    通用java程序批量导excel数据到oracle

    通过执行jar文件,输入oracle登录信息、需要导入的表名、excel文件路径,路径可以是文件夹或者文件,可实现递归导入指定文件夹下的所有excel文件,每个文件可以是多个sheet。 每个数据文件的格式必须一致,所有sheet...

    JAVA实现数据库数据导入导出到Excel(POI)所需jar包

    在Java开发中,有时我们需要将数据库中的数据导出到Excel文件,或者从Excel文件导入数据到数据库。Apache POI是一个流行的API,专为处理Microsoft Office格式的文件,如Excel(.xlsx, .xls)。本教程将详细介绍如何...

    java运用poi把excel导入数据库demo

    在这个“java运用poi把excel导入数据库demo”中,我们将探讨如何利用POI库将Excel数据有效地导入Oracle数据库。 首先,我们需要理解Apache POI的工作原理。POI提供了HSSF和XSSF两个API,分别用于处理旧版的BIFF8(....

    用java从Oracle的EMP表读数据并写到EXCEL中,实现oracle表的备份和导入

    9. **导入Excel数据**:将Excel数据导入新创建的Oracle表,首先需要将Excel数据转化为适合数据库的数据结构,然后使用INSERT语句将这些数据插入到新表中。 10. **异常处理和事务管理**:在处理数据库操作时,异常...

    JAVA实现Excel表数据导入ORACLE数据库.txt

    本文将详细介绍如何使用Java编程语言将Excel表格中的数据导入到Oracle数据库中。这一过程涉及到的关键技术包括:使用JDBC连接Oracle数据库、通过ODBC读取Excel文件以及利用PreparedStatement执行SQL语句。 #### ...

    Oracle导入导出图片及Excel(标注:没有源代码!)

    "Oracle导入导出图片及Excel"这个主题涉及到如何在Oracle环境中高效地处理非结构化的图片和Excel表格数据。由于没有提供源代码,我们将探讨一般性的方法和技术。 1. **Oracle BLOB类型**:Oracle数据库使用BLOB...

    java实现导出oarcle表结构到excel

    在Java编程环境中,将Oracle数据库的表结构导出到Excel是一种常见的需求,特别是在数据库管理和数据分析时。这个场景可以通过两个核心类来实现:`TableStructureToExcel.java`和`ConnectionOracle.java`。这两个类...

Global site tag (gtag.js) - Google Analytics