java jdbc transaction management with example
Questo tutorial spiega i tipi di transazione JDBC, i tipi di dati, i metodi di gestione delle transazioni e come utilizzarli nel programma Java:
Nel ResultSet JDBC tutorial di Serie di tutorial JDBC , abbiamo imparato a utilizzare JDBC ResultSet per recuperare i dati.
In questo tutorial, discuteremo i tipi di transazione in JDBC. Abbiamo visto una breve introduzione ai tipi di transazione nei nostri tutorial precedenti. Qui vedremo in modo dettagliato. Tratteremo anche quali sono i tipi di dati in JDBC e come utilizzarli nel programma Java.
Il database avrà diversi tipi di dati e Java avrà diversi tipi di dati. JDBC gestirà questa differenziazione. Prepariamoci a conoscere l'argomento importante in JDBC.
Cosa imparerai:
Gestione transazioni JDBC
La sequenza di azioni (istruzioni SQL) viene trattata come una singola unità nota come transazione. La gestione delle transazioni è importante per le applicazioni orientate a RDBMS per mantenere l'integrità e la coerenza dei dati.
Durante l'esecuzione della transazione, utilizzeremo i metodi getXXX e setXXX per recuperare e impostare i dati nell'oggetto ResultSet. XXX rappresenta i tipi di dati delle colonne. Discuteremo la transazione ei tipi di dati di JDBC in questo tutorial.
Tipi di transazione
In JDBC ogni query SQL verrà considerata come una transazione. Quando creiamo una connessione al database in JDBC, verrà eseguita in modalità di commit automatico (il valore di commit automatico è TRUE). Dopo l'esecuzione dell'istruzione SQL, verrà eseguito automaticamente il commit.
A volte, potremmo voler eseguire il commit della transazione dopo l'esecuzione di altre istruzioni SQL. A quel punto, dobbiamo impostare il valore di commit automatico su False. In modo che i dati non vengano salvati prima di eseguire tutte le query. Se otteniamo un'eccezione nella transazione, possiamo rollback () modifiche e renderlo come prima. La gestione delle transazioni può essere spiegata bene, utilizzando le proprietà ACID.
Significa ACIDO
- A – Atomicità -> Se tutte le query vengono eseguite correttamente, i dati verranno salvati, altrimenti no.
- C – Consistenza -> Il database deve essere in uno stato coerente dopo ogni transazione.
- I– Isolamento -> La transazione è isolata dalle altre transazioni.
- D – Durabilità -> Se la transazione viene confermata una volta, rimarrà sempre impegnata.
Ci sono tre funzioni più importanti nella gestione delle transazioni. Sono:
software per scaricare video da siti Web
- Commettere: Dopo l'esecuzione delle istruzioni SQL, vogliamo rendere permanenti le modifiche nel database. Dovremmo chiamare il metodo commit (). Normalmente, ciò che è commit significa che apporterà le modifiche in modo permanente nel database. Non possiamo annullare / revocare le modifiche. Ma possiamo modificare i dati nel database.
- Rollback: Il rollback annulla le modifiche fino all'ultimo commit o al punto di salvataggio menzionato. A volte potremmo voler annullare le modifiche. Per esempio, abbiamo una query annidata, una parte è stata eseguita con successo e l'altra ha generato qualche eccezione. A quel punto, vogliamo annullare le modifiche apportate dalla prima parte, dovremmo chiamare il metodo Rollback () per farlo se si è verificata un'eccezione.
- Punto di salvataggio: Savepoint aiuta a creare checkpoint in una transazione e consente di eseguire un rollback a quel particolare savepoint. Qualsiasi punto di salvataggio creato per una transazione verrà automaticamente distrutto e non sarà più valido una volta che la transazione viene confermata o annullata.
Finora abbiamo visto cosa sono commit, rollback e savepoint e le sue operazioni. Di seguito, vedremo i metodi e come usarlo nel programma.
Metodi di gestione delle transazioni
L'interfaccia di connessione fornisce 5 metodi per la gestione delle transazioni. Sono i seguenti:
# 1) metodo setAutoCommit ()
Per impostazione predefinita, il valore del valore di AutoCommit è TRUE. Dopo l'esecuzione dell'istruzione SQL, verrà eseguito automaticamente il commit. Utilizzando il metodo setAutoCommit () possiamo impostare il valore su AutoCommit.
# 2) Metodo Commit ()
Il metodo commit viene utilizzato per eseguire il commit dei dati. Dopo l'esecuzione dell'istruzione SQL, possiamo chiamare commit (). Eseguirà le modifiche apportate dall'istruzione SQL.
Sintassi: conn.commit ();
# 3) Metodo Rollback ()
Il metodo rollback viene utilizzato per annullare le modifiche fino a quando non è stato eseguito l'ultimo commit. Se dovessimo affrontare qualsiasi problema o eccezione nel flusso di esecuzione delle istruzioni SQL, potremmo annullare la transazione.
Sintassi: conn.rollback ();
# 4) Metodo setSavepoint ()
Savepoint ti offre un controllo aggiuntivo sulla transazione. Quando si imposta un punto di salvataggio nella transazione (un gruppo di istruzioni SQL), è possibile utilizzare il metodo rollback () per annullare tutte le modifiche fino al punto di salvataggio o dopo il punto di salvataggio (). Il metodo setSavepoint () viene utilizzato per creare un nuovo punto di salvataggio.
# 5) metodo releaseSavepoint ()
Viene utilizzato per eliminare il punto di salvataggio creato.
Nel programma seguente imparerai di più su questi metodi e imparerai anche come usarli nel programma Java.
In questo tutorial, tutti i programmi sono scritti in Java. Abbiamo utilizzato la versione Java 8 e Oracle DB.
>> Fare clic Qui per scaricare il software Oracle.
>> Fare clic Qui per scaricare la versione 8 di Java.
Ha il processo di installazione Java passo passo.
Programma di esempio di transazione
package com.STH.JDBC; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Savepoint; import java.sql.Statement; public class Transaction_Management { public static void main(String[] args) throws ClassNotFoundException { // TODO Auto-generated method stub //Select Query to get the Data from employee_details table String QUERY = 'select * from employee_details where empNum = 2001'; String QUERY1 = 'select * from employee_details where empNum = 2002'; Boolean autoCommit; String update_query = 'update employee_details set salary = 41000 where empNum = 2001'; String update_query1 = 'update employee_details set salary = 42000 where empNum = 2002'; //Update query to set the email id for the employee whose empNUM is 1001 Class.forName('oracle.jdbc.driver.OracleDriver'); try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); ResultSet rs1 =null; //Checking whether the SELECT query is executed successfully or not rs1 = statemnt1.executeQuery(QUERY); //Executed the SELECT Query System.out.println('Getting the data from employee_details table'); displayData(rs1); //Set the autoCommit value of the connection to FALSE System.out.println('Setting the AutoCommit value as FALSE'); conn.setAutoCommit(false); autoCommit = conn.getAutoCommit(); System.out.println('AutoCommit value of the Connection = '+ autoCommit); //Creating Statement to execute the update query statemnt1 = conn.createStatement(); System.out.println('Executing Update query to update salary of EMPNUM = 2001'); System.out.println('Update Query is ' + update_query); int return_rows = statemnt1.executeUpdate(update_query); System.out.println('Updated the data but didn't commit'); //Getting data after Updation Connection conn1 = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE'); System.out.println('Opening new connection'); System.out.println('EMPNUM = 2001 data'); Statement statement2 = conn1.createStatement(); ResultSet rs; rs = statement2.executeQuery(QUERY); displayData(rs); System.out.println('Commit has been done'); conn.commit(); Savepoint s1 = conn.setSavepoint(); System.out.println('SavePoint has been created'); System.out.println('Displaying data of EMPNUM = 2001'); System.out.println('Using The Second Connection'); rs = statement2.executeQuery(QUERY); displayData(rs); rs = statemnt1.executeQuery(QUERY); //Rollback the transaction System.out.println('Data of EMPNUM = 2002'); rs1 = statemnt1.executeQuery(QUERY1); displayData(rs1); System.out.println('Updating the salary of EMPNUM = 2002'); System.out.println('Update Query is ' + update_query1); statemnt1.executeUpdate(update_query1); System.out.println('Data of EMPNUM = 2002 but didn't commit'); rs1 = statemnt1.executeQuery(QUERY1); displayData(rs1); System.out.println('Rollback is done... so updated data won't be reflected'); conn.rollback(s1); System.out.println('Data of EMPNUM = 2002 after Rollback till the last savepoint'); rs1 = statemnt1.executeQuery(QUERY1); displayData(rs1); } catch (SQLException e) { e.printStackTrace(); } } public static void displayData(ResultSet rs1) throws SQLException { while(rs1.next()) { int empNum = rs1.getInt('empNum'); String lastName = rs1.getString('lastName'); String firstName = rs1.getString('firstName'); String email = rs1.getString('email'); String deptNum = rs1.getString('deptNum'); String salary = rs1.getString('salary'); System.out.println(empNum + ',' +lastName+ ',' +firstName+ ',' +email +','+deptNum +',' +salary); } } }
Produzione:
Spiegazione:
Quello che abbiamo fatto nel programma di gestione delle transazioni di cui sopra è stato aggiornare i valori di un dato dipendente nella tabella EMPLOYEE_DETAILS e salvare i dati. Se si è verificato un errore o un'eccezione, abbiamo eseguito l'operazione rollback (). Vedremo ora la spiegazione completa del programma.
# 1) Creato 2 Seleziona query per 2 dipendenti in base al loro EMPID
Di seguito sono riportate le 2 query di selezione.
String QUERY = 'select * from employee_details where empNum = 2001'; String QUERY1 = 'select * from employee_details where empNum = 2002';
#Due) Sono state create due query di aggiornamento per 2 dipendenti in base al loro EMPID
Due query aggiornate:
String update_query = 'update employee_details set salary = 41000 where empNum = 2001'; String update_query1 = 'update employee_details set salary = 42000 where empNum = 2002';
# 3) Apri connessione, esegui la query di selezione e visualizza i dati di EMPNUM = 2001.
# 4) Utilizzando il metodo setAutoCommit (), impostare il valore di autoCommit su false.
# 5) Ha eseguito la query di aggiornamento di EMPNUM = 2001 e ha creato un'altra connessione per lo stesso database e ha selezionato il valore di EMPNUM = 2001.
# 6) I dati risultanti del dipendente il cui EMPNUM = 2001 non è i dati aggiornati. Perché non abbiamo eseguito l'operazione commit (). Se hai utilizzato la stessa connessione in cui l'hai usata per l'aggiornamento, ti avrebbe mostrato i Dati aggiornati. Ora ha eseguito il commit dei dati. I dati sono stati riflessi nella tabella.
# 7) Creato un punto di salvataggio dopo l'operazione di commit.
# 8) Utilizzo della query di selezione per visualizzare i dati di EMPNUM = 2002. Modificato lo stipendio di quel dipendente utilizzando una query di aggiornamento. Successivamente sono stati visualizzati i dati di EMPNUM = 2002, utilizzando la stessa connessione. Dovrebbe mostrare i dati aggiornati.
# 9) Eseguito il rollback fino all'ultimo punto di salvataggio utilizzando il metodo rollback. Ora, quando abbiamo visualizzato i dati di quel dipendente utilizzando la stessa connessione, ha i vecchi dati perché il rollback annulla le modifiche fino all'ultimo punto di salvataggio se menzioniamo il punto di salvataggio altro per l'ultimo commit.
# 10) Abbiamo creato un metodo che visualizzerà i dati perché stiamo visualizzando i dati molte volte qui.
Tipi di dati JDBC
I database hanno tipi di dati SQL e Java ha tipi di dati Java. Ci dovrebbe essere un meccanismo per leggere e scrivere dati tra un'applicazione Java e un database. Database diversi supportano tipi SQL, ma con alcune variazioni nel nome.
Per esempio, la maggior parte dei database supporta valori binari di grandi dimensioni, Oracle lo chiama LONG RAW, Sybase lo chiama IMAGE, Informix lo chiama BYTE e DB2 lo chiama LONG VARCHAR FOR BIT DATA.
Durante la scrittura del programma JDBC, non dobbiamo preoccuparci dei tipi di dati SQL utilizzati dal database di destinazione. JDBC ha una serie di identificatori di tipo SQL generici nella classe java.sql.Types. Questi tipi sono progettati per supportare la maggior parte dei tipi di dati SQL generici. Durante la scrittura di un programma JDBC, utilizzeremo solo i tipi di dati JDBC.
Il driver JDBC convertirà i tipi di dati Java in tipi di dati del database avanti e indietro. È possibile utilizzare il metodo java.sql.DatabaseMetaData.getTypeInfo per verificare quali tipi SQL sono effettivamente supportati da un determinato database e quindi scrivere un programma. JDBC utilizza una mappatura predefinita per la maggior parte dei tipi di dati.
Per esempio, la stringa Java verrà convertita in un tipo SQL VARCHAR.
Vedremo come viene eseguita la mappatura nel metodo setXXX, getXXX e updateXXX delle interfacce readyStatement o CallableStatement o ResultSet nella tabella seguente:
TIPO SQL | TIPO JAVA / JDBC | setXXX | getXXX | updateXXX |
---|---|---|---|---|
NUMERO INTERO | int | setInt | colorato | updateInt |
CHAR | java.lang.String | setString | getString | updateString |
VARCHAR | java.lang.String | setString | getString | updateString |
LONGVARCHAR | java.lang.String | setString | getString | updateString |
PO | booleano | setBoolean | getBoolean | updateBoolean |
NUMERICO | java.math.BigDecimal | setBigDecimal | getBigDecimal | UpdateBigDecimal |
PICCOLO | corto | setShort | getShort | updateShort |
BIGINT | lungo | setLong | getLong | updateLong |
VERO | galleggiante | setFloat | getFloat | updateFloat |
GALLEGGIANTE | galleggiante | setFloat | getFloat | updateFloat |
DOPPIO | Doppio | setDouble | getDouble | updateDouble |
BINARIO | byte[] | setBytes | getBytes | updateBytes |
DATA | java.sql.Date | impostare la data | getDate | data di aggiornamento |
TEMPO | java.sql.Time | tempo impostato | prendi tempo | tempo di aggiornamento |
TIMESTAMP | java.sql.Timestamp | setTimestamp | getTimestamp | updateTimeStamp |
CLOB | java.sql.Clob | setClob | getClob | updateClob |
BLOB | java.sql.Blob | setBlob | getBlob | updateBlob |
VETTORE | Vettore | setArray | getArray | updateArray |
XML | Xml | setSQLXML | getSQLXML | updateSQLXML |
Tipo strutturato | Oggetto | setObject | getObject | updateObject |
Abbiamo impostato i metodi setXXX, getXXX e updateXXX per i tipi di dati di base nei nostri tutorial precedenti. Puoi fare riferimento a quello.
Qui abbiamo spiegato i tipi di blob e clob nell'esempio seguente.
Programma di esempio BLOB
package com.STH.JDBC; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.sql.Blob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Blob_Example { @SuppressWarnings('resource') public static void main(String[] args) throws ClassNotFoundException, IOException { // TODO Auto-generated method stub String QUERY = 'Create table Blob_Sample_Example ( PicName varchar2(30), picture BLOB)'; //Select Query to get the Data from employee_details table //Update query to set the email id for the employee whose empNUM is 1001 Class.forName('oracle.jdbc.driver.OracleDriver'); System.out.println('Establishing Connection'); try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); //Executing the Create Query statemnt1.execute(QUERY); System.out.println('Table has been created for BLOB type'); System.out.println('Inserting data into Blob_Sample_Example table'); String insert_query = ' insert into Blob_Sample_Example values(?,?)'; //Passing the values for preparedStatement PreparedStatement pstmnt = conn.prepareStatement(insert_query); pstmnt.setString(1, 'Sotware Testing Help'); //Mention Image path to store the image in DB FileInputStream inputStream = new FileInputStream('D:\Bhakiya\Bhakiya\JDBC\Software Testing Pic.png'); pstmnt.setBlob(2, inputStream); //Executing the preparedStatement to insert the data pstmnt.execute(); System.out.println('Retrieving data'); ResultSet rs = statemnt1.executeQuery('select * from Blob_Sample_Example'); while(rs.next()) { //Getting Picture Name System.out.println('Picture Name:' + rs.getString(1)); Blob blob1 = rs.getBlob(2); //using blob retrieving the Image byte byteArray[] = blob1.getBytes(1,(int)blob1.length()); FileOutputStream outPutStream = new FileOutputStream('D:\Bhakiya\Bhakiya\JDBC\Software Testing Pic output.png'); outPutStream.write(byteArray); System.out.println(' Go to the following path: D:\Bhakiya\Bhakiya\JDBC\Software Testing Pic output.png'); } } catch (SQLException e) { e.printStackTrace(); } } }
Produzione:
Il file è stato salvato correttamente nel percorso specificato.
Spiegazione:
Nel programma sopra quello che abbiamo fatto è prima di tutto aver creato / salvato un'immagine nella cartella 'D: \ Bhakiya \ Bhakiya \ JDBC' . Questa posizione è solo per esempio. Puoi creare il tuo percorso file nel tuo sistema. Il nome del file è un'immagine di prova del software. Quindi abbiamo creato un programma Java per memorizzare quell'immagine nella tabella DB e recuperare l'immagine dalla tabella e memorizzarla nel sistema locale.
Finora abbiamo discusso la panoramica dell'attività. Ora vedremo come l'abbiamo raggiunto nel programma.
# 1) Crea una tabella in DB per memorizzare l'immagine.
Sintassi:
String QUERY = 'Create table Blob_Sample_Example ( PicName varchar2(30), picture BLOB)';
Nella query sopra, abbiamo 2 colonne.
- PicName - varchar2 -> Viene utilizzato per memorizzare il nome dell'immagine
- picture - BLOB -> Serve per memorizzare l'immagine nella tabella.
Il tipo di dati BLOB viene utilizzato per memorizzare l'immagine / immagine nella tabella DB.
#Due) La connessione e l'istruzione sono state create e chiamate il metodo di esecuzione per eseguire la query CREATE.
statemnt1.execute(QUERY);
# 3) Successivamente, abbiamo creato la query di inserimento e l'abbiamo eseguita utilizzando PreparedStatement.
Sintassi PreparedStatement:
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
# 4) Utilizzando setString () - imposta il nome dell'immagine.
# 5) Per impostare l'immagine, utilizzare la classe FileInputStream per passare la posizione dell'immagine.
Sintassi:
FileInputStream inputStream = new FileInputStream('Picture Full Path');
Quindi, utilizzando il metodo setBlob (), possiamo impostare l'immagine nell'oggetto PreparedStatement. Successivamente, ha chiamato il metodo di esecuzione di PreparedStatement. Ciò inserirà i dati forniti nella tabella.
Dopo aver eseguito la query di inserimento, utilizzando l'oggetto ResultSet stiamo recuperando i dati dalla tabella (utilizzando la query di selezione).
# 6) Utilizzando il metodo getString, possiamo ottenere il valore della colonna PicName.
# 7) Per ottenere l'immagine, segui i passaggi seguenti:
- Crea un oggetto Blob e assegna i valori di ritorno del metodo getBlob dell'oggetto ResultSet.
- La sintassi per questo è: Blob blob1 = rs.getBlob ();
- Crea un oggetto array di byte e ottieni il valore dell'oggetto Blob come byte.
- Crea oggetto FileOutputStream oggetto e passa il percorso completo per memorizzare l'immagine in quel percorso. Chiama il metodo write () dell'oggetto FileOutputStream, che memorizzerà l'immagine.
- Dopo di che il programma è stato eseguito con successo.
# 8) Vai alla posizione dell'immagine di output e controlla se l'input e l'output sono gli stessi.
Programma di esempio CLOB
package com.STH.JDBC; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.sql.Blob; import java.sql.Clob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Clob_Example { public static void main(String[] args) throws ClassNotFoundException, IOException { // TODO Auto-generated method stub String QUERY = 'Create table Clob_Sample_Example ( FileName varchar2(30), StoreFile CLOB)'; //Create Query to create new table for CLOB example Class.forName('oracle.jdbc.driver.OracleDriver'); //Creating Connection System.out.println('Establishing Connection'); try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); //Executing create query statemnt1.execute(QUERY); System.out.println('Table has been created for CLOB type'); System.out.println('Inserting data into Clob_Sample_Example table'); //Insert Query String insert_query = ' insert into Clob_Sample_Example values(?,?)'; //Passing Parameters for PreparedStatement PreparedStatement pstmnt = conn.prepareStatement(insert_query); pstmnt.setString(1, 'File1'); FileReader fileRead = new FileReader('D:\Bhakiya\Bhakiya\JDBC\file1.txt'); pstmnt.setClob(2, fileRead); //Executing the PreparedStatement pstmnt.execute(); System.out.println('Retrieving data'); ResultSet rs = statemnt1.executeQuery('select * from Clob_Sample_Example'); while(rs.next()) { System.out.println('File Name:' + rs.getString(1)); //Getting file data Clob clob1 = rs.getClob(2); Reader r = clob1.getCharacterStream(); //Using Reader - read the data and Writer - Write the data in file in the given location FileWriter fileWrite = new FileWriter('D:\Bhakiya\Bhakiya\JDBC\file1 output.txt'); int i; while((i=r.read())!=-1) fileWrite.write(i); fileWrite.close(); System.out.println(' Go to the following path: D:\Bhakiya\Bhakiya\JDBC\file1 output.txt'); } } catch (SQLException e) { e.printStackTrace(); } } }
Produzione:
File di input:
Il file è stato salvato correttamente nel percorso specificato.
File di uscita:
Spiegazione:
Nel programma sopra quello che abbiamo fatto è prima di tutto aver creato / salvato un file di testo 'file1.txt' nella cartella 'D: \ Bhakiya \ Bhakiya \ JDBC'. Questa posizione è solo per esempio. Puoi creare il tuo percorso file nel tuo sistema. Quindi abbiamo creato un programma Java per memorizzare quel file nella tabella DB e recuperare quel file dalla tabella e memorizzarlo nel sistema locale.
Finora abbiamo discusso la panoramica dell'attività. Ora vedremo come l'abbiamo raggiunto nel programma.
# 1) Crea una tabella in DB per memorizzare l'immagine.
Di seguito è riportata la sintassi della query CREATE TABLE:
String QUERY = 'Create table Clob_Sample_Example ( FileName varchar2(30), StoreFile CLOB)';
Nella query sopra, abbiamo 2 colonne.
- FileName - varchar2 -> Viene utilizzato per memorizzare il nome dell'immagine.
- StoreFile - CLOB -> Viene utilizzato per memorizzare il file nella tabella.
Il tipo di dati CLOB viene utilizzato per memorizzare il tipo di carattere dei dati binari nella tabella DB
#Due) La connessione e l'istruzione sono state create e chiamate il metodo di esecuzione per eseguire la query CREATE.
statemnt1.execute(QUERY);
# 3) Successivamente, abbiamo creato la query di inserimento e l'abbiamo eseguita utilizzando PreparedStatement.
Sintassi PreparedStatement:
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
# 4) Utilizzando setString (): impostare il nome del FileName.
# 5) Per impostare / memorizzare il file, utilizzare la classe FileReader per passare il file con la posizione di riempimento.
Sintassi:
FileReader fileRead = new FileReader('D:\Bhakiya\Bhakiya\JDBC\file1.txt');
Quindi utilizzando il metodo setClob (), possiamo impostare il file nell'oggetto PreparedStatement. Successivamente ha chiamato il metodo di esecuzione di PreparedStatement. Ciò inserirà i dati forniti nella tabella.
Dopo aver eseguito la query di inserimento, utilizzando l'oggetto ResultSet stiamo recuperando i dati dalla tabella (utilizzando la query di selezione).
Seleziona query:
'select * from Clob_Sample_Example'
# 6) Utilizzando il metodo getString possiamo ottenere il valore della colonna FileName.
# 7) Per ottenere il file, abbiamo seguito i passaggi seguenti:
- Crea l'oggetto Clob e assegna i valori di ritorno del metodo getClob dell'oggetto ResultSet.
- La sintassi per questo è: Clob clob1 = rs.getClob ();
- Crea un oggetto Reader e ottieni il valore dell'oggetto Clob come Character.
- Crea oggetto FileWriter oggetto e passa il percorso completo per memorizzare il file in quel percorso. Chiama il metodo write () dell'oggetto FileWrite, che scriverà i dati nel file nella posizione.
- Dopo di che il programma è stato eseguito con successo.
# 8) Vai alla posizione del file di output e controlla se i file di input e di output sono gli stessi.
Punti da ricordare:
- Proprietà ACID spiega la gestione delle transazioni nel database.
- Commit (), rollback () e savepoint sono le operazioni più importanti in Transaction Management.
- Commit apporterà le modifiche in modo permanente nel DB, Rollback annullerà le modifiche fino all'ultimo commit o al punto di salvataggio menzionato e Savepoint aiuta a creare un checkpoint.
- Il database mantiene i tipi di dati SQL e Java mantiene i tipi di dati Java. Il driver JDBC viene utilizzato per gestire questa conversione.
- Il driver JDBC stesso ha alcuni tipi di identificatori SQL, quindi il programmatore non deve preoccuparsi dei tipi di dati.
Domande frequenti
D # 1) Qual è il tipo di dati JDBC?
Risposta: Java ha i suoi tipi di dati e il database ha i suoi tipi di dati. Il driver JDBC converte il tipo di dati Java nel tipo di dati SQL appropriato che sarà accettato dal database. Gli oggetti ResultSet forniscono anche metodi setXXX () e metodi getXXX () disponibili per i tipi di dati appropriati.
D # 2) Qual è il tipo di dati per la data in Java?
Risposta: La data in Java non è solo un tipo di dati ma una classe. Una data in Java ha la data, l'ora, l'anno, il nome del giorno, il giorno della settimana e il fuso orario. La classe Date ha i metodi appropriati per recuperare i dati rilevanti.
D # 3) Qual è la differenza tra java.util.Date e java.sql.Date?
Risposta: La differenza principale è che java.util.Date contiene anche informazioni su data e ora. Ma java.sql.Date contiene solo le informazioni sulla data. Questa è la differenza principale: non possiamo mappare java.util.Date direttamente con java.sql.Date.
D # 4) Abbiamo una classe in Java per rappresentare il tipo TIME e TIMESTAMP per SQL?
Risposta: Sì, abbiamo una classe per il tipo TIME e TIMESTAMP per SQL. La classe java.sql.Time rappresenta le informazioni relative a TIME. La classe java.sql.timestamp rappresenta le informazioni correlate a TIMESTAMP.
Q # 5) Come avviare una transazione in JDBC?
Risposta: La connessione JDBC inizia con la modalità di commit automatico abilitata, in cui ogni istruzione SQL viene considerata come una transazione. Non esiste un processo specifico per avviare una transazione in JDBC. Quando si crea una connessione e si inizia a eseguire l'istruzione SQL, è lì che è iniziata la transazione.
D # 6) Cos'è il metodo commit () in Java?
Risposta: Il metodo Commit () in Java viene utilizzato per salvare le modifiche apportate dall'ultimo commit (). Il metodo Commit () è disponibile nell'interfaccia di connessione. Usando un oggetto di connessione, possiamo chiamare commit ().
D # 7) Qual è il metodo di rollback in Java?
Risposta: Dopo l'ultimo commit (), se si sono verificati problemi, possiamo chiamare il metodo rollback () per annullare tutte le modifiche apportate fino a quando l'ultimo metodo commit.rollback () è disponibile nell'interfaccia di connessione. Utilizzando un oggetto connessione, possiamo chiamare il metodo rollback ().
Conclusione
Qui, abbiamo coperto i tipi di dati in Java e DB e come il driver JDBC li gestisce. Abbiamo discusso le proprietà ACID. Questo è molto importante per il settore bancario. Sarà molto utile per la tua carriera. Nella sezione Gestione delle transazioni, abbiamo discusso i metodi di commit e rollback come commit (), rollback (), setAutoCommit (), setSavepoint () e releaseSavepoint ().
Lettura consigliata
- Tutorial Java JDBC: cos'è JDBC (Java Database Connectivity)
- Tutorial di connessione Java JDBC con esempio di programmazione
- JDBC DriverManager, JDBC PreparedStatement e Statement
- ResultSet JDBC: come utilizzare il ResultSet Java per recuperare i dati
- Java DataType, loop, array, switch e asserzioni
- Metodo Java String length () con esempi
- Come utilizzare il metodo Java toString?
- Test del database del selenio (utilizzando WebDriver e API JDBC)