تسلسل والعمل مع وثيقة في قاعدة بيانات

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

Aspose.Words يوفر القدرة على تحويل مستند إلى مصفوفة بايت للعمل اللاحق مع هذا المستند في قاعدة بيانات.

تحويل مستند إلى مصفوفة بايت

لتخزين مستند في قاعدة بيانات أو لإعداد مستند للإرسال عبر الويب، غالبا ما يكون من الضروري إجراء تسلسل للمستند للحصول على مصفوفة بايت.

لتسلسل كائن Document في Aspose.Words:

  1. حفظه إلى MemoryStream باستخدام طريقة Save الزائد من فئة Document.
  2. استدعاء طريقة ToArray، التي ترجع مجموعة من وحدات البايت التي تمثل المستند في شكل بايت.

ثم يمكن عكس الخطوات المذكورة أعلاه لتحميل البايت مرة أخرى إلى كائن Document.

يوضح المثال أدناه كيفية تسلسل كائن Document للحصول على مصفوفة بايت، ثم كيفية إلغاء تسلسل مصفوفة البايت للحصول على كائن Document مرة أخرى:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Load the document.
Document doc = new Document(dataDir + "Test File (doc).doc");
// Create a new memory stream.
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
// Save the document to stream.
doc.save(outStream, SaveFormat.DOCX);
// Convert the document to byte form.
byte[] docBytes = outStream.toByteArray();
// The bytes are now ready to be stored/transmitted.
// Now reverse the steps to load the bytes back into a document object.
ByteArrayInputStream inStream = new ByteArrayInputStream(docBytes);
// Load the stream into a new document object.
Document loadDoc = new Document(inStream);

تخزين وقراءة وحذف مستند في قاعدة بيانات

يوضح هذا القسم كيفية حفظ مستند في قاعدة بيانات ثم إعادة تحميله في كائن Document للعمل معه. للتبسيط، اسم الملف هو المفتاح المستخدم لتخزين المستندات وجلبها من قاعدة البيانات. تحتوي قاعدة البيانات على عمودين. يتم تخزين العمود الأول “FileName” كسلسلة ويستخدم لتحديد المستندات. يتم تخزين العمود الثاني “FileContent " ككائن BLOB الذي يخزن كائن المستند في شكل بايت.

يوضح مثال التعليمات البرمجية التالية كيفية إعداد اتصال بقاعدة بيانات وتنفيذ الأوامر:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
String url1 = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123";
// Open a database connection.
Connection mConnection = DriverManager.getConnection(url1, user, password);

يوضح مثال التعليمات البرمجية التالية كيفية حفظ مستند إلى قاعدة البيانات، ثم قراءة المستند نفسه مرة أخرى، وأخيرا حذف السجل الذي يحتوي على المستند من قاعدة البيانات:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Store the document to the database.
StoreToDatabase(doc, mConnection);
// Read the document from the database and store the file to disk.
Document dbDoc = ReadFromDatabase(dataDir + fileName, mConnection);
// Save the retrieved document to disk.
dbDoc.save(dataDir + fileName);
// Delete the document from the database.
DeleteFromDatabase(dataDir + fileName, mConnection);
// Close the connection to the database.
mConnection.close();

حفظ مستند إلى قاعدة بيانات

لحفظ مستند في قاعدة بيانات تحويل هذا المستند إلى مجموعة من وحدات البايت، كما هو موضح في بداية هذه المقالة. ثم احفظ مصفوفة البايت هذه في حقل قاعدة بيانات.

يوضح مثال التعليمات البرمجية التالية كيفية حفظ مستند إلى قاعدة البيانات المحددة:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
public static void StoreToDatabase(Document doc, Connection mConnection) throws Exception {
// Create an output stream which uses byte array to save data
ByteArrayOutputStream aout = new ByteArrayOutputStream();
// Save the document to byte array
doc.save(aout, SaveFormat.DOCX);
// Get the byte array from output steam
// the byte array now contains the document
byte[] buffer = aout.toByteArray();
// Get the filename from the document.
String fileName = doc.getOriginalFileName();
String filePath = fileName.replace("\\", "\\\\");
// Create the SQL command.
String commandString = "INSERT INTO Documents (FileName, FileContent) VALUES('" + filePath + "', '" + buffer
+ "')";
Statement statement = mConnection.createStatement();
statement.executeUpdate(commandString);
}

حدد commandString، وهو تعبير SQL يقوم بكل العمل:

  • لحفظ مستند في قاعدة البيانات، يتم استخدام الأمر “INSERT INTO” ويتم تحديد جدول مع قيم حقلي تسجيل – FileName و FileContent. لتجنب المعلمات الإضافية، يتم أخذ اسم الملف من الكائن Document نفسه. يتم تعيين قيمة الحقل FileContent بايت من دفق الذاكرة، والذي يحتوي على تمثيل ثنائي للمستند المخزن.
  • السطر المتبقي من التعليمات البرمجية ينفذ الأمر الذي يخزن المستند Aspose.Words في قاعدة البيانات.

استرداد مستند من قاعدة بيانات

لاسترداد مستند من قاعدة البيانات، حدد السجل الذي يحتوي على بيانات المستند كمصفوفة من وحدات البايت. ثم قم بتحميل صفيف البايت من السجل إلى MemoryStream وقم بإنشاء كائن Document يقوم بتحميل المستند من MemoryStream.

يوضح مثال التعليمات البرمجية التالية كيفية استرداد وإرجاع مستند من قاعدة البيانات المحددة باستخدام اسم الملف كمفتاح لجلب هذا المستند:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
private static Document ReadFromDatabase(String fileName, Connection mConnection) throws Exception {
// Create the SQL command.
String commandString = "SELECT * FROM Documents WHERE FileName=?";
PreparedStatement statement = mConnection.prepareStatement(commandString);
statement.setString(1, fileName);
Document doc = null;
ResultSet result = statement.executeQuery();
if (result.next()) {
Blob blob = result.getBlob("FileContent");
InputStream inputStream = blob.getBinaryStream();
doc = new Document(inputStream);
inputStream.close();
System.out.println("File saved");
}
result.close();
return doc;
}

حذف مستند من قاعدة بيانات

لحذف مستند من قاعدة البيانات، استخدم الأمر SQL المناسب دون أي معالجة على الكائن Document.

يوضح مثال التعليمات البرمجية التالية كيفية حذف مستند من قاعدة البيانات، باستخدام اسم الملف لجلب السجل:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
private static void DeleteFromDatabase(String fileName, Connection mConnection) throws Exception {
// Create the SQL command.
String commandString = "DELETE FROM Documents WHERE FileName='" + fileName + "'";
Statement statement = mConnection.createStatement();
// Delete the record.
statement.execute(commandString);
}