Membuat Serial dan Bekerja dengan Dokumen dalam Database

Salah satu tugas yang mungkin perlu Anda selesaikan saat bekerja dengan dokumen adalah menyimpan dan mengambil objek Document ke dan dari database. Misalnya, ini akan diperlukan jika Anda menerapkan semua jenis sistem manajemen konten. Semua versi dokumen sebelumnya harus disimpan dalam sistem basis data. Kemampuan untuk menyimpan dokumen dalam database juga sangat berguna ketika aplikasi Anda menyediakan layanan berbasis web.

Aspose.Words menyediakan kemampuan untuk mengonversi dokumen menjadi larik byte untuk pekerjaan selanjutnya dengan dokumen ini dalam database.

Konversikan Dokumen menjadi Array Byte

Untuk menyimpan dokumen dalam database atau menyiapkan dokumen untuk dikirim ke seluruh web, seringkali dokumen perlu diserialkan untuk mendapatkan larik byte.

Untuk membuat serial objek Documentdalam Aspose.Words:

  1. Simpan ke MemoryStream menggunakan kelebihan metode Save dari kelas Document.
  2. Panggil metode ToArray, yang mengembalikan larik byte yang mewakili dokumen dalam bentuk byte.

Langkah-langkah di atas kemudian dapat dibalik untuk memuat byte kembali ke objek Document.

Contoh di bawah ini menunjukkan cara membuat serial objek Document untuk mendapatkan array byte, lalu cara membatalkan serialisasi array byte untuk mendapatkan objek Document lagi:

// 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);

Menyimpan, Membaca, dan Menghapus Dokumen dalam Basis Data

Bagian ini menunjukkan cara menyimpan dokumen dalam database dan kemudian memuatnya kembali ke objek Document untuk bekerja dengannya. Untuk mempermudah, nama file adalah kunci yang digunakan untuk menyimpan dan mengambil dokumen dari database. Basis data berisi dua kolom. Kolom pertama “FileName " disimpan sebagai String dan digunakan untuk mengidentifikasi dokumen. Kolom kedua “FileContent " disimpan sebagai objek BLOB yang menyimpan objek dokumen dalam bentuk byte.

Contoh kode berikut menunjukkan cara mengatur koneksi ke database dan menjalankan perintah:

// 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);

Contoh kode berikut menunjukkan cara menyimpan dokumen ke database, lalu membaca dokumen yang sama lagi, dan terakhir menghapus catatan yang berisi dokumen dari database:

// 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();

Menyimpan Dokumen ke Basis Data

Untuk menyimpan dokumen dalam database, konversikan dokumen ini menjadi larik byte, seperti yang dijelaskan di awal artikel ini. Kemudian, simpan array byte ini ke dalam bidang basis data.

Contoh kode berikut menunjukkan cara menyimpan dokumen ke database yang ditentukan:

// 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);
}

Tentukan commandString, yang merupakan ekspresi SQL yang melakukan semua pekerjaan:

  • Untuk menyimpan dokumen ke dalam basis data, perintah “INSERT INTO” digunakan dan tabel ditentukan bersama dengan nilai dari dua bidang catatan - FileName dan FileContent. Untuk menghindari parameter tambahan, nama file diambil dari objek Document itu sendiri. Nilai bidang FileContent diberi byte dari aliran memori, yang berisi representasi biner dari dokumen yang disimpan.
  • Baris kode yang tersisa menjalankan perintah yang menyimpan dokumen Aspose.Words dalam database.

Mengambil Dokumen dari Database

Untuk mengambil dokumen dari database, pilih catatan yang berisi data dokumen sebagai larik byte. Kemudian muat array byte dari rekaman ke MemoryStream dan buat objek Document yang akan memuat dokumen dari MemoryStream.

Contoh kode berikut menunjukkan cara mengambil dan mengembalikan dokumen dari database yang ditentukan menggunakan nama file sebagai kunci untuk mengambil dokumen ini:

// 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;
}

Menghapus Dokumen dari Basis Data

Untuk menghapus dokumen dari database, gunakan perintah SQL yang sesuai tanpa manipulasi apa pun pada objek Document.

Contoh kode berikut menunjukkan cara menghapus dokumen dari database, menggunakan nama file untuk mengambil catatan:

// 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);
}