2009-05-24 3 views
0

JDBC를 사용하려고하는데 일부 경우에는 쿼리가 작동하지만 다른 경우에는 작동하지 않습니다. 정말 도움을 주시면 감사하겠습니다.JDBC에서 이상한 문제가 발생합니다. select는 null을 반환합니다.

내 코드의 일부 : 내가 변경하는 경우에는

public Result getSpecificTopic() 
    { 
     String query = "Select msg_body, msg_author from lawers_topic_msg";// where msg_id=2 order by msg_id desc"; 
     try 
     { 
      con = mysql.getConnection(); 
      //Statement stmt = con.createStatement(); 
      PreparedStatement stmt = con.prepareStatement(query); 
      //stmt.setInt(1, topicId); 
      ResultSet rs = stmt.executeQuery(query); 
      int rowCount = rs.getRow(); 
      specificTopic = ResultSupport.toResult(rs); 

      con.close(); 
      stmt.close(); 
     } 
     catch(Exception e) 
     { 
     } 
     return this.specificTopic; 
    } 

    public void setTopicId(String num) 
    { 
     this.topicId = Integer.parseInt(num); 
    } 

    public int getTopicId() 
    { 
     return this.topicId; 
    } 

그런 다음

String query = "Select msg_body, msg_author from lawers_topic_msg where msg_id = " + topicId; 

결과 집합의 retunrs 아무것도 .... 내가 파괴 오전

String query = "Select msg_body, msg_author from lawers_topic_msg"; 

내 여기로 와서 아직도 문제가 무엇인지 알아낼 수 없다.

+3

당신이 그것을 실행하기 전에 콘솔에 쿼리를 인쇄 해보십시오나요? 출력을 가져 와서 데이터베이스에 직접 실행하십시오. – BobbyShaftoe

+0

감사합니다. 당신이 옳았습니다. 의견에 동의 할 수 있으면 좋겠습니다. – Dmitris

답변

3

첫 번째 단계에서는 예외가 throw되지 않도록하는 것이 좋습니다. 최소한 catch() 블록에 로그를 남기십시오.

또한 생성 된 SQL을 로깅 할 가치가 있으며 실제로 데이터베이스를 직접 실행할 때 데이터베이스에서 기대하는 결과를 실제로 반환하는지 확인하십시오.

데이터베이스가 여러 개있는 경우 내가 생각하는 것과 달리 실행 중인지 확인할 가치가 있습니다. 이전에 그런 식으로 발견 된 것을 인정하기가 부끄럽습니다. 코드와

+0

+1 "do catch block". – extraneon

2

몇 가지 문제, 내가 짧게하겠습니다 :

당신은 오류 관리를하지 않는 것하고 aspecially하지 때문에,이 층에서 시도/캐치와 encapuslate하지 않는

. this.specificTopic은 전역으로 보이므로 쿼리가 실패하면 this.specificTopic에 저장된 내용을 반환합니다.

또한 BobbyShaftoe가 말한 것을 시도하십시오. 콘솔에서 인쇄하거나 디버거를 사용하십시오. 이렇게하면 무엇이 잘못되었는지를 알 수 있습니다.

+0

topicId는 같은 클래스의 private 변수입니다. 하지만 당신은 쿼리를 실행하여 데이터베이스를 직접 실행하는 것에 집중해야합니다. – Dmitris

2

내 첫 번째 추측은 Integer.parseInt (num)가 예외를 throw 할 수 있습니다. 그렇다면 SQL 문이 손상됩니다.

두 번째로 Makach가 지적했듯이 몇 가지 문제가 있습니다. 먼저 포괄 당신이 문자열 연결을 사용하지 않아야합니다

,

 ....where msg_id = " + topicId; 

아니라

 ....where msg_id = ?" 
     stmt.set Int(1,topicId) 

편집과 같은 : 그것은 당신이 어쨌든 노력하고 있었다 무엇을 먹으 렴 보인다 SO 일부 문자에 짜증.

+0

내 코드와 관련하여 조언 해 주셔서 감사합니다. 나는 지금 그것을 바른 길로 바꾸었다. – Dmitris

관련 문제