SUMのデータ型はMySQLになります
-
11-07-2019 - |
質問
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を返すようにするのに適しています。
所属していません StackOverflow