java jdbc transaction management with example
Aquest tutorial explica els tipus de transaccions JDBC, els tipus de dades, els mètodes de gestió de transaccions i com utilitzar-los al programa Java:
A la JDBC ResultSet tutorial del Sèrie de tutorials JDBC , hem après a utilitzar JDBC ResultSet per recuperar dades.
En aquest tutorial, parlarem dels tipus de transacció a JDBC. Hem vist una breu introducció als tipus de transacció als nostres tutorials anteriors. Aquí veurem de manera detallada. També tractarem quins són els tipus de dades a JDBC i com utilitzar-los al programa Java.
La base de dades tindrà diferents tipus de dades i Java tindrà diferents tipus de dades. JDBC gestionarà aquesta diferenciació. Preparem-nos per conèixer el tema important de JDBC.
Què aprendreu:
Gestió de transaccions JDBC
La seqüència d'accions (sentències SQL) es tracta com una sola unitat que es coneix com a transacció. La gestió de transaccions és important per a les aplicacions orientades a l'RGBD per mantenir la integritat i la coherència de les dades.
Mentre realitzem la transacció, utilitzarem mètodes getXXX i setXXX per recuperar i establir les dades a l'objecte ResultSet. XXX representa els tipus de dades de les columnes. En aquest tutorial tractarem la transacció i els tipus de dades de JDBC.
Tipus de transaccions
A JDBC totes les consultes SQL es consideraran com una transacció. Quan creem una connexió de base de dades a JDBC, s'executarà en mode de confirmació automàtica (el valor de confirmació automàtica és TRUE). Després de l'execució de la sentència SQL, es comprometrà automàticament.
De vegades, és possible que vulguem comprometre la transacció després d’executar algunes sentències SQL més. En aquest moment, hem d’establir el valor de confirmació automàtica a False. De manera que aquestes dades no es comprometran abans d’executar totes les consultes. Si obtenim una excepció en la transacció, podem desfer canvis () i fer-los com abans. La gestió de transaccions es pot explicar bé, mitjançant propietats ACID.
Significa àcid
- A – Atomicity -> Si totes les consultes s’executen amb èxit, es confirmaran les dades, en cas contrari no.
- C – Coherència -> El DB ha d'estar en un estat coherent després de qualsevol transacció.
- I– Aïllament -> La transacció està aïllada d'altres transaccions.
- D – Durabilitat -> Si la transacció es realitza una vegada, es mantindrà sempre compromesa.
Hi ha tres funcions més importants en la gestió de transaccions. Ells són:
Com puc trobar una clau de seguretat de xarxa
- Compromís: Després de l'execució de les sentències SQL, volem que els canvis siguin permanents a la base de dades. Hauríem de trucar al mètode commit (). Normalment, el que és commit significa que farà els canvis permanentment a la base de dades. No podem desfer / revocar els canvis. Però podem canviar les dades de la base de dades.
- Retrocés: La retrocés desfà els canvis fins a l'última confirmació o punt de guarda esmentat. De vegades és possible que vulguem desfer els canvis. Per exemple, tenim una consulta imbricada, una part s'ha executat amb èxit i l'altra ha generat alguna excepció. En aquest moment, volem desfer els canvis fets per la primera part, hauríem de trucar al mètode Rollback () per fer-ho si s'ha produït una excepció.
- Savepoint: Savepoint ajuda a crear un punt de verificació en una transacció i permet fer una recuperació del punt de guarda en particular. Qualsevol punt de guarda que s'hagi creat per a una transacció es destruirà automàticament i quedarà invàlid una vegada que es transmeti o s'anul·li la transacció.
Fins ara hem vist què és commit, rollback i savepoint i les seves operacions. A continuació, veurem els mètodes i la forma d’utilitzar-lo al programa.
Mètodes de gestió de transaccions
La interfície de connexió proporciona 5 mètodes per a la gestió de transaccions. Són els següents:
# 1) mètode setAutoCommit ()
De manera predeterminada, el valor del compromís automàtic és TRUE. Després de l'execució de la sentència SQL, es comprometrà automàticament. Mitjançant el mètode setAutoCommit () podem establir el valor en AutoCommit.
# 2) Mètode Commit ()
El mètode commit s’utilitza per confirmar les dades. Després de l'execució de la sentència SQL, podem trucar al commit (). Comprometrà els canvis realitzats per la sentència SQL.
Sintaxi: conn.commit ();
# 3) Mètode Rollback ()
El mètode de retrocés s'utilitza per desfer els canvis fins que s'ha produït l'última confirmació. Si ens enfrontem a qualsevol problema o excepció en el flux d'execució de les sentències SQL, podem desfer la transacció.
Sintaxi: conn.rollback ();
# 4) mètode setSavepoint ()
Savepoint us proporciona un control addicional sobre la transacció. Quan configureu un punt de guardat a la transacció (un grup d’instruccions SQL), podeu utilitzar el mètode rollback () per desfer tots els canvis fins al punt de guardat o després del punt de guardat (). El mètode setSavepoint () s’utilitza per crear un nou punt de guardat.
# 5) Mètode releaseSavepoint ()
S'utilitza per eliminar el punt de guarda creat.
Al programa següent, coneixereu més sobre aquests mètodes i també aprendreu a utilitzar-lo al programa Java.
En aquest tutorial, tots els programes estan escrits en Java. Hem utilitzat la versió Java 8 i Oracle DB.
>> Feu clic a aquí per descarregar el programari Oracle.
>> Feu clic a aquí per descarregar la versió 8 de Java.
Té el procés d’instal·lació de Java pas a pas.
Programa d'exemple de transaccions
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); } } }
Sortida:
Explicació:
El que hem fet al programa de gestió de transaccions anterior és actualitzar els valors de l’empleat donat a la taula EMPLOYEE_DETAILS i confirmar les dades. Si s'ha produït algun error o excepció, hem fet l'operació rollback (). Ara veurem l’explicació completa del programa.
# 1) S'ha creat 2 consultes selectes per a 2 empleats segons el seu EMPID
A continuació es mostren les 2 consultes seleccionades.
String QUERY = 'select * from employee_details where empNum = 2001'; String QUERY1 = 'select * from employee_details where empNum = 2002';
# 2) S'han creat dues consultes d'actualització per a 2 empleats en funció del seu EMPID
Dues consultes actualitzades:
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) Obriu Connection, executeu la consulta de selecció i mostreu les dades d'EMPNUM = 2001.
# 4) Amb el mètode setAutoCommit (), establiu el valor de autoCommit a false.
# 5) S'ha executat la consulta d'actualització d'EMPNUM = 2001 i s'ha creat una altra connexió per a la mateixa base de dades i s'ha seleccionat el valor d'EMPNUM = 2001.
# 6) Les dades resultants de l'empleat el EMPNUM = 2001 de les quals no són les dades actualitzades. Perquè no hem fet l'operació commit (). Si heu utilitzat la mateixa connexió en què l'heu fet servir per actualitzar, us hauria mostrat les dades actualitzades. Ara es comprometen les dades. Les dades s’han reflectit a la taula.
# 7) S'ha creat un punt de guarda després de l'operació de confirmació.
# 8) Utilitzant la consulta de selecció per mostrar dades de l'EMPNUM = 2002. Es va canviar el salari d'aquest empleat mitjançant una consulta d'actualització. Després d'això es van mostrar les dades de l'EMPNUM = 2002, utilitzant la mateixa connexió. Ha de mostrar les dades actualitzades.
# 9) Feu la recuperació fins a l'últim punt de guardat mitjançant el mètode de recuperació. Ara, quan hem mostrat les dades d’aquest empleat que utilitza la mateixa connexió, té les dades antigues perquè el rollback desfà els canvis fins a l’últim punt de salvament si esmentem savepoint else a l’últim commit.
# 10) Hem creat un mètode que mostrarà les dades perquè aquí les mostrem moltes vegades.
Tipus de dades JDBC
Les bases de dades tenen tipus de dades SQL i Java té tipus de dades Java. Hi hauria d’haver un mecanisme per llegir i escriure dades entre una aplicació Java i una base de dades. Diferents bases de dades admeten tipus SQL, però amb algunes variacions en el nom.
Per exemple, la majoria de les bases de dades admeten valors binaris grans, Oracle l’anomena LONG RAW, Sybase l’anomena IMATGE, Informix l’anomena BYTE i DB2 l’anomena LONG VARCHAR FOR BIT DATA.
Mentre escrivim el programa JDBC, no ens hem de preocupar dels tipus de dades SQL que utilitza la base de dades de destinació. JDBC té un conjunt d'identificadors de tipus SQL genèrics a la classe java.sql.Types. Aquests tipus estan dissenyats per donar suport a la majoria dels tipus de dades SQL genèrics. Mentre escrivim un programa JDBC, utilitzarem només tipus de dades JDBC.
El controlador JDBC convertirà els tipus de dades Java a tipus de dades de base de dades d'anada i tornada. Podeu utilitzar el mètode java.sql.DatabaseMetaData.getTypeInfo per comprovar quins tipus SQL són realment compatibles amb una base de dades determinada i, a continuació, escriure un programa. JDBC utilitza un mapatge predeterminat per a la majoria dels tipus de dades.
Per exemple, la cadena Java es convertirà en un tipus SQL VARCHAR.
Veurem com es realitza l’assignació al mètode setXXX, getXXX i updateXXX de les interfícies preparades Statement o CallableStatement o ResultSet a la taula següent:
TIPUS SQL | TIPUS JAVA / JDBC | setXXX | getXXX | actualitzacióXXX |
---|---|---|---|---|
ENTER | int | setInt | tenyit | updateInt |
CHAR | java.lang.String | setString | getString | updateString |
VARCHAR | java.lang.String | setString | getString | updateString |
LONGVARCHAR | java.lang.String | setString | getString | updateString |
BIT | booleà | setBooleà | getBoolean | updateBoolean |
NUMÈRIC | java.math.BigDecimal | setBigDecimal | getBigDecimal | UpdateBigDecimal |
SMALLINT | curt | setShort | getShort | updateShort |
BIGINT | llarg | setLong | getLong | actualització Llarga |
REAL | flotar | setFloat | getFloat | updateFloat |
FLOTAR | flotar | setFloat | getFloat | updateFloat |
DOBLE | doble | setDouble | getDouble | updateDouble |
BINARI | byte () | setBytes | getBytes | updateBytes |
DATA | java.sql.Date | setDate | getDate | updateDate |
TEMPS | java.sql.Time | setTime | getTime | updateTime |
TIMESTAMP | java.sql.Timestamp | setTimestamp | getTimestamp | updateTimeStamp |
CLOB | java.sql.Clob | setClob | getClob | updateClob |
BLOB | java.sql.Blob | setBlob | getBlob | updateBlob |
ARRAY | Matriu | setArray | getArray | updateArray |
XML | Xml | setSQLXML | getSQLXML | updateSQLXML |
Tipus estructurat | Objecte | setObject | getObject | updateObject |
Hem establert el mètode XXX, getXXX i updateXXX per als tipus de dades bàsics als nostres tutorials anteriors. Podeu fer referència a això.
Aquí, hem explicat els tipus de clob i blob a l'exemple següent.
Programa d'exemple 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(); } } }
Sortida:
El fitxer s'ha desat correctament al camí donat.
Explicació:
Al programa anterior el que hem fet és primer que hem creat / desat una imatge a la carpeta 'D: \ Bhakiya \ Bhakiya \ JDBC' . Aquesta ubicació és només per exemple. Podeu crear el vostre propi camí d'accés al fitxer al vostre sistema. El nom del fitxer és una imatge de prova de programari. Després vam crear un programa Java per emmagatzemar aquesta imatge a la taula de bases de dades i recuperar la imatge de la taula i emmagatzemar-la al sistema local.
Fins ara hem debatut sobre la visió general de la tasca. Ara veurem com ho hem aconseguit al programa.
# 1) Creeu una taula al DB per emmagatzemar la imatge.
Sintaxi:
String QUERY = 'Create table Blob_Sample_Example ( PicName varchar2(30), picture BLOB)';
A la consulta anterior, tenim 2 columnes.
- PicName - varchar2 -> S'utilitza per emmagatzemar el nom de la imatge
- imatge - BLOB -> S'utilitza per emmagatzemar la imatge a la taula.
El tipus de dades BLOB s’utilitza per emmagatzemar la imatge / imatge a la taula de bases de dades.
# 2) La connexió i la declaració s’han creat i s’han anomenat mètode execute per executar la consulta CREATE.
statemnt1.execute(QUERY);
# 3) A continuació, hem creat la consulta d'inserció i l'executem amb PreparedStatement.
Sintaxi de PreparedStatement:
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
# 4) Utilitzant setString (): configureu el nom de la imatge.
# 5) Per configurar la imatge, utilitzeu la classe FileInputStream per passar la ubicació de la imatge.
Sintaxi:
FileInputStream inputStream = new FileInputStream('Picture Full Path');
A continuació, mitjançant el mètode setBlob (), podem establir la imatge a l’objecte PreparedStatement. Després d'això, s'anomena mètode d'execució de PreparedStatement. Això inserirà les dades donades a la taula.
Després d’executar la consulta d’inserció, mitjançant l’objecte ResultSet recuperem les dades de la taula (mitjançant Selecciona consulta).
# 6) Mitjançant el mètode getString, podem obtenir el valor de la columna PicName.
# 7) Per obtenir la imatge, seguiu els passos següents:
- Creeu un objecte Blob i assigneu els valors de retorn del mètode getBlob de l'objecte ResultSet.
- La sintaxi per a això és: Blob blob1 = rs.getBlob ();
- Creeu un objecte de matriu de bytes i obteniu el valor de l'objecte Blob com a bytes.
- Crea un objecte objecte FileOutputStream i passa el camí complet per emmagatzemar la imatge en aquest camí. Mètode call write () de l'objecte FileOutputStream: que emmagatzemarà la imatge.
- Després d'això, el programa s'ha executat amb èxit.
# 8) Aneu a la ubicació de la imatge de sortida i comproveu si l'entrada i la sortida són les mateixes.
Programa d'exemple 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(); } } }
Sortida:
Fitxer d'entrada:
El fitxer s'ha desat correctament al camí donat.
Fitxer de sortida:
Explicació:
Al programa anterior, el que hem fet és primer que hem creat / desat un fitxer de text “file1.txt” a la carpeta “D: \ Bhakiya \ Bhakiya \ JDBC”. Aquesta ubicació és només per exemple. Podeu crear el vostre propi camí d'accés al fitxer al vostre sistema. A continuació, vam crear un programa Java per emmagatzemar aquest fitxer a la taula de bases de dades i recuperar-lo de la taula i emmagatzemar-lo al sistema local.
Fins ara hem debatut sobre la visió general de la tasca. Ara veurem com ho hem aconseguit al programa.
# 1) Creeu una taula al DB per emmagatzemar la imatge.
A continuació es mostra la sintaxi de la consulta CREATE TABLE:
String QUERY = 'Create table Clob_Sample_Example ( FileName varchar2(30), StoreFile CLOB)';
A la consulta anterior, tenim 2 columnes.
- FileName - varchar2 -> S'utilitza per emmagatzemar el nom de la imatge.
- StoreFile - CLOB -> S'utilitza per emmagatzemar el fitxer a la taula.
El tipus de dades CLOB s’utilitza per emmagatzemar el tipus de caràcter de dades binàries a la taula de bases de dades
# 2) La connexió i la declaració s’han creat i s’han anomenat mètode execute per executar la consulta CREATE.
statemnt1.execute(QUERY);
# 3) A continuació, hem creat la consulta d'inserció i l'executem amb PreparedStatement.
Sintaxi de PreparedStatement:
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
# 4) Utilitzant setString (): configureu el nom del FileName.
# 5) Per configurar / emmagatzemar el fitxer, utilitzeu la classe FileReader per passar el fitxer amb la ubicació d'emplenament.
Sintaxi:
FileReader fileRead = new FileReader('D:\Bhakiya\Bhakiya\JDBC\file1.txt');
A continuació, mitjançant el mètode setClob (), podem establir el fitxer a l’objecte PreparedStatement. Després es va anomenar el mètode d'execució de PreparedStatement. Això inserirà les dades donades a la taula.
Després d’executar la consulta d’inserció, mitjançant l’objecte ResultSet recuperem les dades de la taula (utilitzant la consulta de selecció).
Selecciona consulta:
'select * from Clob_Sample_Example'
# 6) Mitjançant el mètode getString podem obtenir el valor de la columna FileName.
# 7) Per obtenir el fitxer, hem seguit els passos següents:
- Creeu un objecte Clob i assigneu els valors de retorn del mètode getClob de l'objecte ResultSet.
- La sintaxi per a això és: Clob clob1 = rs.getClob ();
- Creeu un objecte Reader i obteniu el valor de l'objecte Clob com a caràcter.
- Creeu un objecte objecte FileWriter i passeu el camí complet per emmagatzemar el fitxer en aquest camí. Mètode call write () de l'objecte FileWrite: que escriurà les dades al fitxer a la ubicació.
- Després d'això, el programa s'ha executat amb èxit.
# 8) Aneu a la ubicació del fitxer de sortida i comproveu si els fitxers d’entrada i sortida són els mateixos.
Punts que cal recordar:
- ACID Properties explica la Gestió de transaccions a la base de dades.
- Commit (), rollback () i savepoint són les operacions més importants de la gestió de transaccions.
- Commit farà els canvis permanentment a la base de dades, Rollback els anul·larà fins a l'última confirmació o el punt de guarda esmentat i Savepoint ajudarà a crear un punt de control.
- La base de dades manté tipus de dades SQL i Java manté tipus de dades Java. El controlador JDBC s’utilitza per gestionar aquesta conversió.
- El controlador JDBC té alguns tipus d’identificadors SQL, de manera que el programador no s’ha de preocupar pels tipus de dades.
Preguntes freqüents
P # 1) Quin és el tipus de dades JDBC?
Resposta: Java té els seus tipus de dades i la base de dades té els seus tipus de dades. El controlador JDBC converteix el tipus de dades Java al tipus de dades SQL adequat que acceptarà la base de dades. Els objectes ResultSet també proporcionen mètodes setXXX () i mètodes getXXX () disponibles per als tipus de dades adequats.
P # 2) Quin és el tipus de dades per a la data a Java?
Resposta: La data a Java no només és un tipus de dades, sinó una classe. Una data a Java té la data, l’hora, l’any, el nom del dia, el dia de la setmana i la zona horària. La classe de dates té els mètodes adequats per recuperar les dades rellevants.
P # 3) Quina diferència hi ha entre java.util.Date i java.sql.Date?
Resposta: La principal diferència és que java.util.Date també té informació sobre la data i l’hora. Però java.sql.Date només té informació sobre la data. Aquesta és la diferència principal que no podem mapar java.util.Date directament amb java.sql.Date.
Q # 4) Tenim una classe en Java per representar el tipus TIME i TIMESTAMP per a SQL?
Resposta: Sí, tenim una classe per a TIME i TIMESTAMP per a SQL. La classe java.sql.Time representa informació relacionada amb TIME. La classe java.sql.timestamp representa la informació relacionada amb TIMESTAMP.
Q # 5) Com iniciar una transacció a JDBC?
Resposta: La connexió JDBC s'inicia amb el mode de confirmació automàtica activat, on cada sentència SQL es considera una transacció. No hi ha cap procés específic per iniciar una transacció a JDBC. Quan creeu una connexió i comenceu a executar la sentència SQL, aquí és on ha començat la transacció.
P # 6) Quin és el mètode commit () a Java?
Resposta: El mètode Commit () a Java s’utilitza per desar els canvis que es fan des de l’últim commit (). El mètode Commit () està disponible a la interfície de connexió. Mitjançant un objecte de connexió, podem anomenar el commit ().
Q # 7) Quin és el mètode de retrocés a Java?
Resposta: Després de l'últim commit (), si s'ha produït algun problema, podem trucar al mètode rollback () per revertir tots els canvis fets fins que l'últim mètode commit.rollback () estigui disponible a la interfície de connexió. Mitjançant un objecte de connexió, podem anomenar el mètode rollback ().
Conclusió
Aquí, hem tractat els tipus de dades en Java i DB i com els gestiona el controlador JDBC. Hem parlat de les propietats de l’ACID. Això és el més important per a l’àmbit bancari. Serà molt útil per a la vostra carrera professional. A la secció Gestió de transaccions, hem parlat de mètodes de commit i rollback com commit (), rollback (), setAutoCommit (), setSavepoint () i releaseSavepoint ().
Lectura recomanada
- Tutorial Java JDBC: què és JDBC (connectivitat a la base de dades Java)
- Tutorial de connexió Java JDBC amb exemple de programació
- JDBC DriverManager, JDBC PreparedStatement i declaració
- JDBC ResultSet: Com utilitzar Java ResultSet per recuperar dades
- Tipus de dades, bucles, matrius, commutadors i assercions de Java
- Java String length () Mètode amb exemples
- Com s'utilitza el mètode Java toString?
- Proves de base de dades de seleni (mitjançant WebDriver i l'API JDBC)