Maven项目管理+SSM:实现文件上传+读取Excel数据批量导入数据库

Maven项目管理+SSM:实现文件上传+读取Excel数据批量导入数据库

  • 项目目录

Maven项目管理+SSM:实现文件上传+读取Excel数据批量导入数据库_第1张图片

  1. 前端页面代码

UploadText.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>



    
    Insert title here
    
    
    
    
    


index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    批量导入数据信息
    
    
    


批量(少量)导入excel数据至数据库

Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

开始导入 »

  1. 控制层
    HandleController
package com.cenhua.dataimport.controller;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
 * 读取Excel文件数据批量插入数据库
 */
@Controller
public class HandleControler {
    public static String sqlcreat = " ";//建表语句
    public static String sqlcreatestart ="create table xyz("; //建表语句开头
    public static String sqlload = " varchar(20)";  //字段属性
    public static String sqlcreateend = " )"; //建表语句结尾
    public static String sqlinsert = " ";//插数语句
    public static  String[] sqlinsertstart = new String[1000000];//动态初始化
    //定义数组不能指定数组长度  String sqlinsertstart[] 数组定义另外一种方式;
    public static String sqlinsertend =" )";  //插数语句结尾
    public static String sqlchar = "  ";
    public static int[] id = new int[1000000] ;//存储整型数据编号
    public static int y = 0;//确定插入语句
    public static int j1 = 0;
    public static int r =0;
    public static int r1 =0;
    @RequestMapping(value = "/handle")
    public ModelAndView handle(HttpServletResponse response){
        int i = 0;
        int j = 0;
        String[] node = new String[10000];
        ModelAndView mav = new ModelAndView();
        ArrayList listFileName = new ArrayList();
        HandleControler ha = new HandleControler();
        String st ="D:\\SSM框架\\DataImport\\target\\dataImport-1.0-SNAPSHOT\\upload\\";
        //获取文件名
        this.getAllFileName(st,listFileName);
        //获取文件夹下文件名
        for(String name:listFileName){
                String s1 = name;
                List>  lists = ha.readExcel(s1);
                //展示读取数据作用
                for (List list : lists) {
                    for (String strs : list) {
                        //显示表格列字段名
                        if(i<1){
                            if(strs.contains("工龄")){
                                System.out.println("公龄位于"+r+"列");
                                id[r] = r+1;
                            }else if(strs.contains("行龄")){
                                System.out.println("行龄位于"+r+"列");
                                id[r] = r+1;
                            }else if(strs.contains("年龄")){
                                System.out.println("年龄位于"+r+"列");
                                id[r] = r+1;
                            }
                            r++;//获取列数
                        } else{
                            /*显示全部列字段数值  插入数据代码块  判断插入数据类型
                            r:总列数 利用读取
                            r1:总列数(中间值) 每列循环结束 利用r总列数重新赋值
                            y:插入数据数组序号
                            j1:判断是每列第几个元素  可以结合 id[]数组进行判断 但是循环是个问题
                            j:数组序号*/
                            node[j] = strs;
                                //判断为特殊类型
                                      if(j1==0) {//第一行
                                          if(id[j1]!=j1+1){
                                               sqlinsertstart[y] = "insert into xyz values( ";
                                               sqlinsertstart[y] = sqlinsertstart[y] +"'" +node[j] +"'" + ",";
                                               j++;
                                          }else if(id[j1]==j1+1){
                                              sqlinsertstart[y] = "insert into xyz values( ";
                                              sqlinsertstart[y] = sqlinsertstart[y] +node[j] + ",";
                                              j++;
                                          }
                                      }else if(j1> readExcel(String path) {
        String fileType = path.substring(path.lastIndexOf(".") + 1);//截取文件类型
        // return a list contains many list
        //System.out.println(fileType+"12"+"filetype");
        List> lists = new ArrayList>();
        //读取excel文件
        InputStream is = null;
        try {
            is = new FileInputStream(path);
            //获取工作薄
            Workbook wb = null;
            if (fileType.equals("xls")) {
                wb = new HSSFWorkbook(is);
            } else if (fileType.equals("xlsx")) {
                wb = new XSSFWorkbook(is);
            } else {
                return null;
            }
            //读取第一个工作页sheet
            Sheet sheet = wb.getSheetAt(0);
            //第一行为标题
            for (Row row : sheet) {
                ArrayList list = new ArrayList();
                for (Cell cell : row) {
                    //根据不同类型转化成字符串
                    cell.setCellType(Cell.CELL_TYPE_STRING);
                    list.add(cell.getStringCellValue());
                }
                lists.add(list);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (is != null) is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return lists;
    }
    //获取文件路径
    public static void getAllFileName(String path, ArrayList listFileName){
        File file = new File(path);
        String [] names = file.list();
        if(names != null){
            String [] completNames = new String[names.length];
            for(int i=0;i> lists, String[] titles, String name) throws IOException {
        System.out.println(lists);
        //创建新的工作薄
        Workbook wb = new HSSFWorkbook();
        // 创建第一个sheet(页),并命名
        Sheet sheet = wb.createSheet(name);
        // 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。
        for(int i=0;i

InsertController

package com.cenhua.dataimport.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class InsertController {
    @RequestMapping(value="/Inserttable")

    public ModelAndView InsertTable(){
        ModelAndView mav = new ModelAndView();
        mav.setViewName("UploadText");
        return mav;

    }
}

本项目通过对Excel表格的读取,根据字段来判断数据类型,之后拼接SQL语句,通过批量运行SQL语句,从而将数据插入至数据库

你可能感兴趣的:(Maven,SSM,AJAX)