3

SUM を使用しているときに、MySQL クエリの結果を Java クラスに変換する際に少し問題があります。

MySQL で単純な SUM を実行する場合

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

price整数でSUMあるため、JDBC ドライバーのバージョンに応じて、文字列を返す場合と整数を返す場合があるようです。

どうやらサーバーはJDBCドライバーに結果が文字列であることを伝え、JDBCドライバーはSUMこれを「便利に」整数に変換することがあります。( Marc Matthews の説明を参照してください)。

Java コードは、一部のBeanInfoIntrospectionを使用して、Bean (のリスト) にクエリの結果を自動的に入力します。ただし、アプリケーションがデプロイされているサーバー間でデータ型が異なる場合、これは明らかに機能しません。

文字列を取得するか整数を取得するかは気にしませんが、常に同じデータ型を保持するか、少なくともどのデータ型を取得するかを事前に知りたいと考えています。

SUMJava コード内からMySQL によって返されるデータ型を知る方法はありますか? または、これに対処するためのより良い方法を誰かが知っていますか?

4

3 に答える 3

10

これは推測にすぎませんが、整数にキャストすると、MySQL は常に整数であると認識しなければならない可能性があります。

SELECT CAST(SUM(price) AS SIGNED) FROM cakes WHERE ingredient = 'marshmallows';
于 2008-11-27T09:23:28.683 に答える
2

私はこれまで 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));

ドキュメントに記載されているように、返されたデータ型に関係なく、問題は発生しないはずです。

文字列 getString(int columnIndex) が SQLException をスローする


この ResultSet オブジェクトの現在の行にある指定された列の値をJava プログラミング言語の文字列として取得します

于 2008-11-27T10:21:48.813 に答える
-1

COALESCE(SUM(price),0)結果がなかった場合、フィールドが常に 0 を返すようにするのが良いと思いました。

参照: http://lists.mysql.com/mysql/177427

于 2009-10-28T11:43:12.067 に答える