[转] JAVA读取excel数据(插入oracle数据库)
原文地址:http://blog.csdn.net/zczzsq/article/details/16803349
本实例做的是读取execl(只能读取.xls的execl,即只能读取03版的),如果是.xlsx类型的话 手工转化一下即可,应用的jar包是apache的poi系类的jar包和ojdbc14.jar的数据库连接包。
poi的jar报的官方下载地址:http://poi.apache.org/
还需要说明是对execl的读取java可以通过横坐标和纵坐标读取到execl的每个单元格,
根据个人情况看需要读取execl表格中的那些内容,下面这个代码是通用的读取execl的代码
- for (int numSheet = 0; numSheet < workBook.getNumberOfSheets(); numSheet++) {
- Sheet sheet = workBook.getSheetAt(numSheet);
- if (sheet == null) {
- continue;
- }
- // 循环行Row
- for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
- Row row = sheet.getRow(rowNum);
- if (row == null) {
- continue;
- }
- // 循环列Cell
- ArrayList<String> arrCell =new ArrayList<String>();
- for (int cellNum = 0; cellNum <= row.getLastCellNum(); cellNum++) {
- Cell cell = row.getCell(cellNum);
- if (cell == null) {
- continue;
- }
- publicExcel(cell); //publicExcel是下文中execl数据格式的转换,返回值即每个单元格的值 }
- }
- }
一个完整的事例类
- public class ExeclOperate {
- public static void main(String[] args) throws Exception {
- ExeclOperate e=new ExeclOperate();
- e.getExcel();
- System.out.println("导入完成!");
- }
- /**
- * 用于连接oracle数据库的方法
- * 只需修改中的参数getConnection("url","用户名","密码");
- */
- public Connection conn(){
- try {
- //第一步:加载JDBC驱动
- Class.forName("oracle.jdbc.driver.OracleDriver");
- //第二步:创建数据库连接
- Connection con =DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.156:1521:tianjiao", "E5AVPS", "E5AVPS");
- return con;
- }catch(ClassNotFoundException cnf){
- System.out.println("driver not find:"+cnf);
- return null;
- }catch(SQLException sqle){
- System.out.println("can't connection db:"+sqle);
- return null;
- }
- catch (Exception e) {
- System.out.println("Failed to load JDBC/ODBC driver.");
- return null;
- }
- }
- /**
- * “95509”咨询清单 的读取
- * @throws Exception
- */
- public void getExcel() throws Exception {
- // 创建对Excel工作簿文件的引用
- HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream("D:\\1.xls"));
- // 创建对工作表的引用。
- // 在Excel文档中,第一张工作表的缺省索引是0,
- // 读取左上端单元
- for (int i = 0; i < workbook.getNumberOfSheets(); i++) {// 循环sheet
- if(workbook.getSheetAt(i).getPhysicalNumberOfRows()>0){
- HSSFSheet childSheet = workbook.getSheetAt(i);
- for(int rowi=1;rowi<400000;rowi++){
- //System.out.println(childSheet.getRow(rowi).getCell(1).equals(""));
- if(childSheet.getRow(rowi).getCell(0).equals("") || childSheet.getRow(rowi).getCell(0)==null) break;
- String cell1=this.publicExcel(childSheet.getRow(rowi).getCell(0));
- if(cell1==null) break;
- //对于double类型的数据装换为string类型进行字符串截取 只取整数。
- cell1=cell1.substring(0, cell1.length()-2);
- String cell2=this.publicExcel(childSheet.getRow(rowi).getCell(1));
- String cell3=this.publicExcel(childSheet.getRow(rowi).getCell(2));
- String cell4=this.publicExcel(childSheet.getRow(rowi).getCell(3));
- String cell5=this.publicExcel(childSheet.getRow(rowi).getCell(4));
- String cell6=this.publicExcel(childSheet.getRow(rowi).getCell(5));
- cell6=cell6.substring(0, cell6.length()-2);
- //拼装插入数据库的sql
- String insert="insert into w_95509 values('"+cell1+"','"+cell2+"','"+cell3+"','"+cell4+"','"+cell5+"','"+cell6+"')";
- System.out.println("SQL:"+insert);
- insert(insert);
- }
- }
- }
- }
- /**
- * execl数据格式的转换
- * @param cell
- * @return
- */
- public String publicExcel( HSSFCell cell){
- String value = null;
- switch (cell.getCellType()) {
- case HSSFCell.CELL_TYPE_NUMERIC:
- value = "" + cell.getNumericCellValue();
- break;
- case HSSFCell.CELL_TYPE_STRING:
- value = cell.getStringCellValue();
- break;
- case HSSFCell.CELL_TYPE_BLANK:
- ;
- break;
- default:
- }
- return value;
- }
- /**
- * 插入数据 只需要传入插入sql即可
- * 插入sql的样例:insert into t_department values('D004','金融部');
- * @param insert 插入语句
- * @return
- * @throws SQLException
- */
- public int insert(String insert) throws SQLException{
- Connection conn = this.conn();
- int re = 0;
- try{
- conn.setAutoCommit(false);//事物开始
- Statement sm = conn.createStatement();
- re = sm.executeUpdate(insert);
- if(re < 0){ //插入失败
- conn.rollback(); //回滚
- sm.close();
- conn.close();
- return re;
- }
- conn.commit(); //插入正常
- sm.close();
- conn.close();
- return re;
- }
- catch(Exception e){
- e.printStackTrace();
- }
- conn.close();
- return 0;
- }
- }
[转] JAVA读取excel数据(插入oracle数据库)的更多相关文章
- 批量Excel数据导入Oracle数据库
由于一直基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数 ...
- Java实现Excel数据批量导入数据库
Java实现Excel数据批量导入数据库 概述: 这个小工具类是工作中的一个小插曲哦,因为提数的时候需要跨数据库导数... 有的是需要从oracle导入mysql ,有的是从mysql导入oracle ...
- 代码执行批量Excel数据导入Oracle数据库
由于基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数据进 ...
- 利用TOAD实现把EXCEL数据导入oracle数据库
利用TOAD实现把EXCEL数据导入oracle数据库 工具: Toad11.7z(百度搜索,直接下载) 1.将Excel文件中某些字段导入到Oracle数据库的对应表 连接想要导入的数据库 ,然 ...
- Java读取Excel数据
Java读取Excel数据,解析文本并格式化输出 Java读取Excel数据,解析文本并格式化输出 Java读取Excel数据,解析文本并格式化输出 下图是excel文件的路径和文件名 下图是exce ...
- java实现EXCEL数据导入到数据库中的格式问题的解决
之前作为项目甲方,加之java接触不多,在java web开发方面都是打下手的份. 对于EXCEL数据导入到数据库这个问题一直老是出现格式原因而导入失败也是未免惆怅,开发团队也是只说回去检查一下格式. ...
- POI读取Excel数据保存到数据库,并反馈给用户处理信息(导入带模板的数据)
今天遇到这么一个需求,将课程信息以Excel的形式导入数据库,并且课程编号再数据库中不能重复,也就是我们需要先读取Excel提取信息之后保存到数据库,并将处理的信息反馈给用户.于是想到了POI读取文件 ...
- 通过读取excel数据和mysql数据库数据做对比(二)-代码编写测试
通过上一步,环境已搭建好了. 下面开始实战, 首先,编写链接mysql的函数conn_sql.py import pymysql def sql_conn(u,pwd,h,db): conn=pymy ...
- Java读取excel数据保存入库
Java开发读取excel表格数据入库保存: List<Map<String, Object>> list = null; String filePath = filePath ...
随机推荐
- 学习之路~sqh
推荐博客 Edison Chou: Vamei: 算法∙面试专题 - 简书: 设计模式 极速理解设计模式系列[目录索引]- Caleung: Net设计模式 - 灵动生活: 宅男程序员给老婆的计算机课 ...
- 一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统
2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为“希赛网”)个人空间发布过一些 ...
- SQL优化技术分析-1:操作符优化
1.IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格.但是用IN的SQL 性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用IN的SQL有 ...
- SQL Server 2012 新特性:服务角色管理
数据库角色管理,已经可以使用alter role,create role和drop role. 2012增加了几个ddl语句,可以操作服务级别的角色管理, CREATE SERVER ROLE 用 ...
- (八)数据呈现——一图胜千言<完结>
数据分析师就像厨师一样.厨师的工作有5步:下单.备料.切配.烹饪.打荷.数据分析师的工作也有5步.呈现数据就好像打荷.厨师在把菜肴端给客人之前要做盘饰美化,让菜肴精致美观,这个工作就是打荷.同样,数据 ...
- 1.uniq去重命令讲解
uniq命令: 常见参数: -c,--count ***** 在每行旁边显示改行重复出现的次数 -d,--repeated 仅显示重复出现的行,2次或2次以上的行,默认的去重包 ...
- TCP三次握手/四次挥手详解
一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程 ...
- AspNetPager 多条件分页查询
AspNetPager 这个分页控件一般做后台基本都知道的,我就不多说了(说明与下载链接:http://www.webdiyer.com/Controls/AspNetPager),嘿嘿!其实我也是刚 ...
- springMVC注解初步
一.(补充)视图解析器---XmlViewResolver 作用:分离配置信息. 在视图解析器---BeanNameViewResolver的基础之上进行扩充,新建一个myView.xml分离信息 在 ...
- AC日记——蓬莱山辉夜 codevs 2830
2830 蓬莱山辉夜 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 在幻想乡中,蓬莱山辉夜是月球 ...