java jdbc transaction management with example
Bu eğitimde JDBC işlem türleri, veri türleri, işlem yönetimi yöntemleri ve bunların Java programında nasıl kullanılacağı açıklanmaktadır:
İçinde JDBC Sonuç Kümesi öğreticisi JDBC eğitim serisi , verileri almak için JDBC ResultSet kullanmayı öğrendik.
Bu eğitimde, JDBC'deki işlem türlerini tartışacağız. Önceki eğitimlerimizde işlem türlerine kısa bir giriş gördük. Burada detaylı bir şekilde göreceğiz. JDBC'deki veri türlerinin neler olduğunu ve Java programında nasıl kullanılacağını da ele alacağız.
Veritabanının farklı veri türleri olacak ve Java'nın farklı veri türleri olacaktır. JDBC bu farklılaşmayı yönetecek. JDBC'deki önemli konuyu öğrenmeye hazırlanalım.
Ne öğreneceksin:
JDBC İşlem Yönetimi
Eylem dizisi (SQL ifadeleri), işlem olarak bilinen tek bir birim olarak ele alınır. İşlem Yönetimi, RDBMS odaklı uygulamaların veri bütünlüğünü ve tutarlılığını sürdürmesi açısından önemlidir.
İşlemi gerçekleştirirken, ResultSet nesnesindeki verileri almak ve ayarlamak için getXXX ve setXXX yöntemlerini kullanacağız. XXX, sütunların veri türlerini temsil eder. Bu eğitimde JDBC'nin işlem ve veri türlerini tartışacağız.
İşlem Türleri
JDBC'de her SQL sorgusu bir işlem olarak kabul edilecektir. JDBC'de bir Veritabanı bağlantısı oluşturduğumuzda, otomatik kesinleştirme modunda çalışacaktır (otomatik kesinleştirme değeri DOĞRU'dur). SQL deyimi çalıştırıldıktan sonra otomatik olarak işlenecektir.
Bazen, işlemi daha fazla SQL ifadesinin yürütülmesinden sonra gerçekleştirmek isteyebiliriz. O zaman, otomatik kesinleştirme değerini False olarak ayarlamamız gerekiyor. Böylece tüm sorgular yürütülmeden önce veriler işlenmez. İşlemde bir istisna elde edersek, değişiklikleri geri alabiliriz () ve önceki gibi yapabiliriz. İşlem Yönetimi, ACID özellikleri kullanılarak iyi açıklanabilir.
ACID anlamı
- A – Atomiklik -> Tüm sorgular başarılı bir şekilde yürütülürse veriler işlenecek, aksi takdirde alınmayacaktır.
- C – Tutarlılık -> DB, herhangi bir işlemden sonra tutarlı bir durumda olmalıdır.
- I– İzolasyon -> İşlem diğer işlemlerden izole edilmiştir.
- D – Dayanıklılık -> İşlem bir kez yapılırsa, her zaman taahhütte kalır.
İşlem Yönetiminde en önemli üç işlev vardır. Onlar:
Java'da bir grafik nasıl temsil edilir
- Kaydet: SQL deyimlerinin çalıştırılmasından sonra, değişiklikleri Veritabanında kalıcı hale getirmek istiyoruz. Commit () metodunu çağırmalıyız. Normalde commit nedir, değişiklikleri Veritabanında kalıcı olarak yapacağı anlamına gelir. Değişiklikleri geri alamayız / iptal edemeyiz. Ancak Veritabanındaki verileri değiştirebiliriz.
- Geri alma: Geri alma, son işleme veya belirtilen kayıt noktasına kadar değişiklikleri geri alır. Bazen değişiklikleri geri almak isteyebiliriz. Örneğin, iç içe geçmiş bir sorgumuz var, bir parça başarıyla yürütüldü ve diğeri bazı istisnalar attı. O zaman, ilk bölüm tarafından yapılan değişiklikleri geri almak istiyoruz, bir istisna meydana geldiğinde bunu yapmak için Rollback () yöntemini çağırmalıyız.
- Kaydetme noktası: Savepoint, bir işlemde kontrol noktası oluşturmaya yardımcı olur ve bu belirli kayıt noktasına geri dönüş yapılmasına izin verir. Bir işlem için oluşturulan herhangi bir kayıt noktası, işlem tamamlandığında veya geri alındığında otomatik olarak yok edilecek ve geçersiz hale gelecektir.
Şimdiye kadar commit, rollback, kayıt noktası ve operasyonlarının ne olduğunu gördük. Aşağıda bunun yöntemlerini ve programda nasıl kullanılacağını göreceğiz.
İşlem Yönetimi Yöntemleri
Bağlantı arayüzü, işlem yönetimi için 5 yöntem sağlar. Bunlar aşağıdaki gibidir:
# 1) setAutoCommit () Yöntemi
Varsayılan olarak, AutoCommit değerinin değeri TRUE'dur. SQL deyimi çalıştırıldıktan sonra otomatik olarak işlenecektir. SetAutoCommit () yöntemini kullanarak değeri AutoCommit olarak ayarlayabiliriz.
# 2) Teslim Et () Yöntemi
Verileri işlemek için commit yöntemi kullanılır. SQL ifadesinin çalıştırılmasından sonra commit () 'i çağırabiliriz. SQL deyimi tarafından yapılan değişiklikleri uygulayacaktır.
Sözdizimi: conn.commit ();
# 3) Geri Alma () Yöntemi
Geri alma yöntemi, son işleme gerçekleşene kadar değişiklikleri geri almak için kullanılır. SQL ifadelerinin yürütme akışında herhangi bir sorun veya istisna ile karşılaşırsak, işlemi geri alabiliriz.
Sözdizimi: conn.rollback ();
# 4) setSavepoint () Yöntemi
Savepoint, işlem üzerinde size ek kontrol sağlar. İşlemde bir kayıt noktası ayarladığınızda (bir grup SQL deyimi), tüm değişiklikleri kayıt noktasına kadar veya kayıt noktasına () kadar geri almak için rollback () yöntemini kullanabilirsiniz. setSavepoint () yöntemi, yeni bir kayıt noktası oluşturmak için kullanılır.
# 5) releaseSavepoint () Yöntemi
Oluşturulan kayıt noktasını silmek için kullanılır.
Aşağıdaki programda, bu yöntemler hakkında daha fazla bilgi edinecek ve ayrıca Java programında nasıl kullanılacağını öğreneceksiniz.
Bu eğiticide, tüm programlar Java ile yazılmıştır. Java 8 sürümünü ve Oracle DB'yi kullandık.
>> Tıklayın İşte Oracle yazılımını indirmek için.
>> Tıklayın İşte Java sürüm 8'i indirmek için.
Adım adım Java kurulum sürecine sahiptir.
İşlem Örnek Programı
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); } } }
Çıktı:
Açıklama:
Yukarıdaki işlem yönetimi programında yaptığımız şey, EMPLOYEE_DETAILS Tablosunda belirtilen çalışanın değerlerini güncellemek ve verileri işlemek. Herhangi bir hata veya istisna meydana gelirse, rollback () işlemini yaptık. Şimdi programın tam açıklamasını göreceğiz.
# 1) Oluşturuldu 2 EMPID'lerine göre 2 çalışan için seçme sorgusu
Aşağıda 2 seçili sorgu bulunmaktadır.
String QUERY = 'select * from employee_details where empNum = 2001'; String QUERY1 = 'select * from employee_details where empNum = 2002';
#iki) EMPID'lerine göre 2 çalışan için iki güncelleme sorgusu oluşturdu
Güncellenen iki sorgu:
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) Bağlantıyı açın, seçim sorgusunu yürütün ve EMPNUM = 2001 verilerini görüntüleyin.
# 4) SetAutoCommit () yöntemini kullanarak autoCommit değerini false olarak ayarlayın.
# 5) EMPNUM = 2001 güncelleme sorgusu yürütüldü ve aynı Veritabanı için başka bir bağlantı oluşturuldu ve EMPNUM = 2001 değeri seçildi.
# 6) EMPNUM = 2001 olan Çalışanın sonuç verileri güncellenmiş veri değildir. Çünkü commit () işlemini yapmadık. Güncellemek için kullandığınız aynı bağlantıyı kullandıysanız, size güncellenmiş Verileri gösterecekti. Şimdi verileri işledik. Veriler tabloya yansıtılmıştır.
# 7) Kaydetme işleminden sonra bir kayıt noktası oluşturuldu.
# 8) EMPNUM = 2002 verilerini görüntülemek için seçme sorgusunu kullanma. Bir güncelleme sorgusu kullanarak bu çalışanın maaşını değiştirdi. Bundan sonra aynı bağlantıyı kullanarak EMPNUM = 2002 verilerini görüntüledi. Güncellenen verileri göstermelidir.
# 9) Geri alma yöntemini kullanarak son kayıt noktasına kadar geri alma işlemi tamamlandı. Şimdi aynı bağlantıyı kullanan o çalışanın verilerini görüntülediğimizde, eski verilere sahip çünkü geri alma, son kayıtta başka bir kayıt noktasından bahsedersek değişiklikleri son kayıt noktasına kadar geri alır.
# 10) Verileri gösterecek bir yöntem oluşturduk çünkü burada verileri birçok kez görüntülüyoruz.
JDBC Veri Türleri
Veritabanlarının SQL veri türleri ve Java'nın Java veri türleri vardır. Java uygulaması ile veritabanı arasında veri okuma ve yazma için bir mekanizma olmalıdır. Farklı Veritabanları SQL türlerini destekler, ancak adın bazı varyasyonları vardır.
Örneğin, veritabanlarının çoğu büyük ikili değerleri destekler, Oracle bunu LONG RAW olarak adlandırır, Sybase bunu IMAGE olarak adlandırır, Informix onu BYTE olarak adlandırır ve DB2 bunu LONG VARCHAR FOR BIT DATA olarak adlandırır.
JDBC programını yazarken, hedef Veritabanı tarafından kullanılan SQL veri türleri hakkında endişelenmemize gerek yoktur. JDBC, java.sql.Types sınıfında bir dizi genel SQL türü tanımlayıcıya sahiptir. Bu türler, genel SQL veri türlerinin çoğunu desteklemek için tasarlanmıştır. Bir JDBC programı yazarken, yalnızca JDBC veri türlerini kullanacağız.
JDBC sürücüsü, Java veri türlerini Veritabanı veri türlerine ileri geri dönüştürecektir. Belirli bir veritabanı tarafından hangi SQL türlerinin gerçekten desteklendiğini kontrol etmek için java.sql.DatabaseMetaData.getTypeInfo yöntemini kullanabilir ve ardından bir program yazabilirsiniz. JDBC, veri türlerinin çoğu için varsayılan bir eşleme kullanır.
Örneğin, Java dizisi bir SQL VARCHAR türüne dönüştürülecektir.
HazırlananStatement veya CallableStatement veya ResultSet arayüzlerinin setXXX, getXXX ve updateXXX yöntemlerinde eşlemenin nasıl yapıldığını aşağıdaki tabloda göreceğiz:
SQL TÜRÜ | JAVA / JDBC TÜRÜ | setXXX | getXXX | updateXXX |
---|---|---|---|---|
TAM | int | setInt | renkli | updateInt |
CHAR | java.lang.String | setString | getString | updateString |
VARCHAR | java.lang.String | setString | getString | updateString |
LONGVARCHAR | java.lang.String | setString | getString | updateString |
BİT | Boole | setBoolean | getBoolean | updateBoolean |
SAYISAL | java.math.BigDecimal | setBigDecimal | getBigDecimal | UpdateBigDecimal |
SMALLINT | kısa | setShort | getShort | updateShort |
BÜYÜK | uzun | setLong | getLong | updateLong |
GERÇEK | yüzer | setFloat | getFloat | updateFloat |
YÜZER | yüzer | setFloat | getFloat | updateFloat |
ÇİFT | çift | setDouble | getDouble | updateDouble |
İKİLİ | bayt() | setBytes | getBytes | updateBytes |
TARİH | java.sql.Date | tarih ayarla | getDate | Güncelleme Tarihi |
ZAMAN | java.sql.Time | ayarlanan zaman | getTime | Güncelleme zamanı |
TIMESTAMP | java.sql.Timestamp | setTimestamp | getTimestamp | updateTimeStamp |
CLOB | java.sql.Clob | setClob | getClob | updateClob |
BLOB | java.sql.Blob | setBlob | getBlob | updateBlob |
DİZİ | Dizi | setArray | getArray | updateArray |
XML | Xml | setSQLXML | getSQLXML | updateSQLXML |
Yapılandırılmış tip | Nesne | setObject | getObject | updateObject |
Önceki eğitimlerimizde temel veri türleri için setXXX, getXXX ve updateXXX yöntemlerine sahibiz. Buna başvurabilirsiniz.
Burada, aşağıdaki örnekte clob ve blob türlerini açıkladık.
BLOB Örnek Program
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(); } } }
Çıktı:
Dosya verilen yola başarıyla kaydedildi.
Açıklama:
Yukarıdaki programda yaptığımız şey şudur: Önce klasöre bir resim oluşturduk / kaydettik 'D: \ Bhakiya \ Bhakiya \ JDBC' . Bu konum sadece örneğin. Sisteminizde kendi dosya yolunuzu oluşturabilirsiniz. Dosyanın adı bir Yazılım test resmidir. Daha sonra bu görüntüyü DB tablosunda depolamak ve görüntüyü tablodan alıp yerel sistemde depolamak için bir Java programı oluşturduk.
Şimdiye kadar, görevin genel bakışını tartıştık. Şimdi programda bunu nasıl başardığımızı göreceğiz.
# 1) Görüntüyü depolamak için DB'de bir tablo oluşturun.
Sözdizimi:
String QUERY = 'Create table Blob_Sample_Example ( PicName varchar2(30), picture BLOB)';
Yukarıdaki sorguda 2 sütunumuz var.
- PicName - varchar2 -> Resmin adını saklamak için kullanılır
- resim - BLOB -> Resmi Tabloda saklamak için kullanılır.
BLOB veri türü, Resmi / görüntüyü DB Tablosunda saklamak için kullanılır.
#iki) Bağlantı ve ifade oluşturuldu ve CREATE Sorgusunu yürütmek için execute yöntemi çağrıldı.
statemnt1.execute(QUERY);
# 3) Ardından, insert sorgusunu oluşturduk ve PreparedStatement kullanarak çalıştırdık.
PreparedStatement sözdizimi:
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
# 4) SetString () kullanarak - Resmin adını ayarlayın.
# 5) Resmi ayarlamak için, resim konumunu iletmek üzere FileInputStream sınıfını kullanın.
Sözdizimi:
FileInputStream inputStream = new FileInputStream('Picture Full Path');
Daha sonra setBlob () yöntemini kullanarak, PreparedStatement nesnesindeki resmi ayarlayabiliriz. Bundan sonra, PreparedStatement'ın execute yöntemi çağrıldı. Bu, verilen verileri Tabloya ekleyecektir.
Ekleme sorgusunu yürüttükten sonra, ResultSet nesnesini kullanarak verileri Tablodan (Select Query kullanarak) alıyoruz.
# 6) GetString yöntemini kullanarak PicName Sütununun değerini alabiliriz.
# 7) Resmi almak için aşağıdaki adımları izleyin:
- Blob nesnesi oluşturun ve ResultSet nesnesinin getBlob yönteminin dönüş değerlerini atayın.
- Bunun sözdizimi: Blob blob1 = rs.getBlob ();
- Bir bayt dizisi nesnesi oluşturun ve Blob nesnesinin değerini bayt olarak alın.
- FileOutputStream nesnesi oluşturun ve resmi bu yolda depolamak için tam yolu iletin. Resmi depolayacak olan FileOutputStream nesnesinin write () yöntemini çağırın.
- Bundan sonra program başarıyla yürütülmüştür.
# 8) Çıktı resminin konumuna gidin ve giriş ile çıkışın aynı olup olmadığını kontrol edin.
CLOB Örnek Program
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(); } } }
Çıktı:
Giriş dosyası:
Dosya verilen yola başarıyla kaydedildi.
Çıktı dosyası:
Açıklama:
Yukarıdaki programda yaptığımız ilk önce 'D: \ Bhakiya \ Bhakiya \ JDBC' klasörüne bir 'dosya1.txt' metin dosyası oluşturduk / kaydettik. Bu konum sadece örneğin. Sisteminizde kendi dosya yolunuzu oluşturabilirsiniz. Sonra bu dosyayı DB tablosunda depolamak ve bu dosyayı tablodan alıp yerel sistemde depolamak için bir Java programı oluşturduk.
Şimdiye kadar, görevin genel bakışını tartıştık. Şimdi programda bunu nasıl başardığımızı göreceğiz.
# 1) Görüntüyü depolamak için DB'de bir tablo oluşturun.
CREATE TABLE Sorgusunun Sözdizimi aşağıdadır:
String QUERY = 'Create table Clob_Sample_Example ( FileName varchar2(30), StoreFile CLOB)';
Yukarıdaki sorguda 2 sütunumuz var.
- FileName - varchar2 -> Resmin adını saklamak için kullanılır.
- StoreFile - CLOB -> Dosyayı Tabloda saklamak için kullanılır.
CLOB veri türü, ikili verilerin Karakter türünü DB Tablosunda saklamak için kullanılır
#iki) Bağlantı ve ifade oluşturuldu ve CREATE Sorgusunu yürütmek için execute yöntemi çağrıldı.
statemnt1.execute(QUERY);
# 3) Ardından, insert sorgusunu oluşturduk ve PreparedStatement kullanarak çalıştırdık.
PreparedStatement sözdizimi:
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
# 4) SetString () kullanarak - DosyaAdı'nın adını ayarlayın.
# 5) Dosyayı ayarlamak / depolamak için, dosyayı doldurma konumu ile geçirmek için FileReader sınıfını kullanın.
Sözdizimi:
FileReader fileRead = new FileReader('D:\Bhakiya\Bhakiya\JDBC\file1.txt');
Daha sonra setClob () yöntemini kullanarak PreparedStatement nesnesinin içindeki dosyayı ayarlayabiliriz. Bundan sonra PreparedStatement'ın execute yöntemi çağrıldı. Bu, verilen verileri Tabloya ekleyecektir.
Ekleme sorgusunu çalıştırdıktan sonra, ResultSet nesnesini kullanarak verileri Tablodan (Select Query Kullanarak) alıyoruz.
Sorgu Seçin:
'select * from Clob_Sample_Example'
# 6) GetString yöntemini kullanarak FileName Column değerini alabiliriz.
# 7) Dosyayı almak için, aşağıdaki adımları takip ettik:
- Clob nesnesi oluşturun ve ResultSet nesnesinin getClob yönteminin dönüş değerlerini atayın.
- Bunun sözdizimi: Clob clob1 = rs.getClob ();
- Reader nesnesi oluşturun ve Clob nesnesinin değerini Character olarak alın.
- FileWriter nesnesi oluşturun ve Dosyayı bu yolda depolamak için tam yolu iletin. Dosyadaki verileri konuma yazacak olan FileWrite nesnesinin write () yöntemini çağırın.
- Bundan sonra program başarıyla yürütülmüştür.
# 8) Çıktı dosyasının konumuna gidin ve girdi ve çıktı dosyalarının aynı olup olmadığını kontrol edin.
Hatırlanacak noktalar:
- ACID Properties, Veritabanındaki İşlem Yönetimini açıklar.
- Commit (), rollback () ve kayıt noktası, İşlem Yönetimi'ndeki en önemli işlemlerdir.
- Commit, değişiklikleri DB'de kalıcı olarak yapacak, Geri Alma, değişiklikleri son kesinliğe veya belirtilen kayıt noktasına kadar geri alacaktır ve Savepoint, bir kontrol noktası oluşturmaya yardımcı olacaktır.
- Veritabanı, SQL veri türlerini ve Java, Java veri türlerini korur. Bu dönüşümü gerçekleştirmek için JDBC sürücüsü kullanılır.
- JDBC sürücüsünün kendisinde bazı SQL türü tanımlayıcılar vardır, bu nedenle programcının veri türleri konusunda endişelenmesine gerek kalmaz.
Sıkça Sorulan Sorular
S # 1) JDBC veri türü nedir?
Cevap: Java'nın veri türleri ve veritabanının veri türleri vardır. JDBC sürücüsü, Java veri türünü, veritabanı tarafından kabul edilecek uygun SQL veri türüne dönüştürür. ResultSet nesneleri ayrıca setXXX () yöntemlerini ve uygun veri türleri için kullanılabilen getXXX () yöntemlerini sağlar.
S # 2) Java'da tarih için veri türü nedir?
Cevap: Java'da tarih sadece bir veri türü değil, bir sınıftır. Java'da Tarih, tarih, saat, yıl, günün adı, haftanın günü ve saat dilimi içerir. Tarih sınıfı, ilgili verileri almak için uygun yöntemlere sahiptir.
S # 3) java.util.Date ve java.sql.Date arasındaki fark nedir?
Cevap: Temel fark, java.util.Date'in tarih ve saat hakkında da bilgi içermesidir. Ancak java.sql.Date yalnızca tarih bilgisine sahiptir. Bu, java.util.Date'i doğrudan java.sql.Date ile eşleyemeyeceğimiz temel farktır.
S # 4) Java'da SQL için TIME ve TIMESTAMP türünü temsil eden bir sınıfımız var mı?
Cevap: Evet, SQL için TIME ve TIMESTAMP türü için bir sınıfımız var. java.sql.Time sınıfı, TIME ile ilgili bilgileri temsil eder. java.sql.timestamp sınıfı, TIMESTAMP ile ilgili bilgileri temsil eder.
S # 5) JDBC'de bir işlem nasıl başlatılır?
Cevap: JDBC bağlantısı, her SQL ifadesinin bir işlem olarak kabul edildiği otomatik kesinleştirme modu etkinleştirilmiş olarak başlar. JDBC'de işlem başlatmak için belirli bir işlem yoktur. Bir bağlantı oluşturduğunuzda ve SQL ifadesini yürütmeye başladığınızda, işlemin başladığı yer burasıdır.
S # 6) Java'da commit () yöntemi nedir?
Cevap: Java'da Commit () yöntemi, son commit () işleminden sonra yapılan değişiklikleri kaydetmek için kullanılır. Commit () yöntemi Bağlantı arayüzünde mevcuttur. Bir bağlantı nesnesi kullanarak commit () 'i çağırabiliriz.
S # 7) Java'da geri alma yöntemi nedir?
Cevap: Son commit () 'den sonra, herhangi bir sorun meydana gelirse, son commit.rollback () metodu Bağlantı arayüzünde mevcut olana kadar yapılan tüm değişiklikleri geri almak için rollback () metodunu çağırabiliriz. Bir bağlantı nesnesi kullanarak rollback () yöntemini çağırabiliriz.
Sonuç
Burada, Java ve DB'deki veri türlerini ve JDBC sürücüsünün bunları nasıl işlediğini ele aldık. ACID özelliklerini tartıştık. Bu bankacılık alanı için çok önemlidir. Kariyeriniz için çok faydalı olacak. İşlem Yönetimi bölümünde commit (), rollback (), setAutoCommit (), setSavepoint () ve releaseSavepoint () gibi commit ve rollback yöntemlerini tartıştık.
Önerilen Kaynaklar
- Java JDBC Eğitimi: JDBC Nedir (Java Veritabanı Bağlantısı)
- Programlama Örneği ile Java JDBC Bağlantısı Eğitimi
- JDBC DriverManager, JDBC PreparedStatement And Statement
- JDBC ResultSet: Verileri Almak İçin Java ResultSet Nasıl Kullanılır
- Java DataTypes, Loops, Arrays, Switch ve Assertions
- Java String length () Yöntem Örneklerle
- Java toString Yöntemi Nasıl Kullanılır?
- Selenium Veritabanı Testi (WebDriver ve JDBC API kullanarak)