2014-01-24 1 views
1

JSP로부터 정보를 요청하고이를 Java Servlet을 통해 데이터베이스에 저장하려고합니다. 나는 이런 (단순화 된) 자바 서블릿을 가지고있다.하나의 서블릿 클래스를 서블릿과 DAO 클래스로 나누기

protected void doPost(//parameters etc.){ 

String brand = request.getParameter("brand"); 
String model = request.getParameter("model"); 
CarBean newCar = new CarBean(brand, model); 

try { 
      Connection con = ConnectionFactory.getInstance().getConnection(); 
      PreparedStatement ps = con.prepareStatement("INSERT INTO Cars (brand, model)" 
      + "VALUES (?, ?)";    
      ps.setString(1, newCar.getBrand()); 
      ps.setString(2, newCar.getModel()); 
      ps.executeUpdate(); 
      ps.close(); 
} catch ... { 
} 

모든 것이 올바르게 작동하지만 이제는이 데이터베이스 연결을 자체 클래스로 분리하려고합니다. 데이터베이스에 대한 세 가지 방법 (추가, 삭제, 편집)이 필요한 클래스를 만들고 싶습니다.

다른 패키지에있는 클래스에서 어떻게 newCar 객체를 매개 변수로 사용할 수 있습니까? 나는 이것을했지만, 작동하지 않습니다. 그것은

cannot find symbol, symbol: method addCar(CarBean), location: class MainServlet 

말을이 서블릿 방법 addCar를 만들기 위해 제공하는 것

protected void doPost(//parameters etc.){ 

String brand = request.getParameter("brand"); 
String model = request.getParameter("model"); 
CarBean newCar = new CarBean(brand, model); 
addCar(newCar); 

,하지만 할 수 없습니다

public class DAO{ 

public void addCar(CarBean newCar) throws ServletException { 
try { 
     Connection con = ConnectionFactory.getInstance().getConnection(); 
     PreparedStatement ps = con.prepareStatement("INSERT INTO Cars (brand, model)" 
     + "VALUES (?, ?)"; 
     ps.setString(1, newCar.getBrand()); 
     ps.setString(2, newCar.getModel()); 
     ps.executeUpdate(); 
     ps.close(); 
} catch (SQLException e) { 
      throw new ServletException(e); 
} 

... 
public void deleteCar ... 
public void editCar ... 

하고 난 그냥 같이 서블릿에서 addCar 전화 권리. addCar 메서드는 DAO 클래스 (Database 폴더에 있음)에 있어야합니다.

이것이 상당히 혼란 스럽나요? 데이터를 다른 클래스로 전송하는 try-catch를 이동하는 방법은 무엇입니까?

+2

당신은 * 작동하지 않는 것을 의미합니까? 어떤 종류의 오류 또는 예외가 발생합니까? –

+1

어떤 오류가 발생합니까? –

+0

예제가 올바르게 보이지만 다른 패키지를 사용하면 문제가 없지만 서블릿에서 가져와야합니다. – Teg

답변

1

오류 메시지는 MainServlet 클래스에서 addCar이라는 메서드를 찾고 있음을 나타내고 있습니다. 물론 찾을 수 없습니다.

addCar 메서드를 찾을 위치를 지정해야합니다. 서블릿은 DAO 객체에 대한 참조를 가져야하며 서블릿 코드는 DAO 객체에서 메소드를 호출해야합니다.

, 더 상태처럼, 서블릿에 대한 인스턴스 변수를 만들 수있다이 DAO를 가정 :

private Database.DAO dao = new Database.DAO(); 

과 doPost 메소드에서에 addCar를 호출 할 무엇

dao.addCar(newCar); 
관련 문제