2016-11-12 3 views
0

단일 쿼리로 2 개의 테이블에 데이터를 삽입하고 싶습니다. 오류가 발생합니다.mysql 테이블에 데이터를 삽입하려고합니다.

mycode는 아래에 표시됩니다.

public class Trains extends HttpServlet { 
    public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { 
     response.setContentType("text/html"); 
     PrintWriter out=response.getWriter(); 
     int tid=Integer.parseInt(request.getParameter("tid")); 
     String tname=request.getParameter("tname"); 
     String ttype=request.getParameter("ttype"); 
     String stncode=request.getParameter("stn_code"); 
     String stnname=request.getParameter("stn_name"); 
     String availtime=request.getParameter("Avail_time"); 
     String depttime=request.getParameter("Dep_time"); 
     String halttime=request.getParameter("Halt_time"); 
     String dist=request.getParameter("distance"); 

     String[] avail_day=request.getParameterValues("week"); 

     try { 
      String query="INSERT INTO Train_info(Train_ID,Train_Name,Train_Type,Runs_On) values(?,?,?,?); INSERT INTO Train_route(stn_code,stn_name,arrival_time,Destn_time,Halt_time,Distance) values(?,?,?,?,?,?)"; 
      Class.forName("com.mysql.jdbc.Driver"); 
      Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/Railway","root","mysql123"); 
      PreparedStatement ps=con.prepareStatement(query); 

      ps.setInt(1, tid); 
      ps.setString(2, tname); 
      ps.setString(3, ttype); 
      ps.setString(4, stncode); 
      ps.setString(5, stnname); 
      ps.setString(6, availtime); 
      ps.setString(7, depttime); 
      ps.setString(8, halttime); 
      ps.setString(9, dist); 
      for(int i=0;i<avail_day.length;i++){ 
      ps.setString(10, avail_day[i]); 
      } 

      int i=ps.executeUpdate(); 
      if(i>0){ 
       out.println("Successfully Registration"); 
       response.sendRedirect("TrainRoute.jsp"); 
      } 
      else{ 
       out.println("Registration failed"); 
       response.sendRedirect("Error.java"); 
      } 
     } 
     catch(ClassNotFoundException ce){ 
      ce.printStackTrace(); 
     } 
     catch(Exception e){ 
      out.println(e); 
     } 
    } 
} 

오류는 다음과 같습니다 -

은 java.sql.SQLException : 당신은 당신의 SQL 구문에 오류가 있습니다; 근처 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인 라인 1

+0

한번에 두 개의 테이블에 삽입 할 수 없습니다 –

+0

'ps.setString (10, avail_day [i]);'... 이것은 10 번째 매개 변수에 다른 값을 계속 할당하는 것은 의미가 없습니다. –

+1

두 개의 삽입 하나의 트랜잭션에서는 있지만 단일 쿼리에서는 그렇지 않습니다. –

답변

1

에서 'Train_route (stn_code, stn_name, ARRIVAL_TIME, Destn_time, Halt_time, DIST INTO INSERT 것은'이 참조 : Java - Mysql - Multiple query

INSERT INTO 당신의 구문 오류 메시지가 query 문자열의 삽입을 호출합니다. MySQL의 JDBC 드라이버가, 대부분의 MySQL의 드라이버처럼 만 Connection.preparedStatement() 전화로 통화 당 하나 개의 쿼리를 받아들입니다.

당신은 리팩토링해야합니다 당신의 두 개의 코드를 사용하는 코드 각 테이블에 대해 한 번.

다른 제조사 및 모델의 SQL 테이블 서버와 작업하는 데 익숙하다면이 제한으로 인해 문제가 발생할 수 있습니다.