Serializar e trabalhar com um documento numa base de dados
Uma das tarefas que talvez seja necessário realizar ao trabalhar com documentos é armazenar e recuperar objetos Document de e para um banco de dados. Por exemplo, isso seria necessário se estivesse a implementar qualquer tipo de Sistema de gestão de conteúdos. Todas as versões anteriores dos documentos devem ser armazenadas no sistema de base de dados. A capacidade de armazenar documentos na base de dados também é extremamente útil quando a sua aplicação fornece um serviço baseado na web.
Aspose.Words fornece a capacidade de converter um documento em uma matriz de bytes para trabalhos subsequentes com este documento em um banco de dados.
Converter um documento em Matriz de bytes
Para armazenar um documento numa base de dados ou para preparar um documento para transmissão através da web, é frequentemente necessário serializar o documento para obter uma matriz de bytes.
Para serializar um objecto Document em Aspose.Words:
- Salve-o em um MemoryStream usando a sobrecarga do método Save da classe Document.
- Chame o método ToArray, que retorna uma matriz de bytes representando o documento em forma de byte.
As etapas acima podem ser revertidas para carregar os bytes de volta em um objeto Document.
O exemplo abaixo mostra como serializar um objeto Document para obter uma matriz de bytes e, em seguida, como desserializar a matriz de bytes para obter um objeto Document novamente:
// 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); |
Armazenar, ler e apagar um documento numa base de dados
Esta seção mostra como salvar um documento em um banco de dados e, em seguida, carregá-lo novamente em um objeto Document
para trabalhar com ele. Para simplificar, o nome do arquivo é a chave usada para armazenar e buscar documentos do banco de dados. A base de dados contém duas colunas. A primeira coluna “FileName” é armazenada como uma String e é usada para identificar documentos. A segunda coluna “FileContent " é armazenada como um objeto BLOB
que armazena o objeto document na forma de byte.
O exemplo de código a seguir mostra como configurar uma conexão com um banco de dados e executar comandos:
// 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); |
O exemplo de código a seguir mostra como salvar um documento no banco de dados, depois ler o mesmo documento novamente e, finalmente, excluir o registro que contém o documento do banco de dados:
// 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(); |
Guardar um documento numa base de dados
Para salvar um documento em um banco de dados, converta este documento em uma matriz de bytes, conforme descrito no início deste artigo. Em seguida, salve essa matriz de bytes em um campo de banco de dados.
O exemplo de código a seguir mostra como salvar um documento no banco de dados especificado:
// 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); | |
} |
Especifique commandString, que é uma expressão SQL que faz todo o trabalho:
- Para salvar um documento no banco de dados, o comando “INSERT INTO” é usado e uma tabela especificada junto com os valores de dois campos de registro – FileName e FileContent. Para evitar parâmetros adicionais, o nome do ficheiro é retirado do próprio objecto Document. O valor do campo
FileContent
é atribuído bytes do fluxo de memória, que contém uma representação binária do documento armazenado. - A linha de código restante executa o comando que armazena o documento Aspose.Words na base de dados.
Recuperar um documento de uma base de dados
Para recuperar um documento do banco de dados, selecione o registro que contém os dados do documento como uma matriz de bytes. Em seguida, carregue a matriz de bytes do registro em MemoryStream e crie um objeto Document que carregará o documento a partir do MemoryStream.
O exemplo de código a seguir mostra como recuperar e retornar um documento do banco de dados especificado usando o nome do arquivo como uma chave para buscar este documento:
// 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; | |
} |
Eliminar um documento de uma base de dados
Para excluir um documento do banco de dados, use o comando SQL apropriado sem nenhuma manipulação no objeto Document.
O exemplo de código a seguir mostra como excluir um documento do banco de dados, usando o nome do arquivo para buscar o registro:
// 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); | |
} |