2017-12-04 12 views
-1

JDBC "Statement"를 사용하여 CRUD 작업을 수행하는 코드가 있습니다. 자, 나는 모든 진술을 "PreparedStatement"로 대체 할 필요가있다. 그러나 나는 아래의 코드처럼 그것을 반환/사용하는 방법에 대해 혼란스러워한다. 도와주세요.유틸리티 클래스에서 PreparedStatement 반환/사용

MyDao.java

public class MyDao extends BaseDao{ 

    public MyDao() { 
     super(); 
    } 

    public void search(){ 
     ResultSet rs = null; 

     try { 
      statement.executeQuery("SELECT * FROM testTable"); 
      rs = statement.getResultSet(); 
      reset(); 
     } 
     catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 

} 

BaseDao

public class BaseDao { 

Connection connection=null; 
Statement statement = null; 

public BaseDao() { 
     try { 
      Class.forName("org.postgresql.Driver"); 
      connection = (Connection) DriverManager.getConnection("url","user","password"); 
      statement = connection.createStatement(); 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
     } 
    } 


    public void reset(){ 
     try{ 
      statement.close(); 
      connection.close(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
} 

답변

-1

먼저 데이터베이스에 대한 연결 매개 변수를 확인, 난 당신이 너무 로컬 호스트와 함께 테스트 로컬 데이터베이스를 사용한다고 가정합니다, 사용자 암호. 연결이 정상이면 콘솔 메시지를 인쇄 한 다음 CRUD를 수행하십시오.

+0

어떤 방식 으로든 질문에 대답하지 않습니다. – EJP

+0

내 쿼리는 PreparedStatement에 관한 것입니다. 위의 코드에서 Statement가 사용되는 방식으로 PreparedStatement를 사용할 수 있습니까? – AbhiN

0

앞에서 설명한대로 할 수 없습니다. 준비 할 SQL을 제공해야합니다. 하지만 전체 디자인이 잘못되었습니다. 클래스의 인스턴스 멤버로 Connections 및 Statement를 가져 가면 안됩니다. 연결은 언제든지 데이터베이스 서버에 의해 닫힐 수 있습니다. 특히 수명이 긴 연결은 어쨌든 새 연결이 필요합니다. 기회를주지 마라. 필요한 경우 두 가지를 모두 얻어야하며 연결 ​​풀을 사용하여 비용을 상환해야합니다.

+0

당신이 말했듯이 * 수업의 인스턴스 멤버로 Connections 및 Statements를 가져 가면 안됩니다 * 이유를 포함시킬 수 있으면 미래의 사용자에게 도움이 될 것이라고 생각합니다. 의견을 공유하십시오 – SpringLearner

+0

@EJP : 동의! 몇 년 전에 작성된 레거시 코드이며 클라이언트는 코드 수정을 원하지 않습니다. 내가 혼란 스럽다고 말했듯이, 나의 이해를 확인하기 위해이 질문을 게시했습니다. 그래도 감사합니다 :-) – AbhiN

+0

그러면 전혀 변경해서는 안됩니다. 어떤 경우에도 요청에 따라 변경할 수 없습니다. 준비 할 SQL없이 PreparedStatement를 작성할 수는 없습니다. – EJP