如何将数据写入csv文件中的独立列

嗨,所以我想写一个Web应用程序,接受Excel文件,然后将其转换为CSV文件,并将其上传到数据库,对这些数据进行一些SQL查询,并将输出发送给用户。 我在Mac遇到一个问题,它工作得很好,但在Windows上引发exception。 抛出的exception是java.sql.SQLSyntaxErrorException:ORA-00900。 我已经检查了SQL查询,它应该工作,除此之外,它在我的Mac上完美的罚款。 所以我认为这个问题可能在我的csv文件中。 在Mac上它将从Excel中的数据写入不同的列(单元格),但是当我使用Excel打开我的CSV文件时,它会将所有内容写入一个单元格。 所以我很困惑。 有人可以帮我吗? 这是我的代码:

package dto; import java.io.*; import java.nio.file.Path; import java.nio.file.Paths; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.csvreader.CsvWriter; import servlets.Serv1; public class Converter { public final String COMA_DELIMITER=" ,"; String newname; public File converting(File file, String p){ Path path=Paths.get(file.getName()); String filename=path.getFileName().toString(); String extension = filename.substring(filename.lastIndexOf(".") + 1, filename.length()); if(extension.equals("csv")) return file; else if(extension.equals("xls")||extension.equals("xlsx")){ try{ newname=p+File.separator+filename.substring(0, filename.lastIndexOf("."))+".csv"; CsvWriter csvOutput=new CsvWriter(new FileWriter(newname,true), ','); System.out.println("I am delimiter "+csvOutput.getDelimiter()); Workbook wb; if(extension.equals("xls")){ wb=new HSSFWorkbook(new FileInputStream(file)); } else{ wb = new XSSFWorkbook(new FileInputStream(file)); } Sheet s=wb.getSheetAt(0); Row row = null; int j=0; Integer val; for(int i=0; i<s.getPhysicalNumberOfRows(); i++){ row=s.getRow(i); Cell c=row.getCell(j); if(c.getCellType()!=Cell.CELL_TYPE_NUMERIC) continue; else{ val=(int) c.getNumericCellValue(); csvOutput.write(Integer.toString(val)); //csvOutput.endRecord(); //csvOutput.write(String.valueOf((i+1))); //csvOutput.endRecord(); } csvOutput.write(String.valueOf((i+1))); csvOutput.endRecord(); } csvOutput.close(); wb.close(); return new File(newname); }catch(Exception e){ e.printStackTrace(); return null; } } return null; } public boolean insertIntoDb(File f){ if(f==null) return false; else{ String path=f.getAbsolutePath(); Connection conn=null; Statement stmt=null; try{ //System.out.println("Hello 1"); Class.forName("oracle.jdbc.driver.OracleDriver"); //System.out.println("Hello 2"); conn=(Connection) DriverManager.getConnection( "jdbc:oracle:thin:@adress:orcl","almit","password"); //System.out.println("Hello 3"); stmt=conn.createStatement(); //System.out.println("Hello 4"); /* * query = "LOAD DATA INFILE '"+filename+"' INTO TABLE testtable FIELDS * TERMINATED BY ',' (text,price)"; */ String select1="truncate table almit.TEMP_FOR_WORK"; //System.out.println("Hello 5"); stmt.execute(select1); //System.out.println("Hello"); String select="LOAD DATA local INFILE '"+path+"' INTO TABLE TEMP_FOR_WORK FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'"; //System.out.println(select); stmt.executeUpdate(select); //System.out.println("Hello"); }catch(Exception e){ e.printStackTrace(); return false; }finally{ try{ if(conn!=null) conn.close(); if(stmt!=null) stmt.close(); }catch(Exception e){ e.printStackTrace(); } } } return true; } 

}

我尝试了其他方法来做到这一点,但他们都输出到一列。 我得到的结果是| colomun1 | | customernumber,id | 我想要得到的结果|第1列|第2列| | customern | ID |

可能吗? 提前致谢!

部分问题可能是这样的:

“\ n”结尾的行

这在Mac(这是一台Unix机器)中是正确的,但是在Windows中,行被终止于“\ r \ n”。

在我看来,不是将这种转换转换为CSV,而是从XSL文件中提取XML数据,并对XML文档进行parsing并插入节点。 可能会多一点工作,但它会使您的应用程序平台独立。

祝你好运。