문제

Sum을 사용할 때 MySQL 쿼리의 결과를 Java 클래스로 변환하는 데 약간의 문제가 있습니다.

MySQL에서 간단한 합계를 수행 할 때

SELECT SUM(price) FROM cakes WHERE ingredient = 'chocolate';

~와 함께 price 정수 인 것처럼 보입니다 SUM JDBC 드라이버의 버전에 따라 문자열과 때로는 정수를 반환합니다.

분명히 서버는 JDBC 드라이버에게 SUM 문자열이고, JDBC 드라이버는 때때로 '편리하게'정수로 변환합니다. (보다 Marc Matthews의 설명).

Java 코드는 일부를 사용합니다 beaninfo 그리고 내성 쿼리 결과와 함께 자동으로 (목록) Bean을 채우려면. 그러나 데이터 유형이 응용 프로그램이 배포 된 서버마다 다르면 분명히 작동 할 수 없습니다.

나는 문자열이나 정수를 얻지 못하지만 항상 동일한 데이터 유형을 가지고 있거나 적어도 어떤 데이터 타입을 얻을 것인지 미리 알고 싶습니다.

MySQL이 반환 할 데이터 유형을 알 수있는 방법이 있습니까? SUM Java 코드 내에서? 아니면 이것을 다루는 더 좋은 방법을 아는 사람이 있습니까?

도움이 되었습니까?

해결책

이것은 단지 추측 일 뿐이지 만, 아마도 정수에 캐스팅하면 MySQL이 항상 정수라고 말하도록 강요 할 것입니다.

SELECT CAST(SUM(price) AS SIGNED) FROM cakes WHERE ingredient = 'marshmallows';

다른 팁

나는 전에 MySQL과 함께 일한 적이 없어서 이유를 말할 수 없지만 당신이 말하면 :

ResultSet rs = statement.executeQuery("SELECT SUM(price) FROM cakes WHERE ingredient = 'chocolate'");
int sum = 0;
if(rs.next())
size = Integer.parseInt(rs.getString(1));

그런 다음 문서가 말한 것처럼 반환 된 데이터 유형에 관계없이 문제가되지 않아야합니다.

String GetString (int columnIndex)은 sqlexception을 던졌습니다


이 resultSet 객체의 현재 행에서 지정된 열의 값을 검색합니다. 문자열로 Java 프로그래밍 언어로

나는 찾았다 COALESCE(SUM(price),0) 결과가없는 경우 항상 필드가 0을 반환하는 데 좋습니다.

보다: http://lists.mysql.com/mysql/177427

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top