`
wangbin118
  • 浏览: 16379 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

EXCEL向ORCL数据库导数据的相关程序

 
阅读更多
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数据库.txt

    ### JAVA实现Excel表数据导入ORACLE数据库 #### 知识点概述 本文将详细介绍如何使用Java编程语言将Excel表格中的数据导入到Oracle数据库中。这一过程涉及到的关键技术包括:使用JDBC连接Oracle数据库、通过ODBC...

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

    ### JAVA实现Excel表数据导入ORACLE数据库 #### 知识点概述 本文将详细介绍如何使用Java编程语言将Excel表格中的数据导入到Oracle数据库中。这一过程涉及到的关键技术包括:使用JDBC连接Oracle数据库、利用ODBC...

    C#中数据库数据如何导出至Excel表格.docx

    ### C#中数据库数据如何导出至Excel表格 在日常工作中,经常需要将数据库中的数据导出到Excel表格中以方便进行进一步的数据处理与分析。本文档将详细讲解如何使用C#语言配合Microsoft Office Interop Excel组件来...

    生成和下载excel文件 生成和下载excel文件

    在当前的软件开发领域中,经常需要将数据库中的数据导出为Excel文件,并提供给用户下载的功能。本文将详细介绍如何使用C#结合ADO.NET来实现这一功能,包括创建Excel文件、填充数据以及提供下载链接等步骤。 #### 一...

    Navicat Premium 12

    4. 数据导入导出:Navicat支持从多种文件格式(如CSV、XML、Excel等)导入数据,也可以将数据导出为各种格式,方便数据交换。 5. SQL编写和优化:内置的SQL编辑器具有智能提示和代码完成功能,支持创建、修改和执行...

    Oracle导出成csv格式后显示乱码的解决方法

    在Oracle数据库环境中,导出数据为CSV(Comma Separated Values)格式时,有时可能会遇到中文显示为乱码的问题。这通常与字符编码不匹配有关。以下是一套详细的解决步骤和相关知识点: 1. **字符编码问题**: CSV...

    Oracle 10g ODBC驱动 各种版本的

    同时,对于不同版本的驱动,可能存在兼容性问题,需要确保驱动与Oracle数据库服务器版本匹配,并且与应用程序(如Excel、Access或自定义开发的应用)能够协同工作。 总之,Oracle 10g ODBC驱动提供了一种标准化的...

    Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法

    在Python编程中,有时我们需要将Oracle数据库中的数据导出到CSV文件中,以便于数据分析、存储或传输。这里我们将详细探讨如何使用cx_Oracle模块和csv模块来实现这个功能。 首先,cx_Oracle是Python中用于连接Oracle...

    Oracle-POI上传

    在实际工作中,经常需要将Excel文件中的数据批量导入到Oracle数据库中,这不仅可以提高工作效率,还能减少人为错误。Apache POI库是Java编程语言的一个开源库,用于处理Microsoft Office格式的文件,包括Excel。通过...

    Oracle_SQL_Developer_使用教程

    ### Oracle SQL Developer 使用教程知识点详解 ... - 可以将表中的数据导出至Excel等外部工具中,方便进一步的数据处理和分析。 通过以上步骤,你可以有效地利用Oracle SQL Developer管理和操作Oracle数据库。

    OracleSQLDeveloper工具常用方法分析.docx

    导出表中的数据以便于在其他应用程序中使用,例如 Excel。 1. **导出数据**: - 右键点击表中的任意列值,选择“Export”,然后选择文件类型。 2. **指定文件位置**: - 指定导出文件的目录和文件名,点击“Apply...

    fineReport

    - **数据填充**:设计好的模板可以通过程序动态填充数据。这一步骤通常是在Java项目中通过调用fineReport提供的API来实现的。具体来说,可以通过设置报表参数、执行查询等方式获取数据,并将这些数据填入模板中。 #...

    ado连接字符串大全

    本文档提供了各种ODBC数据源(ODBC DSN)及ODBC无数据源(DSN-less)的ADO连接字符串示例,同时也包括了OLE DB提供程序、远程数据服务(RDS)、MS Remote、MS DataShape以及ADO.NET连接字符串的示例。 #### ODBC ...

Global site tag (gtag.js) - Google Analytics