Serializați și lucrați cu un Document într-o bază de date
Una dintre sarcinile pe care poate fi necesar să le îndepliniți atunci când lucrați cu documente este stocarea și preluarea obiectelor Document către și dintr-o bază de date. De exemplu, acest lucru ar fi necesar dacă implementați orice tip de sistem de gestionare a conținutului. Toate versiunile anterioare ale documentelor trebuie stocate în sistemul de baze de date. Capacitatea de a stoca documente în baza de date este, de asemenea, extrem de utilă atunci când aplicația dvs. oferă un serviciu bazat pe web.
Aspose.Words oferă posibilitatea de a converti un document într-o matrice de octeți pentru lucrul ulterior cu acest document într-o bază de date.
Conversia unui Document în matrice de octeți
Pentru a stoca un document într-o bază de date sau pentru a pregăti un document pentru transmitere pe web, este adesea necesar să serializați documentul pentru a obține o matrice de octeți.
Pentru a serializa un obiect Document în Aspose.Words:
- Salvați-l într-un MemoryStream Folosind supraîncărcarea metodei Save a clasei Document.
- Apelați metoda ToArray, care returnează o matrice de octeți care reprezintă documentul sub formă de octeți.
Pașii de mai sus pot fi apoi inversați pentru a încărca octeții înapoi într-un obiect Document.
Exemplul de mai jos arată cum să serializați un obiect Document pentru a obține o matrice de octeți și apoi cum să deserializați matricea de octeți pentru a obține din nou un obiect 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); |
Stocați, citiți și ștergeți un Document într-o bază de date
Această secțiune arată cum să salvați un document într-o bază de date și apoi să îl încărcați înapoi într-un obiect Document
pentru a lucra cu acesta. Pentru simplitate, numele fișierului este cheia utilizată pentru stocarea și preluarea documentelor din Baza de date. Baza de date conține două coloane. Prima coloană “FileName " este stocată ca șir și este utilizată pentru identificarea documentelor. A doua coloană “FileContent " este stocată ca obiect BLOB
care stochează obiectul document în forma de octeți.
Următorul exemplu de cod arată cum să configurați o conexiune la o bază de date și să executați comenzi:
// 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); |
Următorul exemplu de cod arată cum să salvați un document în baza de date, apoi să citiți din nou același document și, în final, să ștergeți înregistrarea care conține documentul din Baza de date:
// 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(); |
Salvarea unui Document într-o bază de date
Pentru a salva un document într-o bază de date, convertiți acest document într-o matrice de octeți, așa cum este descris la începutul acestui articol. Apoi, salvați această matrice de octeți într-un câmp de bază de date.
Următorul exemplu de cod arată cum să salvați un document în baza de date specificată:
// 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); | |
} |
Specificați commandString, care este o expresie SQL care face toată munca:
- Pentru a salva un document în baza de date, se folosește comanda “INSERT INTO” și se specifică un tabel împreună cu valorile a două câmpuri de înregistrare – FileName și FileContent. Pentru a evita parametrii suplimentari, numele fișierului este preluat din obiectul Document în sine. Valoarea câmpului
FileContent
este atribuită octeților din fluxul de memorie, care conține o reprezentare binară a documentului stocat. - Linia de cod rămasă execută comanda care stochează documentul Aspose.Words în baza de date.
Preluarea unui Document dintr-o bază de date
Pentru a prelua un document din Baza de date, selectați înregistrarea care conține datele documentului ca o matrice de octeți. Apoi încărcați matricea de octeți din înregistrare în MemoryStream și creați un obiect Document care va încărca documentul din MemoryStream.
Următorul exemplu de cod arată cum să preluați și să returnați un document din Baza de date specificată folosind numele fișierului ca cheie pentru a prelua acest document:
// 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; | |
} |
Ștergerea unui Document dintr-o bază de date
Pentru a șterge un document din Baza de date, utilizați comanda corespunzătoare SQL fără manipulări pe obiectul Document.
Următorul exemplu de cod arată cum să ștergeți un document din Baza de date, utilizând numele fișierului pentru a prelua înregistrarea:
// 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); | |
} |