package impExcel; import java.io.File; import java.io.IOException; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.UUID; import javax.swing.JOptionPane; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; public class ImpExcel { private static Connection conn = null; private static Statement st = null; private static String drive = "oracle.jdbc.driver.OracleDriver"; private static String DBurl = "jdbc:oracle:thin:@127.0.0.1:1521:orcl"; private static String name = "username"; // 数据库账号 private static String pwd = "password"; // 数据库,密码 { try { Class.forName(drive); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static void main(String[] args) { readExcelAndImp("c:/filePath.xls","tableName"); } /** * 创建数据库表,并校验当前表是否存在 * @param tableName 数据库表名 * @param createTableSql 建表sql */ public static boolean createTable(String tableName,String createTableSql){ try { DatabaseMetaData dMetaData = getConn().getMetaData(); ResultSet rs = dMetaData.getTables(null, null, "%", new String[]{"TABLE"}); boolean tableIsExists = false; while (rs.next()){ if(rs.getString("TABLE_NAME").toUpperCase().equals(tableName.toUpperCase())){ tableIsExists=true; } } rs.close(); if(tableIsExists){ int a = JOptionPane.showConfirmDialog(null, "数据库已经存在的表"+tableName+",确定删除吗?", "温馨提示", JOptionPane.YES_NO_OPTION); if (a == 0) { try { excuteSql("drop table " + tableName + ""); excuteSql(createTableSql); return true; } catch (Exception e1) { e1.printStackTrace(); } } else { int aa = JOptionPane.showConfirmDialog(null, "是否继续添加到原来表单裏面", "温馨提示", JOptionPane.YES_NO_OPTION); if (aa == 1) { return false; }else{ return true; } } }else{ excuteSql(createTableSql); return true; } } catch (Exception e) { e.printStackTrace(); } return false; } /** * 读取excel并导入数据库 * @param filePath excel文件路径 * @param TableName 数据库表名 */ public static void readExcelAndImp(String filePath,String TableName) { File filename = new File(filePath); Workbook wb = null; String create = "create table " + TableName + "( uuid varchar(255)"; String sql = "insert into " + TableName + "("; String parameter = "uuid"; String value = ""; String insert = ""; try { wb = Workbook.getWorkbook(filename); Sheet sheet = wb.getSheet(0);// 第1个sheet Cell cell = null; int row = sheet.getRows();// 总行数 int col = sheet.getColumns();// 总列数 for (int i = 0; i < col; i++) { create += ","+sheet.getCell(i, 0).getContents() + " varchar(255)"; parameter += ","+sheet.getCell(i, 0).getContents(); } create += ")"; System.out.println("数据库生成表语句---" + create); boolean createTableSuccess = createTable(TableName, create); if(!createTableSuccess)return; st = getConn().createStatement(); long readStrTime = System.currentTimeMillis(); for (int i = 1; i < row; i++) { value = "'"+UUID.randomUUID().toString()+"'"; for (int j = 0; j < col; j++) { cell = sheet.getCell(j, i); value += ",'" + cell.getContents() + "'"; } insert = sql + parameter + ") values(" + value + ")"; st.addBatch(insert); // System.out.println("添加语句----"+i+"---" + insert); if(i%1000==0){ System.out.println("加载数据 "+i+" 条!"); } if(i==row-1){ System.out.println("加载数据 "+i+" 条!"); long readEndTime = System.currentTimeMillis(); System.out.println("数据读取完毕,耗时"+((readEndTime-readStrTime)/1000)+"秒!"); } } System.out.println("开始入库......"); long startTime = System.currentTimeMillis(); st.executeBatch(); st.close(); long endTime = System.currentTimeMillis(); System.out.println("入库完成,耗时"+((endTime-startTime)/1000)+"秒,总计"+((endTime-readStrTime)/1000)+"秒!"); } catch (IOException e) { e.printStackTrace(); } catch (BiffException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally{ close(conn,st,null); } } /** * 获取数据库连接 * @return */ public static Connection getConn() { try { if(conn==null||conn.isClosed()){ conn = DriverManager.getConnection(DBurl, name, pwd); } } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, "数据库连接错误"); } return conn; } /** * 关闭数据库连接 * @param conn 数据库连接 * @param st statement对象 可为null * @param rs 结果集 可为null */ public static void close(Connection conn,Statement st,ResultSet rs){ if(rs!=null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ if(st!=null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); }finally { if(conn!=null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } } }else if(rs==null) { if(st!=null){ try { st.close(); } catch (SQLException e) { e.printStackTrace(); }finally { if(conn!=null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }else if(st==null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }else if(st==null&&rs==null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 向数据库插入一条数据,并返回成功结果数,同时关闭数据库连接 * @param st statement对象 * @param sql 语名 * @return */ public static int excuteSql(String sql) { int result = 0; try { st = getConn().createStatement(); result = st.executeUpdate(sql); } catch (Exception e) { System.out.println("添加失败"); } finally { try { st.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ close(conn,st,null); } } return result; } }
相关推荐
### JAVA实现Excel表数据导入ORACLE数据库 #### 知识点概述 本文将详细介绍如何使用Java编程语言将Excel表格中的数据导入到Oracle数据库中。这一过程涉及到的关键技术包括:使用JDBC连接Oracle数据库、通过ODBC...
### JAVA实现Excel表数据导入ORACLE数据库 #### 知识点概述 本文将详细介绍如何使用Java编程语言将Excel表格中的数据导入到Oracle数据库中。这一过程涉及到的关键技术包括:使用JDBC连接Oracle数据库、利用ODBC...
### C#中数据库数据如何导出至Excel表格 在日常工作中,经常需要将数据库中的数据导出到Excel表格中以方便进行进一步的数据处理与分析。本文档将详细讲解如何使用C#语言配合Microsoft Office Interop Excel组件来...
在当前的软件开发领域中,经常需要将数据库中的数据导出为Excel文件,并提供给用户下载的功能。本文将详细介绍如何使用C#结合ADO.NET来实现这一功能,包括创建Excel文件、填充数据以及提供下载链接等步骤。 #### 一...
4. 数据导入导出:Navicat支持从多种文件格式(如CSV、XML、Excel等)导入数据,也可以将数据导出为各种格式,方便数据交换。 5. SQL编写和优化:内置的SQL编辑器具有智能提示和代码完成功能,支持创建、修改和执行...
在Oracle数据库环境中,导出数据为CSV(Comma Separated Values)格式时,有时可能会遇到中文显示为乱码的问题。这通常与字符编码不匹配有关。以下是一套详细的解决步骤和相关知识点: 1. **字符编码问题**: CSV...
在Python编程中,有时我们需要将Oracle数据库中的数据导出到CSV文件中,以便于数据分析、存储或传输。这里我们将详细探讨如何使用cx_Oracle模块和csv模块来实现这个功能。 首先,cx_Oracle是Python中用于连接Oracle...
在实际工作中,经常需要将Excel文件中的数据批量导入到Oracle数据库中,这不仅可以提高工作效率,还能减少人为错误。Apache POI库是Java编程语言的一个开源库,用于处理Microsoft Office格式的文件,包括Excel。通过...
### Oracle SQL Developer 使用教程知识点详解 ... - 可以将表中的数据导出至Excel等外部工具中,方便进一步的数据处理和分析。 通过以上步骤,你可以有效地利用Oracle SQL Developer管理和操作Oracle数据库。
导出表中的数据以便于在其他应用程序中使用,例如 Excel。 1. **导出数据**: - 右键点击表中的任意列值,选择“Export”,然后选择文件类型。 2. **指定文件位置**: - 指定导出文件的目录和文件名,点击“Apply...
- **数据填充**:设计好的模板可以通过程序动态填充数据。这一步骤通常是在Java项目中通过调用fineReport提供的API来实现的。具体来说,可以通过设置报表参数、执行查询等方式获取数据,并将这些数据填入模板中。 #...
本文档提供了各种ODBC数据源(ODBC DSN)及ODBC无数据源(DSN-less)的ADO连接字符串示例,同时也包括了OLE DB提供程序、远程数据服务(RDS)、MS Remote、MS DataShape以及ADO.NET连接字符串的示例。 #### ODBC ...