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的内容并且入库