2017-07-22 4 views
0

私は準備されたステートメントを実行するように見えません。出力メッセージについては、「1フライトが正常に更新されました」ではなく「0フライトが正常に更新されました」と表示されます。データベース接続(db.Connパッケージ内)が動作しており、Eclipse自体に目に見えるエラーはありません。ここでexecuteUpdateが動作しません

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
    <%@page import="java.sql.*, dbConn.*" %> 

      String flightid=request.getParameter("id"); 
      String aircraftid=request.getParameter("aircraftid"); 
      String OAirport=request.getParameter("OAirport"); 
      String OCountry=request.getParameter("OCountry"); 
      String DAirport=request.getParameter("DAirport"); 
      String DCountry=request.getParameter("DCountry"); 
      String ecost1=request.getParameter("ecost"); 
      String bccost1=request.getParameter("bccost"); 
      String fccost1=request.getParameter("fccost"); 
      String DDate=request.getParameter("DDate"); 
      String DTime=request.getParameter("DTime"); 
      String ADate=request.getParameter("ADate"); 
      String ATime=request.getParameter("ATime"); 
      String FT=request.getParameter("FT"); 
      String DR=request.getParameter("DiscountRate"); 


      Connection conn=database.getConnection(); 
      String sql="Update flightschedule F ,promotion P set F.aircraftid=?, F.OAirport=?,F.OCountry=?,F.DAirport=?,F.DCountry=?, F.ECost=?, F.BCcost=?,F.FCcost=?, F.DDate=?,F.DTime=?,F.ADate=?,F.ATime=?,F.Flighttime=?, P.DiscountRate=? where F.flightid=P.flightid and F.flightid=? "; 
      PreparedStatement pstmt=conn.prepareStatement(sql); 

      pstmt.setString(1, flightid); 
      pstmt.setInt(2, Integer.parseInt(aircraftid)); 
      pstmt.setString(3, OAirport); 
      pstmt.setString(4, OCountry); 
      pstmt.setString(5, DAirport); 
      pstmt.setString(6, DCountry); 
      pstmt.setString(7, ecost1); 
      pstmt.setString(8, bccost1); 
      pstmt.setString(9, fccost1); 
      pstmt.setString(10, DDate); 
      pstmt.setString(11, DTime); 
      pstmt.setString(12, ADate); 
      pstmt.setString(13, ATime); 
      pstmt.setString(14, FT); 
      pstmt.setString(15,DR); 

      int count=pstmt.executeUpdate(); 
      out.println(count+ " flight successfully updated"); 
      conn.close(); 

      %> 

は私の2つのデータベースです:

https://s9.postimg.org/xcaujfq0f/promotion_table.jpg https://s23.postimg.org/9bawk28u3/flight_schedule.jpg

私はFlightScheduleのフライトIDを参照振興からのフライトIDの外部キーを持っています。

P.S私はMVCアーキテクチャについて知っていますが、サーブレットを使用する前にまずこの問題を解決したいと思います。あなたが発注されている

+3

パラメータは数あなたの用途に応じて置換されます。例えば。クエリの最初の '?'は 'set F.aircraftid =?'、 'pstmt.setString(1、flightid);'になります。これはあなたが望むものではありません。そのため、パラメータを正しく再割り当てしてください。 – Solarflare

答えて

0

/間違っPreparedStatementパラメータを設定するには、次を試してみてください。

pstmt.setInt(1, Integer.parseInt(aircraftid)); 
pstmt.setString(2, OAirport); 
pstmt.setString(3, OCountry); 
pstmt.setString(4, DAirport); 
pstmt.setString(5, DCountry); 
pstmt.setString(6, ecost1); 
pstmt.setString(7, bccost1); 
pstmt.setString(8, fccost1); 
pstmt.setString(9, DDate); 
pstmt.setString(10, DTime); 
pstmt.setString(11, ADate); 
pstmt.setString(12, ATime); 
pstmt.setString(13, FT); 
pstmt.setString(14,DR); 
pstmt.setString(15, flightid); 
関連する問題