-1

i have a code but this is not error, this my code, please tell me what make my code run, i just wanna make load data from csv file to oracle with servlet, thanks in advanced.

package org.exercise01.web;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class GreetingServlet
 */
@WebServlet("/GreetingServlet")
public class GreetingServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public GreetingServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");  
        PrintWriter out = response.getWriter();

        try {
            InputStream csvfile = null;
            FileItemFactory factory = new DiskFileItemFactory();

            ServletFileUpload upload = new ServletFileUpload(factory);
            Map<String, List<FileItem>> file = upload.parseParameterMap(request);

            for (List<FileItem> value : file.values()) {
                for (FileItem uploadItem : value) {
                     csvfile = uploadItem.getInputStream();
                }
            }

            InputStreamReader isr = new InputStreamReader(csvfile);
            BufferedReader reader = new BufferedReader(isr);

            String text = "";
            reader.readLine();
                while ((text = reader.readLine()) != null) {
                    String[] columns = text.split(",");
                    System.out.println("count columns" + columns.length);
                    String rowdata = "";
                        for (String value : columns) {
                            rowdata += "'" + value + "',";
                        }
                       rowdata = rowdata.substring(0, rowdata.length() - 1);
                       try {
                               Class.forName("oracle.jdbc.driver.OracleDriver");
                               Connection  con=DriverManager.getConnection("jdbc:oracle:thin:@//10.250.173.103:1521/optunai", "TUNAIREPORT", "TUNAIREPORT#2015");
                               Statement stmt=con.createStatement();
                               String query = "insert into csvfile(name,mail) values(" + rowdata + ")";
                               stmt.executeUpdate(query);
                                out.println("Successfully uploaded");
                              }//try
                              catch (Exception e) {
                               out.println("Error Try Again"+e.getMessage());
                               } //catch
                     }

           }// try 
          catch (Exception e) {
              out.println("Error Try Again"+e.getMessage());
        }
    }


}

when i run this code, i see the error like this

    Mei 11, 2018 1:50:25 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [org.exercise01.web.GreetingServlet] in context with path [/web-exercise02] threw exception
java.lang.NullPointerException
    at org.exercise01.web.GreetingServlet.doPost(GreetingServlet.java:56)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

how i can resolve my code ? , anyone can give me a true code for me, please help

Ken Kaneki
  • 127
  • 4
  • 14

1 Answers1

0

Line no 69 seems to be the real cause of the problem looking at the code.

InputStreamReader isr = new InputStreamReader(csvfile);

This means the call to parseParmeterMap i.e is returning an empty map

Map<String, List<FileItem>> file = upload.parseParameterMap(request);

You should do 2 things:

  1. Put null check in the entire processing code i.e. line no 69 as a preventive step and also as a good practice.

  2. Check the real cause of the problem i.e parseParameterMap returning empty. Try to just print the items of the Map<String, List<FileItem>> file

piy26
  • 1,509
  • 9
  • 19