java jdbc transaction management with example
In diesem Lernprogramm werden JDBC-Transaktionstypen, Datentypen, Transaktionsverwaltungsmethoden und deren Verwendung in Java-Programmen erläutert:
In dem JDBC ResultSet Tutorial der JDBC-Tutorialserie haben wir gelernt, JDBC ResultSet zum Abrufen von Daten zu verwenden.
In diesem Tutorial werden die Transaktionstypen in JDBC erläutert. In unseren vorherigen Tutorials haben wir eine kurze Einführung in die Transaktionstypen gesehen. Hier werden wir detailliert sehen. Wir werden auch behandeln, welche Datentypen in JDBC vorhanden sind und wie sie in Java-Programmen verwendet werden.
Die Datenbank hat unterschiedliche Datentypen und Java hat unterschiedliche Datentypen. JDBC wird diese Differenzierung verwalten. Machen wir uns bereit, das wichtige Thema in JDBC kennenzulernen.
Was du lernen wirst:
JDBC-Transaktionsmanagement
Die Abfolge von Aktionen (SQL-Anweisungen) wird als eine einzelne Einheit behandelt, die als Transaktion bezeichnet wird. Das Transaktionsmanagement ist für RDBMS-orientierte Anwendungen wichtig, um die Datenintegrität und -konsistenz zu gewährleisten.
Während der Ausführung der Transaktion verwenden wir die Methoden getXXX und setXXX, um die Daten im ResultSet-Objekt abzurufen und festzulegen. XXX repräsentiert die Datentypen der Spalten. In diesem Lernprogramm werden die Transaktions- und Datentypen von JDBC erläutert.
Transaktionstypen
In JDBC wird jede SQL-Abfrage als Transaktion betrachtet. Wenn wir in JDBC eine Datenbankverbindung erstellen, wird diese im Auto-Commit-Modus ausgeführt (Auto-Commit-Wert ist TRUE). Nach der Ausführung der SQL-Anweisung wird sie automatisch festgeschrieben.
Manchmal möchten wir die Transaktion nach der Ausführung einiger weiterer SQL-Anweisungen festschreiben. Zu diesem Zeitpunkt müssen wir den Auto-Commit-Wert auf False setzen. Damit Daten nicht festgeschrieben werden, bevor alle Abfragen ausgeführt wurden. Wenn wir eine Ausnahme in der Transaktion erhalten, können wir Änderungen rückgängig machen () und wie zuvor vornehmen. Das Transaktionsmanagement lässt sich anhand der ACID-Eigenschaften gut erklären.
ACID bedeutet
- A - Atomizität -> Wenn alle Abfragen erfolgreich ausgeführt wurden, werden Daten festgeschrieben, andernfalls nicht.
- C - Konsistenz -> Die Datenbank muss nach jeder Transaktion in einem konsistenten Zustand sein.
- I - Isolation -> Die Transaktion ist von anderen Transaktionen isoliert.
- D - Haltbarkeit -> Wenn die Transaktion einmal festgeschrieben wird, bleibt sie immer festgeschrieben.
Es gibt drei wichtige Funktionen im Transaktionsmanagement. Sie sind:
Website, auf der Sie YouTube-Videos herunterladen können
- Verpflichten: Nach der Ausführung der SQL-Anweisungen möchten wir die Änderungen in der Datenbank dauerhaft machen. Wir sollten die Methode commit () aufrufen. Normalerweise bedeutet Commit, dass die Änderungen dauerhaft in der Datenbank vorgenommen werden. Wir können die Änderungen nicht rückgängig machen / widerrufen. Wir können jedoch die Daten in der Datenbank ändern.
- Rollback: Durch Rollback werden die Änderungen bis zum letzten Festschreiben oder erwähnten Sicherungspunkt rückgängig gemacht. Manchmal möchten wir die Änderungen rückgängig machen. Zum Beispiel, Wir haben eine verschachtelte Abfrage, ein Teil wurde erfolgreich ausgeführt und der andere hat eine Ausnahme ausgelöst. Zu diesem Zeitpunkt möchten wir die im ersten Teil vorgenommenen Änderungen rückgängig machen. Dazu sollten wir die Rollback () -Methode aufrufen, wenn eine Ausnahme aufgetreten ist.
- Speicherpunkt: Mit Savepoint können Sie einen Checkpoint in einer Transaktion erstellen und ein Rollback auf diesen bestimmten Savepoint durchführen. Jeder Sicherungspunkt, der für eine Transaktion erstellt wurde, wird automatisch zerstört und ungültig, sobald die Transaktion festgeschrieben oder zurückgesetzt wird.
Bis jetzt haben wir gesehen, was Commit, Rollback und Savepoint und seine Operationen sind. Im Folgenden sehen wir die Methoden und die Verwendung im Programm.
Methoden des Transaktionsmanagements
Die Verbindungsschnittstelle bietet 5 Methoden für das Transaktionsmanagement. Sie sind wie folgt:
# 1) setAutoCommit () Methode
Standardmäßig ist der Wert des AutoCommit-Werts TRUE. Nach der Ausführung der SQL-Anweisung wird sie automatisch festgeschrieben. Mit der Methode setAutoCommit () können wir den Wert auf AutoCommit setzen.
# 2) Commit () -Methode
Die Festschreibungsmethode wird zum Festschreiben der Daten verwendet. Nach der Ausführung der SQL-Anweisung können wir commit () aufrufen. Es werden die Änderungen festgeschrieben, die von der SQL-Anweisung vorgenommen werden.
Syntax: conn.commit ();
# 3) Rollback () -Methode
Die Rollback-Methode wird verwendet, um die Änderungen rückgängig zu machen, bis das letzte Festschreiben erfolgt ist. Wenn im Ausführungsablauf der SQL-Anweisungen Probleme oder Ausnahmen auftreten, wird die Transaktion möglicherweise zurückgesetzt.
Syntax: conn.rollback ();
# 4) setSavepoint () Methode
Mit Savepoint haben Sie zusätzliche Kontrolle über die Transaktion. Wenn Sie in der Transaktion einen Sicherungspunkt festlegen (eine Gruppe von SQL-Anweisungen), können Sie mit der rollback () -Methode alle Änderungen bis zum Sicherungspunkt oder nach dem Sicherungspunkt () rückgängig machen. Mit der Methode setSavepoint () wird ein neuer Sicherungspunkt erstellt.
# 5) releaseSavepoint () Methode
Es wird verwendet, um den erstellten Sicherungspunkt zu löschen.
Im folgenden Programm erfahren Sie mehr über diese Methoden und erfahren, wie Sie sie im Java-Programm verwenden.
In diesem Tutorial sind alle Programme in Java geschrieben. Wir haben Java 8 Version und Oracle DB verwendet.
>> Klicken Sie auf Hier um die Oracle-Software herunterzuladen.
>> Klicken Sie auf Hier um die Java Version 8 herunterzuladen.
Es verfügt über einen schrittweisen Java-Installationsprozess.
Transaktionsbeispielprogramm
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); } } }
Ausgabe:
Erläuterung:
Im obigen Transaktionsverwaltungsprogramm haben wir die Werte des angegebenen Mitarbeiters in der Tabelle EMPLOYEE_DETAILS aktualisiert und die Daten festgeschrieben. Wenn ein Fehler oder eine Ausnahme aufgetreten ist, haben wir die Operation rollback () ausgeführt. Jetzt sehen wir die vollständige Erklärung des Programms.
# 1) Erstellt 2 Wählen Sie eine Abfrage für 2 Mitarbeiter basierend auf ihrer EMPID aus
Unten sind die 2 ausgewählten Abfragen.
String QUERY = 'select * from employee_details where empNum = 2001'; String QUERY1 = 'select * from employee_details where empNum = 2002';
#zwei) Erstellt zwei Update-Abfragen für 2 Mitarbeiter basierend auf ihrer EMPID
Zwei aktualisierte Abfragen:
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) Öffnen Sie die Verbindung, führen Sie die Auswahlabfrage aus und zeigen Sie die Daten von EMPNUM = 2001 an.
# 4) Setzen Sie mit der Methode setAutoCommit () den Wert von autoCommit auf false.
# 5) Die Aktualisierungsabfrage von EMPNUM = 2001 wurde ausgeführt, eine weitere Verbindung für dieselbe Datenbank erstellt und der Wert von EMPNUM = 2001 ausgewählt.
# 6) Die resultierenden Daten des Mitarbeiters, dessen EMPNUM = 2001, sind nicht die aktualisierten Daten. Weil wir die Operation commit () nicht ausgeführt haben. Wenn Sie dieselbe Verbindung verwendet haben, mit der Sie sie aktualisiert haben, wurden Ihnen die aktualisierten Daten angezeigt. Jetzt haben die Daten festgeschrieben. Die Daten wurden in der Tabelle wiedergegeben.
# 7) Erstellt einen Sicherungspunkt nach dem Festschreibungsvorgang.
# 8) Verwenden der Auswahlabfrage zum Anzeigen von Daten des EMPNUM = 2002. Das Gehalt dieses Mitarbeiters wurde mithilfe einer Aktualisierungsabfrage geändert. Danach werden die Daten des EMPNUM = 2002 unter Verwendung derselben Verbindung angezeigt. Es sollte die aktualisierten Daten anzeigen.
# 9) Führen Sie den Rollback mit der Rollback-Methode bis zum letzten Sicherungspunkt durch. Wenn wir nun die Daten dieses Mitarbeiters über dieselbe Verbindung angezeigt haben, sind die alten Daten vorhanden, da durch das Rollback die Änderungen bis zum letzten Sicherungspunkt rückgängig gemacht werden, wenn beim letzten Festschreiben ein anderer Sicherungspunkt erwähnt wird.
# 10) Wir haben eine Methode erstellt, mit der die Daten angezeigt werden, da wir hier viele Male Daten anzeigen.
JDBC-Datentypen
Datenbanken haben SQL-Datentypen und Java hat Java-Datentypen. Es sollte einen Mechanismus zum Lesen und Schreiben von Daten zwischen einer Java-Anwendung und einer Datenbank geben. Verschiedene Datenbanken unterstützen SQL-Typen, jedoch mit einigen Variationen im Namen.
Zum Beispiel, Die meisten Datenbanken unterstützen große Binärwerte, Oracle nennt es LONG RAW, Sybase nennt es IMAGE, Informix nennt es BYTE und DB2 nennt es LONG VARCHAR FOR BIT DATA.
Beim Schreiben des JDBC-Programms müssen wir uns keine Gedanken über die von der Zieldatenbank verwendeten SQL-Datentypen machen. JDBC verfügt über eine Reihe generischer SQL-Typbezeichner in der Klasse java.sql.Types. Diese Typen unterstützen die meisten generischen SQL-Datentypen. Beim Schreiben eines JDBC-Programms werden nur JDBC-Datentypen verwendet.
Der JDBC-Treiber konvertiert die Java-Datentypen hin und her in Datenbankdatentypen. Mit der Methode java.sql.DatabaseMetaData.getTypeInfo können Sie überprüfen, welche SQL-Typen von einer bestimmten Datenbank tatsächlich unterstützt werden, und dann ein Programm schreiben. JDBC verwendet für die meisten Datentypen eine Standardzuordnung.
Zum Beispiel, Die Java-Zeichenfolge wird in einen SQL-VARCHAR-Typ konvertiert.
In der folgenden Tabelle sehen wir, wie die Zuordnung in der setXXX-, getXXX- und updateXXX-Methode der Schnittstellen prepareStatement oder CallableStatement oder ResultSet erfolgt:
SQL-TYP | JAVA / JDBC-TYP | setXXX | getXXX | updateXXX |
---|---|---|---|---|
GANZE ZAHL | int | setInt | getönt | updateInt |
VERKOHLEN | java.lang.String | setString | getString | updateString |
VARCHAR | java.lang.String | setString | getString | updateString |
LONGVARCHAR | java.lang.String | setString | getString | updateString |
BISSCHEN | Boolescher Wert | setBoolean | getBoolean | updateBoolean |
NUMERISCH | java.math.BigDecimal | setBigDecimal | getBigDecimal | UpdateBigDecimal |
SMALLINT | kurz | setShort | getShort | updateShort |
BIGINT | lange | setLong | getLong | updateLong |
ECHT | schweben | setFloat | getFloat | updateFloat |
SCHWEBEN | schweben | setFloat | getFloat | updateFloat |
DOPPELT | doppelt | setDouble | getDouble | updateDouble |
BINÄR | Byte() | setBytes | getBytes | updateBytes |
DATUM | java.sql.Date | Datum einstellen | Verabredung bekommen | Aktualisierungsdatum |
ZEIT | java.sql.Time | Zeit einstellen | Zeit bekommen | Updatezeit |
TIMESTAMP | java.sql.Timestamp | setTimestamp | getTimestamp | updateTimeStamp |
CLOB | java.sql.Clob | setClob | getClob | updateClob |
KLECKS | java.sql.Blob | setBlob | getBlob | updateBlob |
ARRAY | Array | setArray | getArray | updateArray |
XML | Xml | setSQLXML | getSQLXML | updateSQLXML |
Strukturierter Typ | Objekt | setObject | getObject | updateObject |
In unseren vorherigen Tutorials haben wir die Methoden setXXX, getXXX und updateXXX für grundlegende Datentypen verwendet. Darauf können Sie sich beziehen.
Hier haben wir im folgenden Beispiel die Clob- und Blob-Typen erläutert.
BLOB-Beispielprogramm
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(); } } }
Ausgabe:
Die Datei wurde erfolgreich im angegebenen Pfad gespeichert.
Erläuterung:
Im obigen Programm haben wir zuerst ein Bild im Ordner erstellt / gespeichert 'D: \ Bhakiya \ Bhakiya \ JDBC' . Dieser Ort ist nur zum Beispiel. Sie können Ihren eigenen Dateipfad in Ihrem System erstellen. Der Name der Datei ist ein Bild zum Testen der Software. Dann haben wir ein Java-Programm erstellt, um dieses Image in der DB-Tabelle zu speichern und das Image aus der Tabelle abzurufen und im lokalen System zu speichern.
Bisher haben wir den Überblick über die Aufgabe besprochen. Jetzt werden wir sehen, wie wir es im Programm erreicht haben.
# 1) Erstellen Sie eine Tabelle in der Datenbank, um das Bild zu speichern.
Syntax:
String QUERY = 'Create table Blob_Sample_Example ( PicName varchar2(30), picture BLOB)';
In der obigen Abfrage haben wir 2 Spalten.
- PicName - varchar2 -> Hier wird der Name des Bildes gespeichert
- Bild - BLOB -> Dient zum Speichern des Bildes in der Tabelle.
Der BLOB-Datentyp wird zum Speichern des Bilds in der DB-Tabelle verwendet.
#zwei) Verbindung und Anweisung wurden erstellt und als Ausführungsmethode aufgerufen, um die CREATE-Abfrage auszuführen.
statemnt1.execute(QUERY);
#3) Als Nächstes haben wir die Einfügeabfrage erstellt und mit PreparedStatement ausgeführt.
PreparedStatement-Syntax:
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
# 4) Verwenden von setString () - Legen Sie den Namen des Bildes fest.
# 5) Verwenden Sie zum Festlegen des Bilds die FileInputStream-Klasse, um den Bildspeicherort zu übergeben.
Syntax:
FileInputStream inputStream = new FileInputStream('Picture Full Path');
Anschließend können wir mit der Methode setBlob () das Bild im PreparedStatement-Objekt festlegen. Danach wird die Methode execute von PreparedStatement aufgerufen. Dadurch werden die angegebenen Daten in die Tabelle eingefügt.
Nach dem Ausführen der Einfüge-Abfrage rufen wir mithilfe des ResultSet-Objekts die Daten aus der Tabelle ab (mithilfe von Select Query).
# 6) Mit der Methode getString können wir den Wert der PicName-Spalte abrufen.
# 7) Führen Sie die folgenden Schritte aus, um das Bild zu erhalten:
- Erstellen Sie ein Blob-Objekt und weisen Sie die Rückgabewerte der getBlob-Methode des ResultSet-Objekts zu.
- Die Syntax dafür lautet: Blob blob1 = rs.getBlob ();
- Erstellen Sie ein Byte-Array-Objekt und erhalten Sie den Wert des Blob-Objekts als Bytes.
- Erstellen Sie das Objekt FileOutputStream und übergeben Sie den vollständigen Pfad, um das Bild in diesem Pfad zu speichern. Rufen Sie die write () -Methode des FileOutputStream-Objekts auf, mit der das Bild gespeichert wird.
- Danach wurde das Programm erfolgreich ausgeführt.
# 8) Gehen Sie zum Speicherort des Ausgabebilds und prüfen Sie, ob Eingabe und Ausgabe identisch sind.
CLOB-Beispielprogramm
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(); } } }
Ausgabe:
Eingabedatei:
Die Datei wurde erfolgreich im angegebenen Pfad gespeichert.
Ausgabedatei:
Erläuterung:
Im obigen Programm haben wir zuerst eine Textdatei 'file1.txt' im Ordner 'D: \ Bhakiya \ Bhakiya \ JDBC' erstellt / gespeichert. Dieser Ort ist nur zum Beispiel. Sie können Ihren eigenen Dateipfad in Ihrem System erstellen. Dann haben wir ein Java-Programm erstellt, um diese Datei in der DB-Tabelle zu speichern und diese Datei aus der Tabelle abzurufen und im lokalen System zu speichern.
Bisher haben wir den Überblick über die Aufgabe besprochen. Jetzt werden wir sehen, wie wir es im Programm erreicht haben.
# 1) Erstellen Sie eine Tabelle in der Datenbank, um das Bild zu speichern.
Unten finden Sie die Syntax der CREATE TABLE-Abfrage:
String QUERY = 'Create table Clob_Sample_Example ( FileName varchar2(30), StoreFile CLOB)';
In der obigen Abfrage haben wir 2 Spalten.
- Dateiname - varchar2 -> Hier wird der Name des Bildes gespeichert.
- StoreFile - CLOB -> Dient zum Speichern der Datei in der Tabelle.
Der Datentyp CLOB wird verwendet, um den Zeichentyp der Binärdaten in der DB-Tabelle zu speichern
#zwei) Verbindung und Anweisung wurden erstellt und als Ausführungsmethode aufgerufen, um die CREATE-Abfrage auszuführen.
statemnt1.execute(QUERY);
#3) Als Nächstes haben wir die Einfüge-Abfrage erstellt und mit PreparedStatement ausgeführt.
PreparedStatement-Syntax:
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
# 4) Verwenden von setString () - Legen Sie den Namen des Dateinamens fest.
# 5) Verwenden Sie zum Festlegen / Speichern der Datei die FileReader-Klasse, um die Datei mit dem Füllspeicherort zu übergeben.
Syntax:
FileReader fileRead = new FileReader('D:\Bhakiya\Bhakiya\JDBC\file1.txt');
Anschließend können wir mit der Methode setClob () die Datei im PreparedStatement-Objekt festlegen. Danach wird die Methode execute von PreparedStatement aufgerufen. Dadurch werden die angegebenen Daten in die Tabelle eingefügt.
Nach dem Ausführen der Einfüge-Abfrage rufen wir mit dem ResultSet-Objekt die Daten aus der Tabelle ab (mit Select Query).
Wählen Sie Abfrage:
'select * from Clob_Sample_Example'
# 6) Mit der Methode getString können wir den Wert der FileName-Spalte abrufen.
# 7) Um die Datei zu erhalten, Wir haben die folgenden Schritte befolgt:
- Erstellen Sie ein Clob-Objekt und weisen Sie die Rückgabewerte der getClob-Methode des ResultSet-Objekts zu.
- Die Syntax dafür lautet: Clob clob1 = rs.getClob ();
- Erstellen Sie ein Reader-Objekt und erhalten Sie den Wert des Clob-Objekts als Zeichen.
- Erstellen Sie ein FileWriter-Objekt und übergeben Sie den vollständigen Pfad, um die Datei in diesem Pfad zu speichern. Rufen Sie die write () -Methode des FileWrite-Objekts auf, mit der die Daten in die Datei am Speicherort geschrieben werden.
- Danach wurde das Programm erfolgreich ausgeführt.
# 8) Gehen Sie zum Speicherort der Ausgabedatei und überprüfen Sie, ob die Eingabe- und Ausgabedateien identisch sind.
Punkte, die man sich merken sollte:
- ACID Properties erläutert das Transaktionsmanagement in der Datenbank.
- Commit (), Rollback () und Savepoint sind die wichtigsten Vorgänge im Transaktionsmanagement.
- Durch das Festschreiben werden die Änderungen dauerhaft in der Datenbank vorgenommen, durch das Zurücksetzen werden die Änderungen bis zum letzten Festschreiben oder dem genannten Sicherungspunkt rückgängig gemacht, und mit dem Sicherungspunkt wird ein Prüfpunkt erstellt.
- Die Datenbank verwaltet SQL-Datentypen und Java verwaltet Java-Datentypen. Der JDBC-Treiber wird für diese Konvertierung verwendet.
- Der JDBC-Treiber selbst verfügt über einige SQL-Kennungen, sodass sich der Programmierer nicht um Datentypen kümmern muss.
Häufig gestellte Fragen
F # 1) Was ist der JDBC-Datentyp?
Antworten: Java hat seine Datentypen und die Datenbank hat ihre Datentypen. Der JDBC-Treiber konvertiert den Java-Datentyp in den entsprechenden SQL-Datentyp, der von der Datenbank akzeptiert wird. ResultSet-Objekte bieten auch setXXX () -Methoden und getXXX () -Methoden, die für die entsprechenden Datentypen verfügbar sind.
F # 2) Was ist der Datentyp für das Datum in Java?
Antworten: Das Datum in Java ist nicht nur ein Datentyp, sondern eine Klasse. Ein Datum in Java enthält das Datum, die Uhrzeit, das Jahr, den Namen des Tages, den Wochentag und die Zeitzone. Die Datumsklasse verfügt über die entsprechenden Methoden zum Abrufen der relevanten Daten.
F # 3) Was ist der Unterschied zwischen java.util.Date und java.sql.Date?
Antworten: Der Hauptunterschied ist java.util.Date enthält auch Informationen zu Datum und Uhrzeit. Aber java.sql.Date enthält nur Informationen zum Datum. Dies ist der Hauptunterschied, den wir java.util.Date nicht direkt mit java.sql.Date zuordnen können.
F # 4) Haben wir eine Klasse in Java, die TIME und TIMESTAMP für SQL darstellt?
Antworten: Ja, wir haben eine Klasse für TIME und einen TIMESTAMP-Typ für SQL. Die Klasse java.sql.Time repräsentiert zeitbezogene Informationen. Die Klasse java.sql.timestamp repräsentiert TIMESTAMP-bezogene Informationen.
F # 5) Wie starte ich eine Transaktion in JDBC?
Antworten: Die JDBC-Verbindung beginnt mit aktiviertem Auto-Commit-Modus, bei dem jede SQL-Anweisung als Transaktion betrachtet wird. Es gibt keinen bestimmten Prozess zum Starten einer Transaktion in JDBC. Wenn Sie eine Verbindung herstellen und mit der Ausführung der SQL-Anweisung beginnen, hat die Transaktion dort begonnen.
F # 6) Was ist die commit () -Methode in Java?
Antworten: Die Commit () -Methode in Java wird verwendet, um die Änderungen zu speichern, die seit dem letzten Commit () vorgenommen wurden. Die Commit () -Methode ist in der Verbindungsschnittstelle verfügbar. Mit einem Verbindungsobjekt können wir commit () aufrufen.
F # 7) Was ist die Rollback-Methode in Java?
Antworten: Wenn nach dem letzten Commit () Probleme aufgetreten sind, können wir die rollback () -Methode aufrufen, um alle vorgenommenen Änderungen rückgängig zu machen, bis die letzte commit.rollback () -Methode in der Verbindungsschnittstelle verfügbar ist. Mit einem Verbindungsobjekt können wir die rollback () -Methode aufrufen.
Fazit
Hier haben wir Datentypen in Java und DB behandelt und wie der JDBC-Treiber damit umgeht. Wir haben ACID-Eigenschaften diskutiert. Das ist für das Bankwesen am wichtigsten. Es wird sehr hilfreich für Ihre Karriere sein. Im Abschnitt Transaktionsverwaltung haben wir Commit- und Rollback-Methoden wie commit (), rollback (), setAutoCommit (), setSavepoint () und releaseSavepoint () erläutert.
Literatur-Empfehlungen
- Java JDBC Tutorial: Was ist JDBC (Java Database Connectivity)
- Java JDBC-Verbindungs-Tutorial mit Programmierbeispiel
- JDBC DriverManager, JDBC PreparedStatement And Statement
- JDBC ResultSet: Verwendung von Java ResultSet zum Abrufen von Daten
- Java DataTypes, Loops, Arrays, Switch und Assertions
- Java String length () -Methode mit Beispielen
- Wie verwende ich die Java toString-Methode?
- Testen der Selendatenbank (mit WebDriver und JDBC-API)