2014-01-22 5 views
0

나는 HSQLDB를 사용하는 JAVA 응용 프로그램을 가지고 있습니다. 'marks'라는 테이블이 있는데 'mark'라는 정수 열이 들어 있습니다. HSQLDB DatabaseManager를 사용하여 다음 쿼리를 실행하는 경우 : SELECT AVG (CAST (FLOAT로 표시)), SUM (표시) FROM where where = 5 및 suid = 8 DBM은 올바른 값을 반환합니다. 1.5 및 3; 마크 1과 2에 대해.Prepared Statement가 잘못된 값을 반환합니다.

같은 쿼리로이 데이터를 읽으려면 다음과 같이 JAVA 코드를 사용하면 java가 항상 2를 출력합니다. 평균과 합계. 내가 뭘 잘못하고 있는지 전혀 모르겠다. 어쩌면 당신이 나를 도울 수 있습니다.

 double avg = 0; 
    PreparedStatement stmt = dbcn.prepareStatement("SELECT AVG(CAST(mark as FLOAT)), SUM(mark) FROM marks WHERE sid=? AND suid=?"); 
    stmt.setInt(1, 5); 
    stmt.setInt(2, 8); 
    ResultSet gARS = stmt.executeQuery(); 
    while(gARS.next()){ 
     avg = gARS.getDouble(1); 
     System.out.println(gARS.getInt(2)); 
    } 
    return avg; 

답변

1

System.out은 SUM을 먼저 인쇄해야합니다 (3). 그런 다음이 메서드는 평균값 1.5을 반환합니다. 그것은 avg가 반올림되어 인쇄 된 것 같습니다.

double avg = callToDB(...); 
System.out.printf("%10.0f", avg); // ERROR .0 should be at least .1 

그래서 형식 문자열을 검사 :

은 아마 당신은 뭔가를 가지고있다. 반올림 한 경우 int 캐스팅 일 수 있습니다.

+0

빠른 답변 감사드립니다. 나는 당신의 제안을 시도했지만 여전히 반올림합니다. 나는 2x mark 1과 1 x mark 2로 시도했는데, 이제는 1이라고 말하고있다./ –

+0

Ahh, 나는 가능한 오류, 소수 자릿수가 반올림 된 형식을 보여주고 싶었다. 1.333에 대해 1이 발생했습니다. –

+0

알았어, 그게 다야. 대단히 감사합니다. –

관련 문제