نوع البيانات من مجموع النتيجة في الخلية
-
11-07-2019 - |
سؤال
أنا أعاني من مشكلة في تحويل نتيجة الاستعلام الخلية إلى فئة Java عند استخدام المبلغ.
عند أداء مبلغ بسيط في الخلية
SELECT SUM(price) FROM cakes WHERE ingredient = 'chocolate';
مع price
يجري عدد صحيح ، يبدو أن SUM
في بعض الأحيان بإرجاع سلسلة وأحيانا صحيح ، اعتمادا على إصدار من برنامج تشغيل JDBC.
يبدو أن الخادم لا أقول JDBC driver أن نتيجة SUM
هو سلسلة ، JDBC driver أحيانا 'سهولة' تحويل هذا إلى عدد صحيح.(انظر مارك ماثيوز' الشرح).
جافا البرمجية يستخدم بعض BeanInfo و التأمل إلى التلقائى ملء (قائمة) فول(s) مع نتيجة الاستعلام.ولكن من الواضح أن هذا لا يمكن أن تعمل إذا كانت أنواع البيانات تختلف بين الملقمات حيث تم نشر التطبيق.
لا يهمني سواء أحصل على سلسلة أو عدد صحيح ، ولكن أود أن يكون دائما على نفس نوع البيانات ، أو على الأقل تعرف مسبقا نوع البيانات التي سوف يكون الحصول على.
هل هناك طريقة لمعرفة نوع البيانات التي يتم إرجاعها بواسطة الخلية SUM
من داخل كود جافا?أو لا أحد يعرف أفضل طريقة للتعامل مع هذا ؟
المحلول
هذا مجرد تخمين لكن ربما صب على عدد صحيح سوف يجبر الخلية لنقول دائما هو عدد صحيح.
SELECT CAST(SUM(price) AS SIGNED) FROM cakes WHERE ingredient = 'marshmallows';
نصائح أخرى
لم يسبق لي أن عملت مع الخلية قبل لذلك لا أستطيع أن أقول لماذا ولكن إذا كنت أقول:
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(الباحث columnIndex) يلقي SQLException
باسترداد قيمة العمود المعين في الصف الحالي من هذا ResultSet كائن كسلسلة في لغة البرمجة جافا
وجدت COALESCE(SUM(price),0)
جيد دائما ضمان الميدان عاد 0 إذا كان هناك أي نتيجة.