Java 无法将从excel读取的数据插入数据库
我想上传excel文件并在后端读取,然后使用JPA将其插入oracle数据库。 我能够读取文件,但当我试图使用contactusRepository.save(contactus)将数据插入数据库时我收到空指针异常。Java 无法将从excel读取的数据插入数据库,java,jpa,spring-boot,apache-poi,multipart,Java,Jpa,Spring Boot,Apache Poi,Multipart,我想上传excel文件并在后端读取,然后使用JPA将其插入oracle数据库。 我能够读取文件,但当我试图使用contactusRepository.save(contactus)将数据插入数据库时我收到空指针异常。 实体类:-Contactus @Entity @Table(name = "USER_CONTACTS") @NamedQueries({ @NamedQuery(name = "Contactus.findAll", query = "SELECT c FROM
实体类:-Contactus
@Entity
@Table(name = "USER_CONTACTS")
@NamedQueries({
@NamedQuery(name = "Contactus.findAll", query = "SELECT c FROM Contactus c")})
public class Contactus extends Domain implements Serializable {
private static final long serialVersionUID = 1L;
/***************Columns Parameters**************************/
private String FULL_NAME;
private String COMPANY_NAME;
private String EMAIL;
private String CONTACT_NUMBER;
private String ADDRESS;
private String COMMENTS;
@Basic(optional = false)
@Column(nullable = false)
private int ACKNOWLEDGE;
/***************parametrised construtor**************************/
public Contactus(String FULL_NAME, String COMPANY_NAME, String EMAIL, String CONTACT_NUMBER, String ADDRESS, String COMMENTS, int ACKNOWLEDGE) {
this.FULL_NAME = FULL_NAME;
this.COMPANY_NAME = COMPANY_NAME;
this.EMAIL = EMAIL;
this.CONTACT_NUMBER = CONTACT_NUMBER;
this.ADDRESS = ADDRESS;
this.COMMENTS = COMMENTS;
this.ACKNOWLEDGE = ACKNOWLEDGE;
}
public Contactus() {
}
/***************Getter And Setters**************************/
public String getFULL_NAME() {
return FULL_NAME;
}
public void setFULL_NAME(String FULL_NAME) {
this.FULL_NAME = FULL_NAME;
}
public String getCOMPANY_NAME() {
return COMPANY_NAME;
}
public void setCOMPANY_NAME(String COMPANY_NAME) {
this.COMPANY_NAME = COMPANY_NAME;
}
public String getEMAIL() {
return EMAIL;
}
public void setEMAIL(String EMAIL) {
this.EMAIL = EMAIL;
}
public String getCONTACT_NUMBER() {
return CONTACT_NUMBER;
}
public void setCONTACT_NUMBER(String CONTACT_NUMBER) {
this.CONTACT_NUMBER = CONTACT_NUMBER;
}
public String getADDRESS() {
return ADDRESS;
}
public void setADDRESS(String ADDRESS) {
this.ADDRESS = ADDRESS;
}
public String getCOMMENTS() {
return COMMENTS;
}
public void setCOMMENTS(String COMMENTS) {
this.COMMENTS = COMMENTS;
}
public int getACKNOWLEDGE() {
return ACKNOWLEDGE;
}
public void setACKNOWLEDGE(int ACKNOWLEDGE) {
this.ACKNOWLEDGE = ACKNOWLEDGE;
}
}
@Repository
@RepositoryRestResource
public interface ContactusRepository extends JpaRepository<Contactus,Integer>{
}
@RestController
@RequestMapping("/api/v1")
public class ExcelController {
@Autowired
private ContactusRepository contactusRepository;
ObjectMapper mapper = new ObjectMapper();
@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 {
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 email = row.getCell(1).getStringCellValue();
String add=row.getCell(2).getStringCellValue();
String company=row.getCell(3).getStringCellValue();
System.out.println(name+email+add+company);
ExcelController ex1=new ExcelController();
ex1.InsertRowInDB2(name,email,add,company);
System.out.println("");
}
workbook.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
e.printStackTrace();
}
}
/******************* jason object but not done***********/
public JSONObject InsertRowInDB2(String name,String email,String add,String company){
JSONObject json = new JSONObject();
json.put("full_NAME",name);
json.put("email",email);
json.put("address",add);
json.put("company_NAME",company);
// ex1.createexcelContactus(json);
return json;
}
public String createexcelContactus(Contactus contactus) {
contactusRepository.save(contactus);
return "data saved";
}
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;
}
}
JPA存储库:-ContactusRepository
@Entity
@Table(name = "USER_CONTACTS")
@NamedQueries({
@NamedQuery(name = "Contactus.findAll", query = "SELECT c FROM Contactus c")})
public class Contactus extends Domain implements Serializable {
private static final long serialVersionUID = 1L;
/***************Columns Parameters**************************/
private String FULL_NAME;
private String COMPANY_NAME;
private String EMAIL;
private String CONTACT_NUMBER;
private String ADDRESS;
private String COMMENTS;
@Basic(optional = false)
@Column(nullable = false)
private int ACKNOWLEDGE;
/***************parametrised construtor**************************/
public Contactus(String FULL_NAME, String COMPANY_NAME, String EMAIL, String CONTACT_NUMBER, String ADDRESS, String COMMENTS, int ACKNOWLEDGE) {
this.FULL_NAME = FULL_NAME;
this.COMPANY_NAME = COMPANY_NAME;
this.EMAIL = EMAIL;
this.CONTACT_NUMBER = CONTACT_NUMBER;
this.ADDRESS = ADDRESS;
this.COMMENTS = COMMENTS;
this.ACKNOWLEDGE = ACKNOWLEDGE;
}
public Contactus() {
}
/***************Getter And Setters**************************/
public String getFULL_NAME() {
return FULL_NAME;
}
public void setFULL_NAME(String FULL_NAME) {
this.FULL_NAME = FULL_NAME;
}
public String getCOMPANY_NAME() {
return COMPANY_NAME;
}
public void setCOMPANY_NAME(String COMPANY_NAME) {
this.COMPANY_NAME = COMPANY_NAME;
}
public String getEMAIL() {
return EMAIL;
}
public void setEMAIL(String EMAIL) {
this.EMAIL = EMAIL;
}
public String getCONTACT_NUMBER() {
return CONTACT_NUMBER;
}
public void setCONTACT_NUMBER(String CONTACT_NUMBER) {
this.CONTACT_NUMBER = CONTACT_NUMBER;
}
public String getADDRESS() {
return ADDRESS;
}
public void setADDRESS(String ADDRESS) {
this.ADDRESS = ADDRESS;
}
public String getCOMMENTS() {
return COMMENTS;
}
public void setCOMMENTS(String COMMENTS) {
this.COMMENTS = COMMENTS;
}
public int getACKNOWLEDGE() {
return ACKNOWLEDGE;
}
public void setACKNOWLEDGE(int ACKNOWLEDGE) {
this.ACKNOWLEDGE = ACKNOWLEDGE;
}
}
@Repository
@RepositoryRestResource
public interface ContactusRepository extends JpaRepository<Contactus,Integer>{
}
@RestController
@RequestMapping("/api/v1")
public class ExcelController {
@Autowired
private ContactusRepository contactusRepository;
ObjectMapper mapper = new ObjectMapper();
@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 {
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 email = row.getCell(1).getStringCellValue();
String add=row.getCell(2).getStringCellValue();
String company=row.getCell(3).getStringCellValue();
System.out.println(name+email+add+company);
ExcelController ex1=new ExcelController();
ex1.InsertRowInDB2(name,email,add,company);
System.out.println("");
}
workbook.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
e.printStackTrace();
}
}
/******************* jason object but not done***********/
public JSONObject InsertRowInDB2(String name,String email,String add,String company){
JSONObject json = new JSONObject();
json.put("full_NAME",name);
json.put("email",email);
json.put("address",add);
json.put("company_NAME",company);
// ex1.createexcelContactus(json);
return json;
}
public String createexcelContactus(Contactus contactus) {
contactusRepository.save(contactus);
return "data saved";
}
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;
}
}
提前谢谢,我真的需要这个解决方案。请向我们展示堆栈跟踪。那么,我在您的代码中添加了堆栈跟踪的可能副本?