java jdbc transaction management with example
W tym samouczku wyjaśniono typy transakcji JDBC, typy danych, metody zarządzania transakcjami i sposób ich używania w programie Java:
w Zestaw wyników JDBC samouczek Seria samouczków JDBC , nauczyliśmy się używać zestawu wyników JDBC do pobierania danych.
W tym samouczku omówimy typy transakcji w JDBC. W naszych poprzednich samouczkach widzieliśmy krótkie wprowadzenie do typów transakcji. Tutaj zobaczymy szczegółowo. Omówimy również, jakie są typy danych w JDBC i jak ich używać w programie Java.
Baza danych będzie miała różne typy danych, a Java będzie mieć różne typy danych. JDBC zajmie się tym zróżnicowaniem. Przygotujmy się na ważny temat w JDBC.
Czego się nauczysz:
Zarządzanie transakcjami JDBC
Sekwencja działań (instrukcje SQL) jest traktowana jako pojedyncza jednostka, nazywana transakcją. Zarządzanie transakcjami jest ważne dla aplikacji zorientowanych na RDBMS, aby zachować integralność i spójność danych.
Podczas realizacji transakcji użyjemy metod getXXX i setXXX do pobrania i ustawienia danych w obiekcie ResultSet. XXX reprezentuje typy danych kolumn. W tym samouczku omówimy transakcje i typy danych JDBC.
Rodzaje transakcji
W JDBC każde zapytanie SQL będzie traktowane jako transakcja. Kiedy tworzymy połączenie z bazą danych w JDBC, będzie ono działać w trybie automatycznego zatwierdzania (wartość automatycznego zatwierdzania to PRAWDA). Po wykonaniu instrukcji SQL zostanie ona zatwierdzona automatycznie.
Czasami możemy chcieć zatwierdzić transakcję po wykonaniu kilku instrukcji SQL. W tym momencie musimy ustawić wartość automatycznego zatwierdzania na False. Dzięki temu dane nie zostaną zatwierdzone przed wykonaniem wszystkich zapytań. Jeśli dostaniemy wyjątek w transakcji, możemy cofnąć () zmiany i zrobić to jak poprzednio. Zarządzanie transakcjami można dobrze wyjaśnić - używając właściwości ACID.
ACID oznacza
- A – Atomowość -> Jeśli wszystkie zapytania zostaną wykonane pomyślnie, dane zostaną zatwierdzone, w przeciwnym razie nie.
- C – Spójność -> DB musi być spójny po każdej transakcji.
- I– Izolacja -> Transakcja jest odizolowana od innych transakcji.
- D – Trwałość -> Jeśli transakcja zostanie zatwierdzona raz, pozostanie zawsze zatwierdzona.
W zarządzaniu transakcjami są trzy najważniejsze funkcje. Oni są:
jak wyodrębnić pliki .7z na komputerze Mac
- Popełnić: Po wykonaniu instrukcji SQL chcemy, aby zmiany w Bazie Danych były trwałe. Powinniśmy wywołać metodę commit (). Zwykle to, co jest zatwierdzeniem, oznacza, że wprowadzi zmiany na stałe w bazie danych. Nie możemy cofnąć / odwołać zmian. Ale możemy zmienić dane w Bazie Danych.
- Wycofywanie: Wycofanie cofa zmiany do ostatniego zatwierdzenia lub wspomnianego punktu zapisu. Czasami możemy chcieć cofnąć zmiany. Na przykład, mamy jedno zagnieżdżone zapytanie, jedna część została wykonana pomyślnie, a druga zgłosiła wyjątek. Chcemy wtedy cofnąć zmiany wprowadzone przez pierwszą część, powinniśmy wywołać metodę Rollback (), aby to zrobić, jeśli wystąpił wyjątek.
- Punkt zapisu: Punkt zapisywania pomaga w tworzeniu punktu kontrolnego w transakcji i pozwala na przywrócenie do tego konkretnego punktu zapisu. Każdy punkt zapisu utworzony dla transakcji zostanie automatycznie zniszczony i stanie się nieważny, gdy transakcja zostanie zatwierdzona lub wycofana.
Do tej pory widzieliśmy, co to jest zatwierdzanie, wycofywanie i zapisywanie oraz ich operacje. Poniżej zobaczymy metody tego i jak z niego korzystać w programie.
Metody zarządzania transakcjami
Interfejs połączenia zapewnia 5 metod zarządzania transakcjami. Są one następujące:
# 1) setAutoCommit () Metoda
Domyślnie wartością AutoCommit jest TRUE. Po wykonaniu instrukcji SQL zostanie ona zatwierdzona automatycznie. Za pomocą metody setAutoCommit () możemy ustawić wartość na AutoCommit.
# 2) Metoda Commit ()
Do zatwierdzenia danych używana jest metoda zatwierdzenia. Po wykonaniu instrukcji SQL możemy wywołać metodę commit (). Zatwierdzi zmiany wprowadzone przez instrukcję SQL.
Składnia: conn.commit ();
# 3) Metoda Rollback ()
Metoda wycofywania służy do cofania zmian do ostatniego zatwierdzenia. Jeśli napotkamy jakiś problem lub wyjątek w przepływie wykonywania instrukcji SQL, możemy cofnąć transakcję.
Składnia: conn.rollback ();
# 4) metoda setSavepoint ()
Savepoint daje Ci dodatkową kontrolę nad transakcją. Kiedy ustawisz punkt zapisu w transakcji (grupa instrukcji SQL), możesz użyć metody rollback (), aby cofnąć wszystkie zmiany do punktu zapisu lub po punkcie zapisu (). setSavepoint () służy do tworzenia nowego punktu zapisu.
# 5) metoda releaseSavepoint ()
Służy do usuwania utworzonego punktu zapisu.
W poniższym programie dowiesz się więcej o tych metodach, a także nauczysz się ich używać w programie Java.
W tym samouczku wszystkie programy są napisane w języku Java. Użyliśmy wersji Java 8 i Oracle DB.
>> Kliknij tutaj aby pobrać oprogramowanie Oracle.
>> Kliknij tutaj aby pobrać wersję Java 8.
Posiada proces instalacji Java krok po kroku.
Przykładowy program transakcji
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); } } }
Wynik:
Wyjaśnienie:
W powyższym programie do zarządzania transakcjami dokonaliśmy aktualizacji wartości danego pracownika w tabeli EMPLOYEE_DETAILS i zatwierdzeniu danych. Jeśli wystąpił jakikolwiek błąd lub wyjątek, wykonaliśmy operację rollback (). Teraz zobaczymy pełne wyjaśnienie programu.
# 1) Utworzono zapytanie 2 Select dla 2 pracowników na podstawie ich EMPID
Poniżej znajdują się 2 wybrane zapytania.
String QUERY = 'select * from employee_details where empNum = 2001'; String QUERY1 = 'select * from employee_details where empNum = 2002';
#dwa) Utworzono dwa zapytania aktualizacyjne dla 2 pracowników na podstawie ich EMPID
Dwa zaktualizowane zapytania:
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) Otwórz połączenie, wykonaj zapytanie wybierające i wyświetl dane EMPNUM = 2001.
# 4) Używając metody setAutoCommit (), ustaw wartość autoCommit na false.
# 5) Wykonano kwerendę aktualizacyjną EMPNUM = 2001 i utworzono inne połączenie dla tej samej bazy danych oraz wybrano wartość EMPNUM = 2001.
# 6) Wynikowe dane Pracownika, którego EMPNUM = 2001 nie są danymi zaktualizowanymi. Ponieważ nie wykonaliśmy operacji commit (). Jeśli używałeś tego samego połączenia, w którym używałeś go do aktualizacji, pokazałby ci zaktualizowane dane. Teraz zatwierdził dane. Dane zostały odzwierciedlone w tabeli.
# 7) Utworzono jeden punkt zapisu po zatwierdzeniu operacji.
# 8) Użycie zapytania wybierającego do wyświetlenia danych EMPNUM = 2002. Zmieniono wynagrodzenie tego pracownika za pomocą zapytania aktualizującego. Następnie wyświetlono dane EMPNUM = 2002, używając tego samego połączenia. Powinien pokazywać zaktualizowane dane.
# 9) Wykonano wycofywanie do ostatniego punktu zapisu przy użyciu metody wycofywania zmian. Teraz, gdy wyświetliliśmy dane tego pracownika korzystającego z tego samego połączenia, ma on stare dane, ponieważ wycofanie cofa zmiany do ostatniego punktu zapisu, jeśli do ostatniego zatwierdzenia wspomnimy inny punkt zapisu.
# 10) Stworzyliśmy jedną metodę, która będzie wyświetlać dane, ponieważ wyświetlamy tutaj dane wiele razy.
Typy danych JDBC
Bazy danych mają typy danych SQL, a Java ma typy danych Java. Powinien istnieć mechanizm odczytu i zapisu danych między aplikacją Java a bazą danych. Różne bazy danych obsługują typy SQL, ale z pewnymi odmianami nazwy.
Na przykład, większość baz danych obsługuje duże wartości binarne, Oracle nazywa to LONG RAW, Sybase nazywa to IMAGE, Informix nazywa to BYTE, a DB2 nazywa to LONG VARCHAR FOR BIT DATA.
Pisząc program JDBC, nie musimy martwić się o typy danych SQL używane przez docelową bazę danych. JDBC ma zestaw ogólnych identyfikatorów typu SQL w klasie java.sql.Types. Te typy są przeznaczone do obsługi większości ogólnych typów danych SQL. Pisząc program JDBC, będziemy używać tylko typów danych JDBC.
Sterownik JDBC konwertuje typy danych Java na typy danych bazy danych w tę iz powrotem. Możesz użyć metody java.sql.DatabaseMetaData.getTypeInfo, aby sprawdzić, które typy SQL są faktycznie obsługiwane przez daną bazę danych, a następnie napisać program. JDBC używa domyślnego odwzorowania dla większości typów danych.
Na przykład, ciąg Java zostanie przekonwertowany na typ SQL VARCHAR.
W poniższej tabeli zobaczymy, jak odbywa się mapowanie w metodzie setXXX, getXXX i updateXXX interfejsu readyStatement lub CallableStatement lub ResultSet:
TYP SQL | TYP JAVA / JDBC | setXXX | getXXX | updateXXX |
---|---|---|---|---|
LICZBA CAŁKOWITA | int | setInt | przyciemniane | updateInt |
ZWĘGLAĆ | java.lang.String | setString | getString | updateString |
VARCHAR | java.lang.String | setString | getString | updateString |
LONGVARCHAR | java.lang.String | setString | getString | updateString |
KAWAŁEK | boolean | setBoolean | getBoolean | updateBoolean |
NUMERYCZNE | java.math.BigDecimal | setBigDecimal | getBigDecimal | UpdateBigDecimal |
SMALLINT | krótki | setShort | getShort | updateShort |
BIGINT | długo | setLong | getLong | updateLong |
REAL | pływak | setFloat | getFloat | updateFloat |
PŁYWAK | pływak | setFloat | getFloat | updateFloat |
PODWÓJNIE | podwójnie | setDouble | getDouble | updateDouble |
DWÓJKOWY | bajt[] | setBytes | getBytes | updateBytes |
DATA | java.sql.Date | ustawić datę | getDate | updateDate |
CZAS | java.sql.Time | setTime | uzyskać czas | czas aktualizacji |
ZNAK CZASU | java.sql.Timestamp | setTimestamp | getTimestamp | updateTimeStamp |
CLOB | java.sql.Clob | setClob | getClob | updateClob |
KROPELKA | java.sql.Blob | setBlob | getBlob | updateBlob |
SZYK | Szyk | setArray | getArray | updateArray |
XML | XML | setSQLXML | getSQLXML | updateSQLXML |
Typ strukturalny | Obiekt | setObject | getObject | updateObject |
Metodę setXXX, getXXX i updateXXX dla podstawowych typów danych ustawiliśmy w naszych poprzednich samouczkach. Możesz się do tego odnieść.
Tutaj wyjaśniliśmy typy clob i blob w poniższym przykładzie.
Przykładowy program 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(); } } }
Wynik:
Plik został pomyślnie zapisany w podanej ścieżce.
Wyjaśnienie:
W powyższym programie zrobiliśmy to, że najpierw utworzyliśmy / zapisaliśmy jeden obraz w folderze „D: \ Bhakiya \ Bhakiya \ JDBC” . Ta lokalizacja to tylko przykład. Możesz stworzyć własną ścieżkę do pliku w swoim systemie. Nazwa pliku to pic test oprogramowania. Następnie stworzyliśmy jeden program Java do przechowywania tego obrazu w tabeli DB i pobierania obrazu z tabeli i przechowywania go w systemie lokalnym.
Do tej pory omówiliśmy ogólny zarys zadania. Teraz zobaczymy, jak to osiągnęliśmy w programie.
# 1) Utwórz jedną tabelę w bazie danych do przechowywania obrazu.
Składnia:
String QUERY = 'Create table Blob_Sample_Example ( PicName varchar2(30), picture BLOB)';
W powyższym zapytaniu mamy 2 kolumny.
- PicName - varchar2 -> Służy do przechowywania nazwy zdjęcia
- picture - BLOB -> Służy do przechowywania zdjęcia w tabeli.
Typ danych BLOB jest używany do przechowywania obrazu / obrazu w tabeli DB.
#dwa) Połączenie i instrukcja zostały utworzone i wywołane metodą wykonania w celu wykonania zapytania CREATE.
statemnt1.execute(QUERY);
# 3) Następnie utworzyliśmy zapytanie wstawiające i wykonaliśmy je za pomocą PreparedStatement.
Składnia PreparedStatement:
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
# 4) Używając setString () - ustaw nazwę obrazka.
# 5) Aby ustawić Picture, użyj klasy FileInputStream, aby przekazać lokalizację obrazu.
Składnia:
FileInputStream inputStream = new FileInputStream('Picture Full Path');
Następnie za pomocą metody setBlob () możemy ustawić obraz w obiekcie PreparedStatement. Następnie wywołano metodę wykonywania PreparedStatement. Spowoduje to wstawienie podanych danych do tabeli.
Po wykonaniu zapytania insertowego przy pomocy obiektu ResultSet pobieramy dane z Table (przy pomocy Select Query).
# 6) Korzystając z metody getString, możemy uzyskać wartość kolumny PicName.
# 7) Aby uzyskać zdjęcie, wykonaj poniższe czynności:
- Utwórz obiekt Blob i przypisz wartości zwracane metody getBlob obiektu ResultSet.
- Składnia to: Blob blob1 = rs.getBlob ();
- Utwórz obiekt tablicy bajtów i pobierz wartość obiektu Blob jako bajty.
- Utwórz obiekt FileOutputStream i przekaż pełną ścieżkę, aby zapisać obraz w tej ścieżce. Wywołaj metodę write () obiektu FileOutputStream - która zapisze obraz.
- Następnie program został pomyślnie wykonany.
# 8) Przejdź do lokalizacji obrazu wyjściowego i sprawdź, czy wejście i wyjście są takie same.
Przykładowy program 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(); } } }
Wynik:
Plik wejściowy:
Plik został pomyślnie zapisany w podanej ścieżce.
Plik wyjściowy:
Wyjaśnienie:
W powyższym programie najpierw utworzyliśmy / zapisaliśmy jeden plik tekstowy „file1.txt” w folderze „D: \ Bhakiya \ Bhakiya \ JDBC”. Ta lokalizacja to tylko przykład. Możesz stworzyć własną ścieżkę do pliku w swoim systemie. Następnie stworzyliśmy jeden program Java, aby przechowywać ten plik w tabeli DB i pobrać ten plik z tabeli i przechowywać go w systemie lokalnym.
Do tej pory omawialiśmy ogólny zarys zadania. Teraz zobaczymy, jak to osiągnęliśmy w programie.
# 1) Utwórz jedną tabelę w bazie danych do przechowywania obrazu.
Poniżej znajduje się składnia zapytania CREATE TABLE:
String QUERY = 'Create table Clob_Sample_Example ( FileName varchar2(30), StoreFile CLOB)';
W powyższym zapytaniu mamy 2 kolumny.
- FileName - varchar2 -> Służy do przechowywania nazwy obrazu.
- StoreFile - CLOB -> Służy do przechowywania pliku w tabeli.
Typ danych CLOB jest używany do przechowywania danych binarnych typu Character w tabeli DB
#dwa) Połączenie i instrukcja zostały utworzone i wywołane metodą wykonania w celu wykonania zapytania CREATE.
statemnt1.execute(QUERY);
# 3) Następnie utworzyliśmy zapytanie wstawiające i wykonaliśmy je za pomocą PreparedStatement.
Składnia PreparedStatement:
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
# 4) Używając setString () - ustaw nazwę FileName.
# 5) Aby ustawić / zapisać plik, użyj klasy FileReader, aby przekazać plik z lokalizacją wypełnienia.
Składnia:
FileReader fileRead = new FileReader('D:\Bhakiya\Bhakiya\JDBC\file1.txt');
Następnie za pomocą metody setClob () możemy ustawić plik w obiekcie PreparedStatement. Następnie wywołano metodę wykonywania PreparedStatement. Spowoduje to wstawienie podanych danych do tabeli.
Po wykonaniu zapytania insertowego przy pomocy obiektu ResultSet pobieramy dane z Table (przy pomocy Select Query).
Wybierz zapytanie:
'select * from Clob_Sample_Example'
# 6) Korzystając z metody getString możemy uzyskać wartość kolumny FileName.
# 7) Aby uzyskać plik, wykonaliśmy poniższe kroki:
- Utwórz obiekt Clob i przypisz wartości zwracane metody getClob obiektu ResultSet.
- Składnia to: Clob clob1 = rs.getClob ();
- Utwórz obiekt Reader i uzyskaj wartość obiektu Clob jako Character.
- Utwórz obiekt FileWriter i przekaż pełną ścieżkę, aby zapisać plik w tej ścieżce. Wywołaj metodę write () obiektu FileWrite - która zapisze dane w pliku w lokalizacji.
- Następnie program został pomyślnie wykonany.
# 8) Przejdź do lokalizacji pliku wyjściowego i sprawdź, czy pliki wejściowe i wyjściowe są takie same.
Punkty do zapamiętania:
- ACID Properties wyjaśnia zarządzanie transakcjami w bazie danych.
- Commit (), rollback () i savepoint to najważniejsze operacje w zarządzaniu transakcjami.
- Commit wprowadzi zmiany na stałe w DB, Rollback cofnie zmiany do ostatniego zatwierdzenia lub wspomnianego punktu zapisu, a punkt zapisu pomoże stworzyć punkt kontrolny.
- Baza danych utrzymuje typy danych SQL, a Java utrzymuje typy danych Java. Do obsługi tej konwersji używany jest sterownik JDBC.
- Sam sterownik JDBC ma pewne typy identyfikatorów SQL, więc programista nie musi się martwić o typy danych.
Często Zadawane Pytania
P # 1) Jaki jest typ danych JDBC?
Odpowiedź: Java ma swoje typy danych, a baza danych ma swoje typy danych. Sterownik JDBC konwertuje typ danych Java na odpowiedni typ danych SQL, który będzie akceptowany przez bazę danych. Obiekty ResultSet zapewniają również metody setXXX () i metody getXXX () dostępne dla odpowiednich typów danych.
Pytanie 2) Jaki jest typ danych daty w Javie?
Odpowiedź: Data w Javie to nie tylko typ danych, ale także klasa. Data w języku Java zawiera datę, godzinę, rok, nazwę dnia, dzień tygodnia i strefę czasową. Klasa Date zawiera odpowiednie metody pobierania odpowiednich danych.
P # 3) Jaka jest różnica między java.util.Date a java.sql.Date?
Odpowiedź: Główną różnicą jest to, że java.util.Date zawiera również informacje o dacie i godzinie. Ale java.sql.Date zawiera tylko informacje o dacie. To jest główna różnica, której nie możemy zmapować bezpośrednio z java.util.Date za pomocą java.sql.Date.
Q # 4) Czy mamy klasę w Javie do reprezentowania typu TIME i TIMESTAMP dla SQL?
Odpowiedź: Tak, mamy klasę dla typu TIME i TIMESTAMP dla SQL. Klasa java.sql.Time reprezentuje informacje związane z CZASEM. Klasa java.sql.timestamp reprezentuje informacje związane z TIMESTAMP.
Q # 5) Jak rozpocząć transakcję w JDBC?
Odpowiedź: Połączenie JDBC jest uruchamiane z włączonym trybem automatycznego zatwierdzania, w którym każda instrukcja SQL jest traktowana jako transakcja. Nie ma określonego procesu rozpoczynania transakcji w JDBC. Kiedy tworzysz połączenie i zaczynasz wykonywać instrukcję SQL, jest to miejsce, w którym transakcja została rozpoczęta.
P # 6) Jaka jest metoda commit () w Javie?
Odpowiedź: Metoda Commit () w Javie służy do zapisywania zmian wprowadzonych od czasu ostatniego zatwierdzenia (). Commit () jest dostępna w interfejsie Connection. Korzystając z obiektu connection, możemy wywołać metodę commit ().
P # 7) Jaka jest metoda wycofywania zmian w Javie?
Odpowiedź: Po ostatnim zatwierdzeniu (), jeśli wystąpiły jakiekolwiek problemy, możemy wywołać metodę rollback (), aby cofnąć wszystkie zmiany wprowadzone do momentu, gdy ostatnia metoda commit.rollback () będzie dostępna w interfejsie Connection. Korzystając z obiektu connection, możemy wywołać metodę rollback ().
Wniosek
Tutaj omówiliśmy typy danych w Javie i DB oraz sposób, w jaki obsługuje je sterownik JDBC. Omówiliśmy właściwości KWASÓW. To jest najważniejsze dla sektora bankowego. Będzie to bardzo pomocne w Twojej karierze. W sekcji Zarządzanie transakcjami omówiliśmy metody zatwierdzania i wycofywania, takie jak commit (), rollback (), setAutoCommit (), setSavepoint () i releaseSavepoint ().
rekomendowane lektury
- Samouczek Java JDBC: Co to jest JDBC (łączność z bazą danych Java)
- Samouczek dotyczący połączeń JDBC w języku Java z przykładem programowania
- JDBC DriverManager, JDBC PreparedStatement And Statement
- JDBC ResultSet: jak używać Java ResultSet do pobierania danych
- Java DataTypes, pętle, tablice, przełącznik i asercje
- Metoda Java String length () z przykładami
- Jak korzystać z metody toString w języku Java?
- Testowanie bazy danych selenu (przy użyciu WebDriver i JDBC API)