الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مثال لكيفية تخزين الملفات في قاعدة البيانات واسترجاعها

بدأه herch في 18 فبراير 2010 · 9 رد · 2,760 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

في المثال التالي، نقوم بتخزين واسترجاع ملف من وإلى قاعدة بيانات MySQL.

الخانة التي ستحتوي على الملف يجب أن تكون من صنف "BLOB "Binary Large Object أو "CLOB "Character Large Object. وكما يتضح من الإسم فإن ال BLOB تستخدم بالنسبة لل Binary files بينما CLOB تستعمل لل Character files.

الجدول الذي سنستخدمه هو على الشكل التالي، وهو يحتوي على أسماء أشخاص وصورهم. الصور هي عبارة عن binary data، لذلك استخدمنا الصنف BLOB بدل CLOB. في MySQL، هناك أربعة أنواع من BLOB، تختلف حسب الحجم الذي تستطيع تخزينه TinyBLOB, BLOB, MediumBLOB, LongBLOB

post-181903-12665146270314_thumb.png

الفئة المسؤولة عن تخزين الصورة

package photostore;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class StorePhoto {

	public void store(Connection con, String name, InputStream photo)
			throws SQLException {

		PreparedStatement statement = con.prepareStatement("insert into photos(name, photo) values(?, ?);");
		statement.setString(1, name);
		statement.setBlob(2, photo);
		statement.executeUpdate();
		System.out.println("Photo added.");
	}
}

الفئة التي تقوم باسترجاع الصورة

package photostore;

import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class RetrievePhoto {

	public byte[] retrievePhoto(Connection con, String name)
			throws SQLException {

		PreparedStatement statement = con.prepareStatement("select photo from photos where name = ?;");
		statement.setString(1, name);
		ResultSet rs = statement.executeQuery();
		if (rs.next()) {
			Blob photo = rs.getBlob(1);
			return photo.getBytes(1, (int)photo.length());
		} else {
			System.out.println("No photo found.");
			return new byte[]{};
		}
	}
}

الآن نقوم ببناء واجهة نستخدم فيها الفئتين السابقتين

post-181903-12665141474708_thumb.png

لإضافة صورة، نكتب أولا الإسم، نضغط على الزر browse لتحديد الصورة، ثم نضغط على الزر add

لإظهار صورة، نكتب الإسم، نضغط على الزر display، وتظهر الصورة في JLabel مخصص لهذا الغرض. طبعا يجب أن يكون الإسم موجودا في قاعدة البيانات

كود زر add

	private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
		StorePhoto store = new StorePhoto();
		try {
			store.store(con, txtName.getText(), new FileInputStream(photoFile));
		} catch (FileNotFoundException ex) {
			System.out.println(ex.getMessage());
		} catch (SQLException ex) {
			System.out.println("Failed to store the photo - " + ex.getMessage());
		}
	}

كود الزر display

	private void btnDisplayActionPerformed(java.awt.event.ActionEvent evt) {
		RetrievePhoto retrieve = new RetrievePhoto();
		try {
			byte[] photo = retrieve.retrievePhoto(con, txtName2.getText());
			ImageIcon icon = new ImageIcon(photo);
			lblPhoto.setIcon(icon);
		} catch (SQLException ex) {
			System.out.println("Failed to retrieve the photo - " + ex.getMessage());
		}
	}

المشروع NetBeans مرفق

photostore.zip

تم تعديل هذه المشاركة بواسطة herch في 18 فبراير 2010 في 20:56

4
#2

درس رائع كالعاده يا أخ عصام

#3

ياله من درسا رائع و كاتب موضوع اروع

يالك من شخصا ممتاز ترفع له القبعات

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#4

شكرا :)

#5

شيء جميل جداً يا عصام باشا

ما رأيك لو أضفنا هذا الموضوع إلى موضوع الأسئلة الأكثر شيوعاً

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#6
علاء الصالحي كتب:

شيء جميل جداً يا عصام باشا

ما رأيك لو أضفنا هذا الموضوع إلى موضوع الأسئلة الأكثر شيوعاً

تحياتي

اقتراح ممتاز

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#7

سأقوم بإضافته

#8

موضوع رائع بالفعل .

اتذكر انة للقيام بنفس العملية في #c مع قاعدة بيانات oracle كنا نتاج لكتابة procedure بلغة pl\sql ونحطة مع قاعدة البيانات قبل التمكن من التعامل مع blob.

مشكور :)

بحثت عن قلمي البارحة فلم أجدة!

...............

لم أجد سوى لوحة المفاتيح هذة

.............

تتطلع إلي بشفقة..

.............

أكاد أسمعها .. تقول (ألم يسمع بGoogle ؟!؟؟)

#9

بصراحه درس روووووووووووعه , تشكر حبيبي عصام


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#10

Dr.Robert تستطيع أن تكتب كود جافا وتستخدم wrapper في pl/SQL

لم أستخدمها بالتأكيد ولا أعرف كيف يمكنك القيام بذلك

لكني أذكر أني قرأت عنها في مكان ما

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة