بسم الله الرحمن الرحيم

 

 

هل لديك مشروع و تريد تخزين و استرجاع البيانات من صور و مقاطع صوتية و مرئية بقاعدة بيانات Oracle؟

 

هذا الدرس سوف تقوم من خلاله بعمل المطلوب. و سوف نقوم باستعراض الدرس بالشفرات البرمجية المطلوبة لفهم الموضوع على أكمل وجه (و الكمال لله تعالى).

 

 

 

الـ BLOB و الـ CLOB: و هي اختصار لـ Binary Large Object و اختصار لـ Character Large Object. من ناحية أخرى، هذان النوعان صمما لحفظ و استرجاع البيانات الضخمة بقاعدة البيانات. و التي تصل سعة التخزين إلى أربع جيجابايت (4 GB) من البيانات. و هما من الأنواع التي توجد بالـ SQL3، و التي هي مدعومة من الـ JDBC 2.0. الـ JDBC 2.0 تخدم نوعان جديدان و هما الـ BLOB و الـ CLOB للتعامل مع الأنواع الجديدة من الـ SQL3. و بهذا الدرس سوف نستخدم الـ BLOB لتخزين و استرجاع الصور من و إلى قاعدة البيانات.

 

أولاً سوف نقوم بإنشاء جدول جديد باستخدام SQL Plus أو بأي طريقة أخرى و نسميه demo:

 

CREATE TABLE demo (id NUMBER(6), image BLOB);

 

كما تلاحظ يوجد لدينا عمودان. الأول و هو مخصص لإضافة رقم خاص لكل صورة و هو من نوع NUMBER، و العمود الثاني و هو لتخزين البيانات (مثل: الصور و المقاطع الصوتية و المرئية) و هو من نوع BLOB.

 

سوف نقوم باستعراض أربع أمور:

 

  • تخزين البيانات بقاعدة البيانات.
  • استرجاع البيانات من قاعدة البيانات و حفظها على هيئة ملفات.
  • حذف البيانات من قاعدة البيانات.
  • إظهار البيانات و استخدامها ببرامج الجافا.

 

 

 

تخزين البيانات بقاعدة البيانات:

الآن سوف نقوم بكتابة شفرة برمجية بلغة الجافا لتخزين الصور بقاعدة بيانات Oracle.

 

الشفرة البرمجية:

 

import java.io.*;

import java.sql.*;

import oracle.sql.BLOB;

import oracle.jdbc.driver.*;

 

public class WriteBlob {

     private Connection con;

     private String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL2";

     private String user = "scott";

     private String password = "tiger";

     

     public WriteBlob() {

          try {

             DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

               con = DriverManager.getConnection(url, user, password);

          }

          catch (SQLException e) {

               System.err.println(e.getMessage());

               e.printStackTrace();

          }

     }

     public static void main(String[] args) throws Exception, IOException {

          new WriteBlob().process();

     }

     public void process() throws IOException, SQLException {

          int rows = 0;

          FileInputStream fin = null;

          OutputStream out = null;

          ResultSet rslt = null;

          Statement stmt = null;

          BLOB photo = null; // NOTE: oracle.sql.BLOB!!!

          long person_id = 0;

          

          try {

               con.setAutoCommit(false);

               stmt = con.createStatement();

rslt = stmt.executeQuery("SELECT image FROM demo WHERE id = 1 FOR UPDATE NOWAIT");

               while (rslt.next()) {

                    rows++;

                    photo = (BLOB)rslt.getBlob("image");

               }

               rslt.close();

               rslt = null;

               /**

       * If it doesn't exist, then insert a row in the information table

                * This creates the LOB locators

                */

               if (rows == 0) {

rows = stmt.executeUpdate("INSERT INTO demo VALUES (1, empty_blob())");

                    System.out.println(rows + " rows inserted");

                    // Retrieve the locator

                    rows = 0;

rslt = stmt.executeQuery("SELECT image FROM demo WHERE id = 1 FOR UPDATE NOWAIT");

                    rslt.next();

                    photo = ((OracleResultSet)rslt).getBLOB("image");

                    rslt.close();

                    rslt = null;

               }

               stmt.close();

               stmt = null;

               // Now that we have the locator, lets store the photo

               File binaryFile = new File("jfc.gif");

               fin = new FileInputStream(binaryFile);

               out = photo.getBinaryOutputStream();

               // Get the optimal buffer size from the BLOB

               byte[] buffer = new byte[photo.getBufferSize()];

               int length = 0;

               while ((length = fin.read(buffer)) != -1) {

                    out.write(buffer, 0, length);

               }

               // you need to close the output stream before

               // you commit, or the changes are lost!

               out.close();

               out = null;

               fin.close();

               fin = null;

               con.commit();

          }

          catch (SQLException e) {

<P class=
  • Currently 75/5 Stars.
  • 1 2 3 4 5
25 تصويتات / 366 مشاهدة
نشرت فى 15 سبتمبر 2005 بواسطة mara

ساحة النقاش

عدد زيارات الموقع

947,030