[英]How to uploading multiple csv file into mysql database using jsp and servlet?
[英]Import csv file to mysql through jsp servlet
我正在编写一个Web应用程序,我希望它能够从jsp导入csv文件到数据库。 以前,我曾使用以下代码将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;
当我在本地保存文件时,这种方法效果很好。
我的问题是,当我将jsp中的csv文件作为多部分上传时。 我可以将PartItem文件作为变量传递,并用PartItem文件的临时位置替换“ /myFileLocation.csv”吗?
调试并查看位于变量表下的存储库/路径中的PartItem文件时,可以看到临时位置。 这是完全可以访问的还是我需要解析csv并将其插入数据库中?
我最终找到了一种方法来完成这项工作。 不知道这是否是最好的解决方案,但按我的设想工作。 基本上,我创建了一个指向资产文件夹的字符串,该文件夹是在这样的Web /资源中创建的。
final String mainPath = this.getServletContext().getRealPath("resources/assets");
然后,我阅读了上载的文件,检查该文件是否已经存在于我的资产文件夹中,如果确实删除了它。
Part filePart = request.getPart("csvFile");
String path = mainPath + "/" + filePart.getSubmittedFileName();
File fileTemp = new File(path);
if(fileTemp.exists()){
fileTemp.delete();
}
最后,我阅读了上载的文件,并在我指向的位置写入了一个新文件,在这种情况下,我就是这样创建的资产文件夹。
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代码。 如果有人能更好地做到这一点,或者发现我在这里所做的事情有问题,请告诉我,我将非常感兴趣。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.