成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

批量導(dǎo)入數(shù)據(jù)(excel表格)寫入數(shù)據(jù)庫

darkbaby123 / 3543人閱讀

摘要:批量導(dǎo)入數(shù)據(jù)庫思想之一頁面上傳表格后臺解析表格的數(shù)據(jù)暫放數(shù)據(jù)結(jié)構(gòu)中或自己看情況處理,再把里面的數(shù)據(jù)批量存入數(shù)據(jù)庫。

批量導(dǎo)入數(shù)據(jù)庫思想之一:頁面上傳excel表格后臺解析excel表格的數(shù)據(jù)暫放數(shù)據(jù)結(jié)構(gòu)中(list或Map,自己看情況處理),再把list里面的數(shù)據(jù)批量存入數(shù)據(jù)庫。直接貼代碼:

前端:

文件描述:
請選擇文件:

controller中:
// 上傳文件會自動綁定到MultipartFile中


 @RequestMapping(value="/upload",method=RequestMethod.POST)
     public String upload(HttpServletRequest request,
            @RequestParam("description") String description,
            @RequestParam("file") MultipartFile file) throws Exception{
         
        System.out.println(description);
        // 如果文件不為空,寫入上傳路徑
        if(!file.isEmpty()){
            // 上傳文件路徑
            String path = request.getServletContext().getRealPath(
                    "/images/");
            // 上傳文件名
            String filename = file.getOriginalFilename();
            File filepath = new File(path,filename);
            // 判斷路徑是否存在,如果不存在就創(chuàng)建一個
            if (!filepath.getParentFile().exists()) { 
                filepath.getParentFile().mkdirs();
            }
            // 將上傳文件保存到一個目標(biāo)文件當(dāng)中
            file.transferTo(new File(path+File.separator+ filename));
            
            //解析excel表格的數(shù)據(jù)
            List excelPdList = (List)ObjectExcelRead.readExcel(path, filename, 2, 1, 0, "#.####");
            for(PageData ca:excelPdList){
                System.out.println(StringUtils.trimToEmpty(ca.getString("var1")));
                System.out.println(StringUtils.trimToEmpty(ca.getString("var2")));
                System.out.println(StringUtils.trimToEmpty(ca.getString("var3")));
            }
            return "success";
        }else{
            return "error";
        }
         
     }
     
     
     
     
     解析數(shù)據(jù)的方法如下:
         public class ObjectExcelRead {

    protected static Logger logger = Logger.getLogger(ObjectExcelRead.class);
    /**
     * 
     * @param filepath 文件路徑
     * @param filename 文件名
     * @param startrow 開始行號 從0開始
     * @param startcol 開始列號 從0開始
     * @param sheetnum sheet
     * @param format double型小數(shù)據(jù)點(diǎn)保留位數(shù),如: #.##
     * @return
     */
    public static List readExcel(String filepath, String filename, int startrow, int startcol, int sheetnum, String format) throws Exception {
        List varList = new ArrayList();

        try {
            HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(new File(filepath, filename)));
            HSSFSheet sheet = workbook.getSheetAt(sheetnum);                     //sheet 從0開始
            int rowNum = sheet.getLastRowNum() + 1;                     //取得最后一行的行號

            for (int i = startrow; i < rowNum; i++) {                    //行循環(huán)開始
                PageData varpd = new PageData();
                HSSFRow row = sheet.getRow(i);                             //行
                if(row==null) break; //中間如果有空行,則退出
                int cellNum = row.getLastCellNum();                     //每行的最后一個單元格位置

                for (int j = startcol; j < cellNum; j++) {                //列循環(huán)開始
                    HSSFCell cell = row.getCell(Short.parseShort(j + ""));
                    String cellValue = getCellValue(cell, format);
                    varpd.put("var"+j, cellValue);
                }
                varList.add(varpd);
            }
            workbook.close();
        } catch (Exception e) {
            logger.error("解析Excel文件出錯", e);
            throw e;
        }
        return varList;
    }
    
    
    public static String getCellValue(HSSFCell cell, String format) {
        if(cell==null)
            return "";
        
        String cellValue="";
        switch(cell.getCellType()){
            case HSSFCell.CELL_TYPE_NUMERIC : //數(shù)值類型
            case HSSFCell.CELL_TYPE_FORMULA://公式
                if (HSSFDateUtil.isCellDateFormatted(cell)) { // 判斷是日期類型
                    SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd");
                    Date dt = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());// 獲取成DATE類型
                    cellValue = dateformat.format(dt);
                }else{
                    //非日期格式
                    Long longVal = Math.round(cell.getNumericCellValue()); 
                    Double doubleVal = cell.getNumericCellValue();
                    if(Double.parseDouble(longVal + ".0") == doubleVal){   //判斷是否含有小數(shù)位.0 
                        cellValue=String.valueOf(longVal);
                    } 
                    else{ 
                        DecimalFormat df = new DecimalFormat(format);    //格式化為N位小數(shù) 
                        cellValue=df.format(doubleVal);   //返回String類型
                    }
                }
                break;
                
            case HSSFCell.CELL_TYPE_BOOLEAN:
                cellValue = String.valueOf(cell.getBooleanCellValue());
                break;
            
            case HSSFCell.CELL_TYPE_STRING:
                cellValue = String.valueOf(cell.getStringCellValue());
                break;
            
            case HSSFCell.CELL_TYPE_ERROR:
                cellValue = String.valueOf(cell.getErrorCellValue());
                break;
            
            //case HSSFCell.CELL_TYPE_FORMULA:
            //    cellValue = String.valueOf(cell.getNumericCellValue()); //如果是日期,取到的是個數(shù)值,改為和CELL_TYPE_NUMERIC一起處理
                //cellValue = String.valueOf(cell.getCellFormula()); //取到的是個公式,不是具體值
            //    break;
            case HSSFCell.CELL_TYPE_BLANK:
                cellValue = "";
                break;
        }
        return cellValue;    
    }
    
    
}

