Serializace a práce s dokumentem v databázi
Jedním z úkolů, které budete muset udělat při práci s dokumenty, je ukládání a získávání Document objekty do a z databáze. To by bylo například nutné, kdybyste prováděli jakýkoliv typ systému řízení obsahu. Všechny předchozí verze dokumentů musí být uloženy v databázovém systému. Schopnost ukládat dokumenty do databáze je také velmi užitečná, když vaše aplikace poskytuje webovou službu.
Aspose.Words poskytuje schopnost převést dokument na pole byte pro následnou práci s tímto dokumentem v databázi.
Převést dokument na Byte Array
Chcete-li dokument uložit do databáze nebo připravit dokument pro přenos přes web, je často nutné serializovat dokument pro získání pole byte.
Serializovat Document v Aspose.Words:
- Uložit do MemoryStream s použitím Save způsob přetížení Document třída.
- Zavolej ToArray metoda, která vrací pole bytů představující dokument ve formě byte.
Kroky výše pak lze obrátit na zatížení bajtů zpět do Document objekt.
Následující příklad ukazuje, jak serializovat Document objekt k získání byte pole, a pak, jak odsérializovat byte pole získat Document znovu objekt:
// 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); |
Uložit, číst a smazat dokument v databázi
Tato část ukazuje, jak uložit dokument do databáze a pak jej načíst zpět do Document
objekt pro práci s ním. Pro jednoduchost je název souboru klíčem k ukládání a získávání dokumentů z databáze. Databáze obsahuje dva sloupce. První sloupec “FileName” je uložen jako řetězec a používá se k identifikaci dokumentů. Druhý sloupec je uložen jako BLOB
objekt, který uloží objekt dokumentu do bajtové formy.
Následující příklad kódu ukazuje, jak nastavit připojení k databázi a provést příkazy:
// 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); |
Následující příklad kódu ukazuje, jak uložit dokument do databáze, pak znovu přečíst stejný dokument a nakonec smazat záznam obsahující dokument z databáze:
// 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(); |
Uložit dokument do databáze
Uložit dokument v databázi převést tento dokument do pole bajtů, jak je popsáno na začátku tohoto článku. Pak uložte toto pole byte do databázového pole.
Následující příklad kódu ukazuje, jak uložit dokument do zadané databáze:
// 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); | |
} |
Zadejte příkazString, což je SQL výraz, který dělá veškerou práci:
- Pro uložení dokumentu do databáze se používá povel ŁINSERT INTONATION a tabulka zadaná spolu s hodnotami dvou záznamových polí FileName a FileContent. Aby se zabránilo dalším parametrům, je název souboru převzat z Document sám objekt. The
FileContent
hodnota pole je přiřazena bajty z paměťového proudu, který obsahuje binární reprezentaci uloženého dokumentu. - Zbývající řádek kódu provádí příkaz, který ukládá Aspose.Words dokument v databázi.
Získání dokumentu z databáze
Chcete-li získat dokument z databáze, vyberte záznam, který obsahuje data dokumentu jako pole bytů. Pak načíst byte pole ze záznamu do MemoryStream a vytvořit Document objekt, který bude načíst dokument z MemoryStream.
Následující příklad kódu ukazuje, jak získat a vrátit dokument ze zadané databáze pomocí názvu souboru jako klíč k získání tohoto 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; | |
} |
Smazat dokument z databáze
Pro odstranění dokumentu z databáze použijte příslušný příkaz SQL bez manipulace na Document objekt.
Následující příklad kódu ukazuje, jak odstranit dokument z databáze pomocí názvu souboru pro získání záznamu:
// 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); | |
} |