السلام عليكــم ورحمـة الله وبركاتــه
في مصطلحين في JDBC الي هما BLOB and CLOB ممكن حد يقولنا شو هما وشو الفرق بينهم
وكييفيه عملية Insert للنوعين في قاعده بيانات MySQL
وشكرا
:)
السلام عليكــم ورحمـة الله وبركاتــه
في مصطلحين في JDBC الي هما BLOB and CLOB ممكن حد يقولنا شو هما وشو الفرق بينهم
وكييفيه عملية Insert للنوعين في قاعده بيانات MySQL
وشكرا
:)


تعريف Sun
Clob
اقتباسAn SQL CLOB is a built-in type that stores a Character Large Object as a column value in a row of a database table.
Blob
اقتباسAn SQL BLOB is a built-in type that stores a Binary Large Object as a column value in a row of a database table.
يعني blob لbinary date وclob للtext data
وتوجد الميثود setClob و setBlob في PreparedStatement، الأولى ممكن تمرر له object يرث من Reader وللثانية object يرث من InputStream
بالزبط هاي النقطه الي كنت بدي اصل الها انو ال blob بيستخدم في binary date عشان هيك انا شفت في بعض الكتب انو blob بستخدم في حاله اردت حفظ صور في الداتا بيس بيسخدمو ال blob عشان يحولو الصورة الي binary data ويتم حفظ الصورة ولكن لست متاكد من النقطه هاي
عشان هيك كنت بدي اسئل هل صحيح هاي الجمله واذا صحيح كيف يتم تحويل الي binary ومن ثم حفظها في الداتا بيس ..


كما قلت لك، إستعمل setBlob الخاصة بPreparedStatement وأيضا getBlob الخاصة بResutlSet
وهنا مثال لتخزين صورة في قاعدة البيانات ومثال آخر يقرأ الصورة من قاعدة البيانات ويخزنها في القرص الصلب
الجدول الذي استعملته "images" يحتوي على عمودين، الأول فيه مسار الصورة والثاني فيه الصورة نفسها
أظن أن المثال واضح لا يحتاج للشرح، لكن إذا كان هناك تساؤل فاطرحه
import java.sql.*;
import java.sql.*;
تمام المثال الاول فهمتو وزبط وكل شي المثال الثاني في سطرين ما فهمتو ممكن توضيح اكثير :
Blob bl = rs.getBlob(2);
byte[] data = bl.getBytes(1L, (int)bl.length());
FileOutputStream out = new FileOutputStream("newImage.png");
out.write(data);

Blob bl = rs.getBlob(2);
كما تعلم، ResultSet لديها ميثود خاص بكل نوع، getInt, getString, ....، وهنا استعملنا getBlob، والرقم 2 يعني العمود الثاني
Blob هي interface موجودة في الpackage java.sql وهي تمثل معطى من نوع BLOB، والميثود getBlob ترجع object يكون يعمل implementation لهذه الinterface، وكل jdbc driver يجب أن يوفر هذه الimplentation
byte[] data = bl.getBytes(1L, (int)bl.length());
نسترجع الصورة على شكل مصفوفة من صنف byte عن طريق الميثود getBytes، الargument الأول هو نقطة البداية، أي أننا سنبدأ من البايت الأول، L لجعل القيمة من صنف long، لأن الميثود تنتظر قيمة long
الargument الثاني هو نقطة النهاية، وهي تساوي طول الصورة
FileOutputStream out = new FileOutputStream("newImage.png");الآن لدي الصورة على شكل مصفوفة byte، وأريد كتابتها في القرص الصلب، فأستعمل FileOutputStream والميثود write التي تقبل مصفوفة byte وتكتبها في الملف الذي أعطينا إسمه في الconstructor
أنا لا أشرح جيدا، لذلك لم أرفق الكود بالشرح، لأن شرحي كارثي كما العادة :D
لا بالعكس طريقة شرحك رائعه وسهله كثير ومفهومه كثير الحمد لله هلا فهمت المثال كويس وراح اطبقو واذا لقيت مشاكل ثانيه راح اقولك
:)


بما أنك فهمت هات الفلوس :cash: ، أنا لا أشرح بالمجان :evil:
بما أنك جديد سأعملك تخفيض B)
سأكون كريما هذه المرة ولن أطالبك بأي شيء :wink:
الله يزيد كرمك دايما ودايما ان شالله وان شاء الله بكون مجتهد معكم في القسم :)
تم تعديل هذه المشاركة بواسطة Tigger_it في 5 أغسطس 2009 في 11:36


استاذي herch
شكرا لك على الاجابة المفصلة الرائعة وبارك الله في علمك .