Serializacja i praca z dokumentem w bazie danych

Jednym z zadań, które należy wykonać podczas pracy z dokumentami jest przechowywanie i pobieranie Document obiektów do i z bazy danych. Na przykład, byłoby to konieczne, gdyby wdrażano jakikolwiek rodzaj systemu zarządzania treścią. Wszystkie poprzednie wersje dokumentów muszą być przechowywane w systemie baz danych. Możliwość przechowywania dokumentów w bazie danych jest również niezwykle przydatna, gdy aplikacja świadczy usługi oparte na sieci.

Aspose.Words zapewnia możliwość przekształcenia dokumentu w tablicę bajtów do późniejszej pracy z tym dokumentem w bazie danych.

Konwertuj dokument do bajtowej tablicy

Aby przechowywać dokument w bazie danych lub przygotować dokument do transmisji w sieci, często konieczne jest serializowanie dokumentu, aby otrzymać tablicę bajtów.

Aby serializować Document obiekt w Aspose.Words:

  1. Zachowaj to dla MemoryStream stosowania Save przeciążenie metody Document Klasa.
  2. Zadzwoń ToArray metoda, która zwraca tablicę bajtów przedstawiającą dokument w formie bajtów.

Stopnie powyżej można odwrócić, aby załadować bajty z powrotem do Document obiekt.

Przykład poniżej pokazuje jak serializować Document obiekt do uzyskania tablicy bajtów, a następnie jak odserializować tablicę bajtów, aby uzyskać Document obiekt ponownie:

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

Przechowywanie, czytanie i usuwanie dokumentu w bazie danych

Ta sekcja pokazuje, jak zapisać dokument w bazie danych, a następnie załadować go z powrotem do Document obiekt do pracy z nim. Dla uproszczenia, nazwa pliku jest kluczem do przechowywania i pobierania dokumentów z bazy danych. Baza danych zawiera dwie kolumny. Pierwsza kolumna “FileName” jest przechowywana jako String i służy do identyfikacji dokumentów. Druga kolumna “FileContent” jest przechowywana jako BLOB obiekt, który przechowuje obiekt dokumentu w formie bajtu.

Poniższy przykład kodu pokazuje jak skonfigurować połączenie z bazą danych i wykonać polecenia:

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

Poniższy przykład kodu pokazuje, jak zapisać dokument do bazy danych, a następnie ponownie przeczytać ten sam dokument i ostatecznie usunąć zapis zawierający dokument z bazy danych:

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

Zapisz dokument do bazy danych

Aby zapisać dokument w bazie danych przekonwertować ten dokument do tablicy bajtów, jak opisano na początku tego artykułu. Następnie zapisz tę tablicę bajtów do pola bazy danych.

Poniższy przykład kodu pokazuje jak zapisać dokument do określonej bazy danych:

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

Określ Komendant String, który jest wyrażeniem SQL, który wykonuje wszystkie prace:

  • Aby zapisać dokument do bazy danych, stosuje się polecenie “INSERT INTO” oraz tabelę wraz z wartościami dwóch pól rekordów - FileName i FileContent. Aby uniknąć dodatkowych parametrów, nazwa pliku jest pobierana z Document Sam obiekt. W FileContent wartość pola jest przypisywana bajtom ze strumienia pamięci, który zawiera binarną reprezentację zapisanego dokumentu.
  • Pozostała linia kodu wykonuje polecenie, które przechowuje Aspose.Words dokument w bazie danych.

Pobieranie dokumentu z bazy danych

Aby pobrać dokument z bazy danych, wybierz zapis zawierający dane dokumentu jako tablicę bajtów. Następnie wczytaj tablicę bajtów z rekordu do MemoryStream i utworzyć Document obiekt, który załaduje dokument z MemoryStream.

Poniższy przykład kodu pokazuje jak pobrać i zwrócić dokument z określonej bazy danych używając nazwy pliku jako klucza do pobrania tego dokumentu:

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

Usuń dokument z bazy danych

Aby usunąć dokument z bazy danych, użyj odpowiedniego polecenia SQL bez żadnych manipulacji na Document obiekt.

Poniższy przykład kodu pokazuje jak usunąć dokument z bazy danych, używając nazwy pliku do pobrania rekordu:

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