質問

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

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

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

price が整数の場合、JDBCドライバーのバージョンに応じて、 SUM が文字列を返し、整数を返す場合があります。

サーバーは、 SUM の結果が文字列であることをJDBCドライバーに伝えており、JDBCドライバーはこれを整数に「都合よく」変換することがあります。 (マークマシューズの説明を参照)。

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

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

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

役に立ちましたか?

解決

これは単なる推測ですが、整数にキャストすると、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)throws SQLException


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

COALESCE(SUM(price)、0)は、結果がない場合にフィールドが必ず0を返すようにするのに適しています。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top