繁体   English   中英

通过jsp servlet将csv文件导入mysql

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM