Java 通过jspservlet将csv文件导入mysql
我正在编写一个web应用程序,希望能够将csv文件从jsp导入数据库。之前,我使用以下代码将csv插入数据库Java 通过jspservlet将csv文件导入mysql,java,mysql,jsp,csv,servlets,Java,Mysql,Jsp,Csv,Servlets,我正在编写一个web应用程序,希望能够将csv文件从jsp导入数据库。之前,我使用以下代码将csv插入数据库 LOAD DATA LOCAL INFILE "/myFileLocation.csv" INTO TABLE myTable COLUMNS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES; 当我把文件放在本地时,效果非常好 我的问题
LOAD DATA LOCAL INFILE "/myFileLocation.csv"
INTO TABLE myTable
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
当我把文件放在本地时,效果非常好
我的问题是,当我将csv文件作为多部分上传到jsp中时。我是否可以将该PartItem文件作为变量传递,并用PartItem文件临时位置替换“/myFileLocation.csv”
调试和查看位于variables表下repository/path中的PartItem文件时,我可以看到临时位置。这是否可以访问,或者我需要解析csv并将其插入数据库中?我最终找到了一种方法来实现这一点。不确定这是否是最好的解决方案,但它的工作正如我想象的那样。基本上,我创建了一个字符串,指向我在web/resources中创建的资产文件夹,如下所示
final String mainPath = this.getServletContext().getRealPath("resources/assets");
final String fileName = filePart.getSubmittedFileName();
File convFile = new File(filePart.getSubmittedFileName());
FileOutputStream fos = new FileOutputStream(convFile);
OutputStream out = null;
InputStream filecontent= null;
try{
out = new FileOutputStream(new File(mainPath + File.separator + fileName));
filecontent = filePart.getInputStream();
int read = 0;
final byte[] bytes = new byte[1024];
while((read = filecontent.read(bytes)) != -1){
out.write(bytes, 0, read);
}
} catch (FileNotFoundException fne) {
} finally {
if (out != null) {
out.close();
}
if (filecontent != null) {
filecontent.close();
}
}
然后我阅读上传的文件,检查文件是否已经存在于我的资产文件夹中,如果存在,我将其删除
Part filePart = request.getPart("csvFile");
String path = mainPath + "/" + filePart.getSubmittedFileName();
File fileTemp = new File(path);
if(fileTemp.exists()){
fileTemp.delete();
}
最后,我读取了上传的文件,并在我指向的位置写入了一个新文件,在本例中,它是我创建的资产文件夹,如下所示
final String mainPath = this.getServletContext().getRealPath("resources/assets");
final String fileName = filePart.getSubmittedFileName();
File convFile = new File(filePart.getSubmittedFileName());
FileOutputStream fos = new FileOutputStream(convFile);
OutputStream out = null;
InputStream filecontent= null;
try{
out = new FileOutputStream(new File(mainPath + File.separator + fileName));
filecontent = filePart.getInputStream();
int read = 0;
final byte[] bytes = new byte[1024];
while((read = filecontent.read(bytes)) != -1){
out.write(bytes, 0, read);
}
} catch (FileNotFoundException fne) {
} finally {
if (out != null) {
out.close();
}
if (filecontent != null) {
filecontent.close();
}
}
在这之后,我只是将一个字符串传递给我创建的DAO,其中包含文件名为的文件路径,我可以利用上面发布的sql语句
正如我之前所说的,我不确定这是否是最好的方法,但它似乎对我来说工作得很好,而且我的jsp中没有包含任何java代码。如果有人有更好的方法来做这件事,或者看到我在这里做的事情有什么不对劲,请告诉我,我会非常有兴趣听到的