2017-09-10 4 views
0

Ich versuche, eine preparedStatement auszuführen und bekomme die folgende Ausnahme.org.postgresql.util.PSQLException: Kein Wert für Parameter 1 angegeben. - Postgres

org.postgresql.util.PSQLException: No value specified for parameter 1. 
    at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:257) 
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:284) 
    at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:428) 
    at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:354) 
    at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:169) 
    at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:117) 
    at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:82) 
    at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:82) 
    at com.eventory.dao.ManagerDao.isExists(ManagerDao.java:62) 
    at com.eventory.create.web.MSignUp.doPost(MSignUp.java:44) 
    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:198) 
    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:80) 
    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:799) 
    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:1457) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:748) 
Sep 10, 2017 8:15:20 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [com.eventory.create.web.MSignUp] in context with path [/eventory] threw exception 
java.lang.IllegalStateException: Cannot forward after response has been committed 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:321) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:311) 
    at com.eventory.create.web.MSignUp.doPost(MSignUp.java:52) 
    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:198) 
    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:80) 
    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:799) 
    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:1457) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:748) 

Dies ist die Methode in ManagerDao, die die Ausnahme verursacht.

public static boolean isExists(String managerID) { 
     boolean st = false; 

     // sql = "SELECT managerID FROM ManagerLogin"; 
     try { 
      pstmt = currentCon.prepareStatement(GET_MANAGER_PASSWORD); 

      ResultSet rs = pstmt.executeQuery(); 
      while (rs.next()) { 
       String originalMID = rs.getString("managerID"); 
       if (originalMID.equals(managerID)) { 
        st = true; 
       } 
      } 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return st; 
    } 

Die preparedStatement sind

GET_MANAGER_PASSWORD = "SELECT pwd FROM ManagerLogin WHERE managerID=?"; 

Dies funktioniert gut, wenn ich MS SQL-Server wurde mit. Ich bin nach Postgres gewechselt. Ist etwas falsch mit der Abfrage? Bitte helfen Sie.

+1

Die Nachricht ist kristallklar. Hast du es gelesen? Was verstehst du nicht? Haben Sie einen Wert für den ersten Parameter Ihrer vorbereiteten Anweisung angegeben? –

+1

Ihre Anweisung verwendet eine Manager-ID als Parameter und gibt ein Kennwort zurück. Ihr Java setzt dagegen kein Argument und erwartet eine Manager-ID als Gegenleistung. Macht das Sinn für dich? – RealSkeptic

+0

Ich habe versucht, die pstmt.setString (1, ManagerID); Es funktioniert immer noch nicht. Es gibt den gleichen Fehler –

Antwort

1

Sie übergeben den Parameter nicht managerID überall in der Abfrage-Anweisung

so etwas sein sollte:

pstmt = currentCon.prepareStatement(GET_MANAGER_PASSWORD); 
pstmt.setString(1, managerID); 
ResultSet rs = pstmt.executeQuery(); 
//Rest of your code 

Der Rest des Codes jedoch nicht viel Sinn, wie die Kommentare der macht @ RealSkeptic Erwähnung

+0

Ich versuchte die pstmt.setString (1, ManagerID); Es funktioniert immer noch nicht. Es gibt den gleichen Fehler –

Verwandte Themen