附件: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数据库中。这一过程涉及到的关键技术包括:使用JDBC连接Oracle数据库、利用ODBC连接Excel文件、以及通过Java代码读取Excel数据并将其插入到...
在Java编程中,处理Excel文件是一项常见的任务,尤其在数据导入导出、报表生成或数据分析等场景下。jxl.jar是一个专门为Java设计的库,它允许开发者轻松地读取、写入和修改Excel文件。这个库的功能强大,覆盖了从...
通过上述步骤,我们可以使用Java语言和SQL*Loader工具将Excel文件中的数据导入到Oracle数据库中。这种方法不仅提高了数据处理的效率,还减少了手动录入数据时可能出现的错误。对于需要频繁进行数据迁移或批量导入的...
首先,让我们详细了解标题“导入Excel表格插入Oracle数据库”所涵盖的知识点: 1. **Excel表格数据**:Excel是Microsoft Office套件中的一款电子表格程序,广泛用于数据存储和分析。数据通常以行和列的形式组织,...
总结,将Excel数据导入Oracle数据库涉及到数据预处理、数据库操作和数据迁移工具的使用。理解这个过程有助于提升数据管理效率,确保数据的一致性和准确性。虽然可能需要一些技术背景,但通过实践和学习,任何人都...
该程序根据Excel文件的第一个Sheet页内容,生成数据库表,并将数据导入生成的表中; 操作说明:1>:输入数据库相关信息,登陆数据库; 2>:选择Excel文档,输入设置信息,创建数据库表结构; 3>:点击导入数据按钮...
在Java编程环境中,将Excel数据上传到Oracle数据库是一项常见的任务,尤其在数据处理和系统集成中。本项目涉及的关键技术包括Java、jxl库(用于处理Excel文件)和Oracle数据库的连接与操作。以下是对这些知识点的...
例如,你可以使用JXL库将Oracle数据库中的数据导出到Excel文件,或者将Excel文件中的数据导入到Oracle数据库中。这对于数据报表、数据分析或数据迁移场景非常有用。 具体步骤可能如下: 1. **导出数据到Excel**:...
在Oracle数据库管理中,将表结构导出到Excel文件是一个常见的需求,这有助于数据分析、报告制作或数据共享。以下是一个详细的步骤指南,介绍如何完成这个任务。 首先,我们需要准备一个SQL查询来获取所需表的数据...
通过执行jar文件,输入oracle登录信息、需要导入的表名、excel文件路径,路径可以是文件夹或者文件,可实现递归导入指定文件夹下的所有excel文件,每个文件可以是多个sheet。 每个数据文件的格式必须一致,所有sheet...
在Java开发中,有时我们需要将数据库中的数据导出到Excel文件,或者从Excel文件导入数据到数据库。Apache POI是一个流行的API,专为处理Microsoft Office格式的文件,如Excel(.xlsx, .xls)。本教程将详细介绍如何...
在这个“java运用poi把excel导入数据库demo”中,我们将探讨如何利用POI库将Excel数据有效地导入Oracle数据库。 首先,我们需要理解Apache POI的工作原理。POI提供了HSSF和XSSF两个API,分别用于处理旧版的BIFF8(....
9. **导入Excel数据**:将Excel数据导入新创建的Oracle表,首先需要将Excel数据转化为适合数据库的数据结构,然后使用INSERT语句将这些数据插入到新表中。 10. **异常处理和事务管理**:在处理数据库操作时,异常...
本文将详细介绍如何使用Java编程语言将Excel表格中的数据导入到Oracle数据库中。这一过程涉及到的关键技术包括:使用JDBC连接Oracle数据库、通过ODBC读取Excel文件以及利用PreparedStatement执行SQL语句。 #### ...
"Oracle导入导出图片及Excel"这个主题涉及到如何在Oracle环境中高效地处理非结构化的图片和Excel表格数据。由于没有提供源代码,我们将探讨一般性的方法和技术。 1. **Oracle BLOB类型**:Oracle数据库使用BLOB...
在Java编程环境中,将Oracle数据库的表结构导出到Excel是一种常见的需求,特别是在数据库管理和数据分析时。这个场景可以通过两个核心类来实现:`TableStructureToExcel.java`和`ConnectionOracle.java`。这两个类...