我正在处理上传excel文件并将其值插入数据库的应用程序。
我的代码如下:
FileInputStream inputStream = new FileInputStream(excelFile);
String fileExtension = FilenameUtils.getExtension(temp1);
Workbook wb = null;
if(fileExtension.equalsIgnoreCase("xls")){
wb = new HSSFWorkbook(inputStream);
} else {
wb = new XSSFWorkbook(inputStream);
}
if (wb != null){
logger.info("Read File");
}
Sheet sheet = null;
Row row = null;
Cell cell = null;
dbConnect();
sheet = wb.getSheetAt(0);
int rows = sheet.getPhysicalNumberOfRows() + 1;
for (int y=1; y<rows; y++){
row = sheet.getRow(y);
int cells = row.getPhysicalNumberOfCells();
String sqlQuery = "INSERT INTO paycheck(" +
"paycheckId, payTitle, payEmployee, payDisDate, payBasicSalary, payIncentive, payAllowance, paySpecialAllowance, " +
"payEducation, payTotal, payTax, payOther, payAdvanced, payDeductible, payNet, payDuration, payRate)" +
"VALUES(";
for (int z=0; z<cells; z++){
cell = row.getCell(z);
if(z != cells -1){
sqlQuery += "'" + cell + "', ";
} else {
sqlQuery += cell + ")";
}
}
stmt.execute(sqlQuery);
}
dbDisConnect();
因此,当我上传如下所示的excel文件时,它会工作并将其数据插入db。
但是,当我上传像下面这样的excel文件时,db不会更新。
我可以问你如何解决这个问题,所以即使cell的值是= ROUNDUP((600),2)而不是600,它仍然会更新db。
提前谢谢。
答案 0 :(得分:2)
POI Cell
类代表一个单元格,并提供了许多处理单元格的方法。
执行sqlQuery += "'" + cell + "', ";
时,您将插入Cell.toString()
返回的值。该值未明确定义为执行任何操作,因此您无法依赖它返回的内容。
您想要做的是使用cell.getStringCellValue()
方法,以“获取单元格的值作为字符串”,就像javadoc所说的那样。
除此之外,你不想做你正在做的字符串连接,因为它会使你的代码变得脆弱并容易受到SQL Injection攻击,这将使黑客窃取你的数据和/或删除所有的桌子。
您应该使用PreparedStatement
,使用参数标记(?
)和setXxx()
方法。