使用JPA

时间:2017-05-03 09:56:21

标签: java database spring-boot nullpointerexception spring-data-jpa

在我的代码中,我已阅读excel表并将读取参数从excel表传递给方法

@RestController
@RequestMapping("/api/v1")
public class ExcelController3 {

    private MultipartFile uploadfile;

    @Autowired
   private EmployeeRepository employeeRepository;


    @RequestMapping(value = "/upload3", method = RequestMethod.POST, consumes = javax.ws.rs.core.MediaType.MULTIPART_FORM_DATA)
    public void uploadFileHandler(@RequestParam("name") String name,
                                  @RequestParam("file") MultipartFile file) throws IOException {


        this.uploadfile=file;
        System.out.println("*****************************");

        System.out.println("file.getOriginalFilename() " + file.getOriginalFilename());
        System.out.println("file.getContentType()" + file.getContentType());
        System.out.println("file.getInputStream() " + file.getInputStream());
        System.out.println("file.toString() " + file.toString());
        System.out.println("file.getSize() " + file.getSize());
        System.out.println("name " + name);
        System.out.println("file.getBytes() " + file.getBytes());
        System.out.println("file.hashCode() " + file.hashCode());
        System.out.println("file.getClass() " + file.getClass());
        System.out.println("file.isEmpty() " + file.isEmpty());


        try {
            ExcelController ex=new ExcelController();
            File f1=ex.convert(file);
       //     FileInputStream file = new FileInputStream(new File("E://Imp/Details.xlsx"));
            XSSFWorkbook workbook = new XSSFWorkbook(f1);
            XSSFSheet sheet = workbook.getSheetAt(0);
            Iterator<Row> rowIterator = sheet.iterator();
            rowIterator.next();
            while(rowIterator.hasNext())
            {
                Row row = rowIterator.next();
                //For each row, iterate through each columns
                Iterator<Cell> cellIterator = row.cellIterator();

                while(cellIterator.hasNext())
                {
                    Cell cell = cellIterator.next();
                    //This will change all Cell Types to String
                    cell.setCellType(Cell.CELL_TYPE_STRING);
                    switch(cell.getCellType())
                    {
                        case Cell.CELL_TYPE_BOOLEAN:
                            System.out.println("boolean===>>>"+cell.getBooleanCellValue() + "\t");
                            break;
                        case Cell.CELL_TYPE_NUMERIC:

                            break;
                        case Cell.CELL_TYPE_STRING:

                            List list=new ArrayList();
                            list.add(cell.getStringCellValue());

                            break;
                    }


                }
                name=row.getCell(0).getStringCellValue();
                String empid = row.getCell(1).getStringCellValue();
               String add=row.getCell(2).getStringCellValue();
              String  mobile=row.getCell(3).getStringCellValue();
                System.out.println(name+empid+add+mobile);
                ExcelController3 ex1=new ExcelController3();
             //   ex1.InsertRowInDB(name,empid,add,mobile);

                System.out.println("");
                Employee em=new Employee();

                em.setName(name);
                em.setEmpid(empid);
                em.setAddress(add);
                em.setMobile(mobile);
                System.out.println(em);
                System.out.println(em.getAddress());
                System.out.println(em.getEmpid());
                System.out.println(em.getMobile());
                System.out.println(em.getName());
                ex1.InsertRowInDB(name,empid,add,mobile,em);

            }
            workbook.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        }
    }
    public void InsertRowInDB(String name,String empid,String add,String mobile,Employee em) {

//        System.out.println("name "+name);
//        System.out.println("empid "+empid);
//        System.out.println("add "+add);
//        System.out.println("mobile "+mobile);
//        Employee em=new Employee();
//
//        em.setName(name);
//        em.setEmpid(empid);
//        em.setAddress(add);
//        em.setMobile(mobile);
//        System.out.println(em);
//        System.out.println(em.getAddress());
//        System.out.println(em.getEmpid());
//        System.out.println(em.getMobile());
//        System.out.println(em.getName());


     employeeRepository.save(em);

//employeeRepository.save(em);
//        Statement stmt=db.con.createStatement();
//        PreparedStatement ps=null;
//        String sql="Insert into Employee(Name,EmployeeId,Address,ContactInfo) values(?,?,?,?)";
//        ps=db.con.prepareStatement(sql);
//        ps.setString(1, name);
//        ps.setString(2, empid);
//        ps.setString(3, add);
//        ps.setString(4, mobile);
//        ps.executeUpdate();

        System.out.println("Values Inserted Successfully");
    }



    public File convert(MultipartFile file) throws IOException {
        File convFile = new File(file.getOriginalFilename());
        convFile.createNewFile();
        FileOutputStream fos = new FileOutputStream(convFile);
        fos.write(file.getBytes());
        fos.close();
        return convFile;
    }


    @GetMapping(value="/upload")
    public ResponseEntity<Collection<Employee>> getallemployees(){
        Collection<Employee> el =employeeRepository.findAll();
        return new ResponseEntity<Collection<Employee>>(el, HttpStatus.OK);
    }
}

但它在 employeeRepository.save(em); 中给出了空指针异常。 无法找出原因我已经自动装配了employeeRepository,并为jpa创建了适当的pojo类。

2 个答案:

答案 0 :(得分:1)

因此,在再次阅读您的代码之后,问题是因为您使用了一些&#34; new&#34;在你的控制器上。 这样:ExcelController3 ex1=new ExcelController3();创建了一个全新的ExcelController3实例托管(即没有@Autowired或任何其他春天魔法)因此ex1的存储库为空。

您可能想要替换:

ExcelController3 ex1=new ExcelController3();
ex1.InsertRowInDB(name,empid,add,mobile,em);

通过

this.InsertRowInDB(name,empid,add,mobile,em);

另请注意,您应该在控制器上存储一些上传的文件(private MultipartFile uploadfile;)(因为每个用户都使用相同的控制器实例)

一些阅读:

答案 1 :(得分:0)

在使用&#34; employeeRepository.save(em);&#34;之前,我不知道JPA。你不需要创建一个新的类实例&#34; EmployeeRepository&#34;在类中使用该函数之前?我可以看到你将顶部的类声明为private EmployeeRepository employeeRepository;

但是无法看到你在哪里创建它的实例,如果你没有在尝试使用函数save时会给你一个nullpointer异常错误。

例如:

EmployeeRepository employeeRepository =  new EmployeeRepository ();
employeeRepository.save(em);

如果这不能解决您的答案,请发布更多功能细节&#34;保存&#34;