2017-10-09 27 views
1

目前我正在製作一個應用程序,它是一個汽車租賃應用程序。該應用程序可以租一輛車,返回汽車等。爲了返回一輛汽車,我使用返回汽車的人的用戶名,嘗試查詢數據庫並取出他們租用的汽車,然後更新用戶以不再租用汽車並更新汽車詳細信息成爲可用。但是,我注意到,當我查詢數據庫我得到一個空回報。我看到我的桌子上有這個用戶,所以也許我的語法錯了,請幫忙。在我的sql一個servlet中查詢和更新2個單獨的表

protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { 
    String carid = ""; 
    String uname = req.getParameter("User_Name"); 
    String defaulted = "User has no car"; 

    int rs; 
    Connection conn = null; 
    java.sql.PreparedStatement st = null; 
    String nativeSQL = ""; 
    ResultSet result =null; 

    try { 
     Context ctx = new InitialContext(); 
     Context env = (Context) ctx.lookup("java:comp/env"); 
     DataSource ds = (DataSource) env.lookup("jdbc/carRentalSystem"); 
     conn = ds.getConnection(); 

     conn.setAutoCommit(false); 
     result = st.executeQuery("SELECT * FROM userdetails where User_Name='"+ uname+"'"); 
     if(result.next()) { 
      carid= result.getString("Car_Rental"); 
     } 

     st = conn.prepareStatement("update userdetails SET Car_Rental ='" + defaulted+ "' where User_Name='" + uname+ "' "); 
     st.clearParameters(); 
     rs = st.executeUpdate(); 

     st = conn.prepareStatement("update cardetails SET Availability = 'Available' where id='" + carid+ "'"); 
     st.clearParameters(); 
     rs = st.executeUpdate(); 
     if (rs != 0) { 
      res.sendRedirect("carRental.jsp"); 
      return; 
     } else { 

     } 
     conn.commit(); 


    } catch (Exception e) { 
     try{conn.rollback();}catch(Exception e1){} 
     e.printStackTrace(); 
    } finally { 
     try { 
      if (st != null) 
       st.close(); 
     } catch (java.sql.SQLException e) { 
     } 
     try { 
      if (conn != null) 
       conn.close(); 
     } catch (java.sql.SQLException e) { 
     } 

    } 
} 

}

我的錯誤讀取,在使用javax在com.rental.servlet.AdminReturnCarServlet.doPost(AdminReturnCarServlet.java:63) 如下

INFO: Server startup in 7620 ms 

顯示java.lang.NullPointerException .servlet.http.HttpServlet.service(HttpServlet.java:648) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilt erChain.internalDoFilter(ApplicationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java: 52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina。 core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java: 504) at org.apache.catalina.valves.AbstractAccessLogValve.i nvoke(AbstractAccessLogValve.java:620) 在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 在org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter。服務(CoyoteAdapter.java:502) 在org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132) 在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:684) 在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1539) at org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1495) 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)

+0

我在通過調試模式運行時遇到了一些問題,但是如果無法登錄,我收到了一個錯誤,但是我無法登錄。說明無效的密碼 –

+0

'uname'的價值是什麼?這是否與數據庫中的User_Name列完全匹配?在其他數據庫客戶端運行查詢時會發生什麼?另外,請參閱[SQL注入](https://www.owasp.org/index.php/SQL_Injection)攻擊。 –

+0

uname的值是由客戶端給出的用戶名,它完全匹配User_Name列的用戶名。並感謝您的閱讀! –

回答

2

你的錯誤是因爲java.sql.PreparedStatement st = null;不執行之前的行初始化:

st.executeQuery("SELECT * FROM userdetails where User_Name='"+ uname+"'"); 

希望它能幫助。

+0

非常有幫助,我修了幾行,現在我已經開始運行了! –

+1

很高興幫助,快樂的編碼! – P3trur0