读取excel文件

 public int importExcel(String path,int type){
        if(mark==false){
            return 0;
        }else
        try{
             POIFSFileSystem fs;    
             HSSFWorkbook book;
            fs = new POIFSFileSystem(new FileInputStream(new File(path)));  
            book = new HSSFWorkbook(fs);        
            //  获得第一个工作表对象 
            HSSFSheet sheet = book.getSheetAt(0);
            String temp=path.substring(path.lastIndexOf("\\")+1,path.indexOf("."));  
            String location=temp.substring(0,temp.indexOf("_"));   //赛事名称
            String matchType=temp.substring(temp.indexOf("_")+1); //获得比赛类型
            //检验文件名是否正确
            if(matchType.equals("预赛")){
                matchType="0";
            }else if(matchType.equals("决赛")){
                matchType="1";
            }else 
                return 1;
            //插入数据的代码
            String sql;
            if(type==0){
                 //检验该文件中的比赛名称是否在数据库中已经存在,如果存在,查找团体分数表,判断是否有该赛事名称,如果有,通知用户不可更新,如果没有,删除团体信息表已有重复的数据的,重新入库
                String deleteSql="delete from web_json where match_name=? and final_preliminary=?";
                String deleteMatchOrderSql="delete from match_order where match_name=? and final_preliminary=?";
                String checkScore="select b.* from match_order as a,score as b where a.id=b.team_id and a.match_name=?";
                String checkSql="select * from match_order where match_name=? and final_preliminary=?";
                st=conn.prepareStatement(checkSql);
                st.setString(1, location);
                st.setString(2, matchType);
                ResultSet rs=st.executeQuery();
                //已存在数据
                if(rs.next()){
                    //判断打分表中是否已经有了这个数据,如果有的话提示用户,不能覆盖
                    st=conn.prepareStatement(checkScore);
                    st.setString(1, location);
                    rs=st.executeQuery();
                    if(rs.next()){
                       return 5;     //告知用户不能修改,已经进行了比赛
                    }else{
                         st=conn.prepareStatement(deleteMatchOrderSql);
                         st.setString(1, location);
                         st.setString(2, matchType);
                         st.execute();
                    }               
                } 
                st=conn.prepareStatement(deleteSql);
                   st.setString(1, location);
                st.setString(2, matchType);
                   st.execute();
            }else if(type==1){  //当附加数据时,先判断是否有该赛事名称,如果没有提醒用户
                String checkSql="select * from web_json where match_name=? and final_preliminary=?";
                st=conn.prepareStatement(checkSql);
                st.setString(1, location);
                st.setString(2, matchType);
                ResultSet rs=st.executeQuery();
                if(!rs.next()){
                    return 6;   //提醒用户信息表中没有该赛事,不能够进行附加
                }
            }
            //没有存在,直接将数据导入数据库

            sql="insert into web_json (match_category,match_units,team_name,match_name,final_preliminary,sort_flag,player_name)values(?,?,?,?,?,?,?)";
           
          //将数据直接插入的过程
            conn.setAutoCommit(false);
            st=conn.prepareStatement(sql);
            // 得到总行数        
            int rowNum = sheet.getLastRowNum();        
           HSSFRow row = sheet.getRow(0);        
            // 正文内容应该从第二行开始,第一行为表头的标题       
            for (int i = 1; i <= rowNum; i++) {           
                row = sheet.getRow(i);  
                HSSFCell cell=row.getCell((short)0);
                HSSFCell cell2=row.getCell((short)1);
                HSSFCell cell3=row.getCell((short)2);
                HSSFCell cell4=row.getCell((short)3);
                if(cell==null||cell2==null||cell3==null||cell4==null){
                    return 1;                    
                }else{
                    //将第一列的数据放进st中
                    st.setString(1,cell.getStringCellValue());   //参赛项目
                    //将第二列的数据放进st中
                    st.setString(2, cell2.getStringCellValue());  //参赛单位
                    st.setString(3,cell3.getStringCellValue());    //队伍名称
                    st.setString(4, location);
                    st.setInt(5, Integer.valueOf(matchType));
                     st.setInt(6, 0);
                     st.setString(7, cell4.getStringCellValue());    //姓名
                }
                st.addBatch();
                if(i>1000){
                    int[] result=st.executeBatch();
                    for(int k:result){
                        if(k<0){
                            return 3;
                        }
                    }
                }     
 
            }
            int[] result=st.executeBatch();
            for(int k:result){
                if(k<0){
                    return 3;
                }
            }
            conn.commit();
            return 2;
        }catch (NumberFormatException e){
            e.printStackTrace();
            return 1;
        }catch(Exception e){
            e.printStackTrace();
            return 4;
        }

以上主要通过poi来读取excel的内容并且入库

posted @ 2014-08-06 16:27  夏之夜  阅读(217)  评论(0编辑  收藏  举报