Сериализиране и работа с документ в база данни
Една от задачите, които може да се наложи да свършите, когато работите с документи се съхранява и извлича Document обекти към и от база данни. Например, това би било необходимо, ако се прилага всякакъв вид система за управление на съдържанието. Всички предишни версии на документи трябва да се съхраняват в базата данни. Възможността за съхранение на документи в базата данни също е изключително полезна, когато вашето приложение предоставя уеб-базирана услуга.
Aspose.Words осигурява възможност за преобразуване на документ в байт масив за последваща работа с този документ в база данни.
Конвертиране на документ в байт станция
За да се съхранява документ в база данни или за да се подготви документ за предаване в мрежата, често е необходимо да се сериализира документът, за да се получи байт масив.
Серийна Document обект в Aspose.Words:
- Запази го за MemoryStream с помощта на Save претоварване на метода Document Клас.
- Обади се на ToArray метод, който връща масив от байтове, представящи документа в байт форма.
Стъпките по-горе могат да бъдат обърнати, за да се заредят байтите обратно в a Document Възразявам.
Примерът по- долу показва как да серийна Document обект за получаване на байт масив, и след това как да се десерийнизира масива байт, за да се получи a 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 се съхранява като низ и се използва за идентифициране на документи. Втората колона се съхранява като 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); | |
} |
Посочете команда String, което е SQL израз, който върши цялата работа:
- За да запазите документ в базата данни, се използва командата по NISTERT. За да се избегнат допълнителни параметри, името на файла е взето от 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); | |
} |