سؤال

أنا أعاني من مشكلة في تحويل نتيجة الاستعلام الخلية إلى فئة 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 إذا كان هناك أي نتيجة.

انظر: http://lists.mysql.com/mysql/177427

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top