2017-09-10 6 views
0

preparedStatement를 실행하려고하는데 다음과 같은 예외가 발생합니다.org.postgresql.util.PSQLException : 매개 변수 1에 지정된 값이 없습니다. - 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) 

이것은 ManagerDao에서 예외를 발생시키는 방법입니다.

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; 
    } 

PreparedStatement의

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

이다이 내가 MS SQL 서버를 사용 할 때 잘 작동했다. Postgres로 전환했습니다. 쿼리에 문제가 있습니까? 도와주세요.

+1

메시지가 맑은입니다. 읽어 보셨습니까? 너 이해 하지마? 준비된 진술의 첫 번째 매개 변수 값을 지정 했습니까? –

+1

이 명령문은 매개 변수로 관리자 ID를 사용하고 암호를 반환합니다. 반면 Java는 인수를 설정하지 않고 관리자 ID를 리턴합니다. 그게 너에게 의미가 있니? – RealSkeptic

+0

나는 pstmt.setString (1, managerID)을 시도했다; 아직도 일하지 않습니다. 그것도 동일한 오류를주는 –

답변

1

당신은

이 같은 뭔가해야 쿼리 문에 아무 곳이나 매개 변수 managerID을 통과하지 : 코드의 나머지는 그러나의 주석으로 훨씬 이해가되지 않습니다

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

@ 실용적인 언급

+0

나는 pstmt.setString (1, managerID)을 시도했다; 아직도 일하지 않습니다. 그것도 같은 오류를주는 –