運(yùn)行后直接在控制臺上看效果:

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66872.html

相關(guān)文章

  • java實(shí)現(xiàn)excel導(dǎo)入,并將錯誤的以鏈接形式返回,可供下載

    摘要:基于編程思想,在框架下,將邏輯復(fù)雜的代碼放在層下,層只負(fù)責(zé)調(diào)用。 基于MVC編程思想,在springMVC框架下,將邏輯復(fù)雜的代碼放在manager層下,controller層只負(fù)責(zé)調(diào)用manager。(注:前端使用jQuery-file-upload插件) controller層 @RequestMapping(value = import_cust_user) @ResponseB...

    CarterLi 評論0 收藏0
  • Python使用第三方庫xlrd獲取Excel表格中的字段并生成SQL文件

    摘要:之前寫過一篇使用腳本生成文件的文章,時(shí)隔很久這種終于有空寫該庫的兄弟庫,用來讀取文件。 之前寫過一篇使用Python腳本生成Excel文件的文章,時(shí)隔很久這種終于有空寫該庫的兄弟庫xlrd,用來讀取Excel文件。最近被調(diào)到電商項(xiàng)目,由于種種原因(設(shè)計(jì)不完善、SQL語句書寫不規(guī)范,甲方太奇葩...槽點(diǎn)太多,就不在這里吐槽了)需要經(jīng)常進(jìn)行刷數(shù)據(jù)操作(批量修改錯誤數(shù)據(jù)),一般就是寫一寫SQ...

    baishancloud 評論0 收藏0
  • Excel快速批量導(dǎo)入生產(chǎn)Cavns并生成圖片下載到本地

    摘要:然后封面就一個一個下啦是不是很方便具體源代碼在上有用的話記得星星 有時(shí)候會有這樣的需求吧 有一個表格里面有一批數(shù)據(jù)需要批量生成封面我們在瀏覽器里可以批量生成比如 showImg(https://segmentfault.com/img/bV67kB?w=2308&h=996); 我們有這樣一個表格需要生成圖書封面 showImg(https://segmentfault.com/img...

    SillyMonkey 評論0 收藏0
  • POI實(shí)現(xiàn)將導(dǎo)入Excel文件

    摘要:獲取表格數(shù)據(jù)獲取表格中的數(shù)據(jù)分為以下幾步獲取表格獲取某一行獲取這一行中的某個單元格代碼實(shí)現(xiàn)獲取第一個張表獲取每行中的字段獲取行獲取單元格中的值持久化獲取出單元格中的數(shù)據(jù)后,最后就是用數(shù)據(jù)建立對象了。獲取行獲取單元格中的值持久化相關(guān)參考 問題描述 現(xiàn)需要批量導(dǎo)入數(shù)據(jù),數(shù)據(jù)以Excel形式導(dǎo)入。 POI介紹 我選擇使用的是apache POI。這是有Apache軟件基金會開放的函數(shù)庫,他會...

    cheng10 評論0 收藏0
  • 論如何把后臺管理系統(tǒng)寫出花

    摘要:知識在于分享,也是希望和大家交流下,如何把后臺管理系統(tǒng)寫得能更具工程化,模塊化,更有效率。后臺管理系統(tǒng)多為端,所以和的技術(shù)運(yùn)用不多,會根據(jù)產(chǎn)品需求進(jìn)行優(yōu)雅降級和漸進(jìn)增強(qiáng)。 前兩天看segmentfault的時(shí)候,突然間,想寫篇文章總結(jié)一下那些年自己寫過的后臺管理系統(tǒng)。作為我前端的入門項(xiàng)目,我對后臺管理系統(tǒng)的感情還是挺深的。本著以下幾點(diǎn)原因,寫了此文。 對后臺管理系統(tǒng)做一個綜合全面的總...

    sugarmo 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<