Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过jspservlet将csv文件导入mysql_Java_Mysql_Jsp_Csv_Servlets - Fatal编程技术网

Java 通过jspservlet将csv文件导入mysql

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; 当我把文件放在本地时,效果非常好 我的问题

我正在编写一个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;
当我把文件放在本地时,效果非常好

我的问题是,当我将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代码。如果有人有更好的方法来做这件事,或者看到我在这里做的事情有什么不对劲,请告诉我,我会非常有兴趣听到的