2012-03-08 3 views
0

편집 : 죄송합니다. 이 JDBC 문은 작동합니다. SQL Plus로 커밋하는 것을 잊었습니다. 폴 감사합니다.JDBC 결과 집합 집계 함수

나는 SQL Plus를 사용하여 데이터베이스 쿼리 할 때 : 나는 여러 가지 방법이 JDBC, 를 통해 데이터베이스에서 이러한 집계 카운트를 잡아하지만 모든 경우에 그들이 0

을 반환 시도했습니다

select count(tid) from retweets where tid = 35   => 2 
select count(tid) from tweets where replyto = 35  => 1 

을 예 :

Statement stmt = m_con.createStatement(); 
ResultSet retweets = stmt.executeQuery("select count(tid) from retweets where tid = 35"); 

if (retweets.next()) { System.out.println("# of Retweets: " + retweets.getInt(1));} 
ResultSet replies = stmt.executeQuery("select count(tid) Replies from tweets where replyto = "+tid); 


if (replies.next()) {System.out.println("# of Replies : " + replies.getInt("Replies"));} 

두 번 모두 0이 인쇄되었습니다. 왜 이런 일이 있었고 어떻게 해결할 수 있습니까? 감사.

+1

위법은 아니지만 리트 윗이나 트윗에 35에 해당하는 레코드가 있는지 확인하십시오. – gangreen

+1

나는 첫 번째 유형 (getInt (1) 사용)을 말 그대로 수백 번 완료했으며, 항상 작동합니다. 프로그램과 SQL * Plus에 대해 동일한 데이터베이스를 사용하는 것처럼 우리에게 말하지 않는 것이 달라야합니다. –

답변

2

뭔가 :

public class TweetDao { 
    private static final String SELECT_TWEETS = "SELECT COUNT(tid) as TC FROM TWEETS WHERE replyTo = ? "; 
    // inject this - setter or constructor 
    private Connection connection; 

    public int getTweetCount(int tid) throws SQLException { 
     int tweetCount = -1; 
     PreparedStatement ps = null; 
     ResultSet rs = null; 
     try { 
      ps = this.connection.prepareStatement(SELECT_TWEETS); 
      ps.setInt(1, tid); 
      rs = ps.executeQuery(); 
      while (rs.hasNext()) { 
       tweetCount = rs.getInt("TC"); 
      } 
     } finally { 
      DatabaseUtils.close(rs); 
      DatabaseUtils.close(ps); 
     } 
     return tweetCount; 
    } 
} 
1

PreparedStatement을보십시오 :이 같은

String sql = "select count(tid) from retweets where tid = 35"; 
PreparedStatement stmt = m_con.prepareStatement(sql); 
+0

PreparedStatement를 사용하려는 경우 전체적인 방법으로 바운드 변수를 사용할 수도 있습니다. –

0
**try { 
      ps = this.connection.prepareStatement(SELECT_TWEETS); 
      ps.setInt(1, tid); 
      rs = ps.executeQuery(); 
      while (rs.hasNext()) { 
       tweetCount = rs.getInt("TC"); 
      } 
     } finally { 
      DatabaseUtils.close(rs);`enter code here`** 

를 내가 여기에 루프 동안 우리는 오직 하나의 결과를 얻고 있기 때문에 사용의 필요를 생각하지 않습니다. 내가 틀렸다면 알려주세요.