java jdbc transaction management with example
このチュートリアルでは、JDBCトランザクションタイプ、データタイプ、トランザクション管理方法、およびJavaプログラムでそれらを使用する方法について説明します。
の中に JDBC ResultSet のチュートリアル JDBCチュートリアルシリーズ 、JDBCResultSetを使用してデータを取得する方法を学びました。
このチュートリアルでは、JDBCのトランザクションタイプについて説明します。以前のチュートリアルで、トランザクションタイプの簡単な紹介を見てきました。ここでは、詳細に見ていきます。また、JDBCのデータ型とJavaプログラムでの使用方法についても説明します。
データベースにはさまざまなデータ型があり、Javaにはさまざまなデータ型があります。 JDBCはこの差別化を管理します。 JDBCの重要なトピックを理解する準備をしましょう。
学習内容:
JDBCトランザクション管理
アクションのシーケンス(SQLステートメント)は、トランザクションと呼ばれる単一のユニットとして扱われます。トランザクション管理は、RDBMS指向のアプリケーションがデータの整合性と一貫性を維持するために重要です。
トランザクションの実行中に、getXXXメソッドとsetXXXメソッドを使用して、ResultSetオブジェクトのデータを取得および設定します。 XXXは、列のデータ型を表します。このチュートリアルでは、JDBCのトランザクションとデータ型について説明します。
トランザクションタイプ
JDBCでは、すべてのSQLクエリがトランザクションと見なされます。 JDBCでデータベース接続を作成すると、自動コミットモードで実行されます(自動コミット値はTRUEです)。 SQLステートメントの実行後、自動的にコミットされます。
さらにいくつかのSQLステートメントの実行後にトランザクションをコミットしたい場合があります。その際、自動コミット値をFalseに設定する必要があります。そのため、すべてのクエリを実行する前にデータがコミットされることはありません。トランザクションで例外が発生した場合は、変更をrollback()して、以前と同じようにすることができます。トランザクション管理は、ACIDプロパティを使用して十分に説明できます。
ACIDは
- A–原子性-> すべてのクエリが正常に実行されると、データはコミットされます。それ以外の場合はコミットされません。
- C-一貫性-> DBは、トランザクション後、一貫性のある状態である必要があります。
- I–分離-> トランザクションは他のトランザクションから分離されています。
- D–耐久性-> トランザクションが一度コミットされると、常にコミットされたままになります。
トランザクション管理には、3つの最も重要な機能があります。 彼らです:
bツリーとb +ツリーの違い
- コミット: SQLステートメントの実行後、変更をデータベースで永続的にしたいと思います。 commit()メソッドを呼び出す必要があります。通常、コミットとは、データベースに永続的に変更を加えることを意味します。変更を元に戻したり取り消したりすることはできません。ただし、データベース内のデータは変更できます。
- ロールバック: ロールバックは、最後のコミットまたは言及されたセーブポイントまで変更を元に戻します。変更を元に戻したい場合があります。 例えば、 1つのネストされたクエリがあり、1つの部分が正常に実行され、もう1つの部分がいくつかの例外をスローしました。そのとき、最初の部分で行った変更を元に戻したいので、例外が発生した場合は、Rollback()メソッドを呼び出して元に戻す必要があります。
- セーブポイント: セーブポイントは、トランザクションでチェックポイントを作成するのに役立ち、その特定のセーブポイントへのロールバックを実行できます。トランザクション用に作成されたセーブポイントは、トランザクションがコミットまたはロールバックされると自動的に破棄され、無効になります。
これまで、コミット、ロールバック、セーブポイントとその操作について見てきました。以下に、その方法とプログラムでの使用方法を示します。
トランザクション管理の方法
接続インターフェースは、トランザクション管理のための5つの方法を提供します。それらは次のとおりです。
#1)setAutoCommit()メソッド
デフォルトでは、AutoCommit値の値はTRUEです。 SQLステートメントの実行後、自動的にコミットされます。 setAutoCommit()メソッドを使用することで、値をAutoCommitに設定できます。
#2)Commit()メソッド
commitメソッドは、データをコミットするために使用されます。 SQLステートメントの実行後、commit()を呼び出すことができます。 SQLステートメントによって行われた変更をコミットします。
構文: conn.commit();
#3)Rollback()メソッド
ロールバックメソッドは、最後のコミットが行われるまで変更を元に戻すために使用されます。 SQLステートメントの実行フローで問題や例外が発生した場合、トランザクションをロールバックすることがあります。
構文: conn.rollback();
#4)setSavepoint()メソッド
セーブポイントを使用すると、トランザクションをさらに制御できます。トランザクション(SQLステートメントのグループ)にセーブポイントを設定すると、rollback()メソッドを使用して、セーブポイントまで、またはセーブポイント()の後にすべての変更を元に戻すことができます。 setSavepoint()メソッドは、新しいセーブポイントを作成するために使用されます。
#5)releaseSavepoint()メソッド
作成されたセーブポイントを削除するために使用されます。
以下のプログラムでは、これらのメソッドの詳細を理解し、Javaプログラムでの使用方法も学習します。
このチュートリアルでは、すべてのプログラムがJavaで記述されています。 Java8バージョンとOracleDBを使用しました。
>>クリック ここに Oracleソフトウェアをダウンロードします。
>>クリック ここに Javaバージョン8をダウンロードします。
ステップバイステップのJavaインストールプロセスがあります。
トランザクションサンプルプログラム
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); } } } 出力:

説明:
上記のトランザクション管理プログラムで行ったことは、EMPLOYEE_DETAILSテーブル内の特定の従業員の値を更新し、データをコミットすることです。エラーまたは例外が発生した場合は、rollback()操作を実行しました。次に、プログラムの完全な説明を確認します。
#1) 作成済み2EMPIDに基づいて2人の従業員のクエリを選択
以下は、2つの選択クエリです。
String QUERY = 'select * from employee_details where empNum = 2001'; String QUERY1 = 'select * from employee_details where empNum = 2002';#二) EMPIDに基づいて2人の従業員に対して2つの更新クエリを作成しました
2つの更新されたクエリ:
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) 接続を開き、選択クエリを実行して、EMPNUM = 2001のデータを表示します。
#4) setAutoCommit()メソッドを使用して、autoCommitの値をfalseに設定します。
#5) EMPNUM = 2001の更新クエリを実行し、同じデータベースに対して別の接続を作成し、EMPNUM = 2001の値を選択しました。
#6) EMPNUM = 2001の従業員の結果データは更新されたデータではありません。 commit()操作を行っていないためです。更新に使用したのと同じ接続を使用した場合は、更新されたデータが表示されます。データをコミットしました。データは表に反映されています。
# 7) コミット操作の後に1つのセーブポイントを作成しました。
#8) selectクエリを使用してEMPNUM = 2002のデータを表示します。更新クエリを使用してその従業員の給与を変更しました。その後、同じ接続を使用して、EMPNUM = 2002のデータが表示されました。更新されたデータが表示されます。
#9) ロールバック方式を使用して、最後のセーブポイントまでロールバックを実行します。同じ接続を使用してその従業員のデータを表示すると、最後のコミットにセーブポイントを指定すると、ロールバックによって最後のセーブポイントまで変更が取り消されるため、古いデータが保持されます。
#10) ここでは何度もデータを表示しているため、データを表示するメソッドを1つ作成しました。
JDBCデータ型
データベースにはSQLデータ型があり、JavaにはJavaデータ型があります。 Javaアプリケーションとデータベースの間でデータを読み書きするためのメカニズムが必要です。さまざまなデータベースがSQLタイプをサポートしていますが、名前にはいくつかのバリエーションがあります。
例えば、 ほとんどのデータベースは大きなバイナリ値をサポートしており、OracleはそれをLONG RAWと呼び、SybaseはそれをIMAGEと呼び、InformixはそれをBYTEと呼び、DB2はそれをLONG VARCHAR FOR BITDATAと呼びます。
JDBCプログラムを作成する際、ターゲットデータベースで使用されるSQLデータ型について心配する必要はありません。 JDBCには、クラスjava.sql.Typesに一連の汎用SQLタイプ識別子があります。これらの型は、ほとんどの汎用SQLデータ型をサポートするように設計されています。 JDBCプログラムの作成中は、JDBCデータ型のみを使用します。
JDBCドライバーは、Javaデータ型をデータベースデータ型に変換します。 java.sql.DatabaseMetaData.getTypeInfoメソッドを使用して、特定のデータベースで実際にサポートされているSQLタイプを確認してから、プログラムを作成できます。 JDBCは、ほとんどのデータ型にデフォルトのマッピングを使用します。
例えば、 Java文字列はSQLVARCHAR型に変換されます。
次の表で、preparedStatementまたはCallableStatementまたはResultSetインターフェイスのsetXXX、getXXX、およびupdateXXXメソッドでマッピングがどのように行われるかを確認します。
| SQLタイプ | JAVA / JDBCタイプ | setXXX | getXXX | updateXXX |
|---|---|---|---|---|
| 整数 | int | setInt | 着色 | updateInt |
| CHAR | java.lang.String | setString | getString | updateString |
| VARCHAR | java.lang.String | setString | getString | updateString |
| LONGVARCHAR | java.lang.String | setString | getString | updateString |
| ビット | ブール値 | setBoolean | getBoolean | updateBoolean |
| 数値 | java.math.BigDecimal | setBigDecimal | getBigDecimal | UpdateBigDecimal |
| SMALLINT | ショート | setShort | getShort | updateShort |
| BIGINT | 長いです | setLong | getLong | updateLong |
| リアル | 浮く | setFloat | getFloat | updateFloat |
| 浮く | 浮く | setFloat | getFloat | updateFloat |
| ダブル | ダブル | setDouble | getDouble | updateDouble |
| バイナリ | バイト() | setBytes | getBytes | updateBytes |
| 日付 | java.sql.Date | setDate | getDate | 更新日 |
| 時間 | java.sql.Time | setTime | 時間をもらう | updateTime |
| タイムスタンプ | java.sql.Timestamp | setTimestamp | getTimestamp | updateTimeStamp |
| CLOB | java.sql.Clob | setClob | getClob | updateClob |
| BLOB | java.sql.Blob | setBlob | getBlob | updateBlob |
| アレイ | アレイ | setArray | getArray | updateArray |
| XML | Xml | setSQLXML | getSQLXML | updateSQLXML |
| 構造化タイプ | オブジェクト | setObject | getObject | updateObject |
以前のチュートリアルでは、基本的なデータ型に対してsetXXX、getXXX、updateXXXメソッドを使用しました。あなたはそれを参照することができます。
ここでは、次の例でclobとblobのタイプについて説明しました。
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(); } } } 出力:

指定されたパスにファイルが正常に保存されました。

説明:
上記のプログラムでは、最初にフォルダに1つの画像を作成/保存しました。 'D:\ Bhakiya \ Bhakiya \ JDBC' 。この場所はほんの一例です。システムに独自のファイルパスを作成できます。ファイルの名前はソフトウェアテストの写真です。次に、その画像をDBテーブルに格納し、テーブルから画像を取得してローカルシステムに格納するJavaプログラムを1つ作成しました。
これまで、タスクの概要について説明してきました。次に、プログラムでそれをどのように達成したかを見ていきます。
#1) DBに1つのテーブルを作成して、イメージを保存します。
構文:
String QUERY = 'Create table Blob_Sample_Example ( PicName varchar2(30), picture BLOB)';上記のクエリでは、2つの列があります。
- PicName –varchar2->画像の名前を保存するために使用されます
- 画像–BLOB->画像をテーブルに保存するために使用されます。
BLOBデータ型は、画像/画像をDBテーブルに格納するために使用されます。
#二) 接続とステートメントが作成され、CREATEクエリを実行するためにexecuteメソッドが呼び出されました。
statemnt1.execute(QUERY);#3) 次に、挿入クエリを作成し、PreparedStatementを使用して実行しました。
PreparedStatement構文:
PreparedStatement pstmnt = conn.prepareStatement(insert_query);#4) setString()の使用–画像の名前を設定します。
#5) 画像を設定するには、FileInputStreamクラスを使用して画像の場所を渡します。
構文:
FileInputStream inputStream = new FileInputStream('Picture Full Path');次に、setBlob()メソッドを使用して、PreparedStatementオブジェクトに画像を設定できます。その後、PreparedStatementのexecuteメソッドを呼び出します。これにより、指定されたデータがテーブルに挿入されます。
挿入クエリを実行した後、ResultSetオブジェクトを使用して、テーブルからデータを取得しています(Selectクエリを使用)。
#6) getStringメソッドを使用すると、PicName列の値を取得できます。
# 7) 画像を取得するには、次の手順に従います。
- Blobオブジェクトを作成し、ResultSetオブジェクトのgetBlobメソッドの戻り値を割り当てます。
- そのための構文は次のとおりです。 Blob blob1 = rs.getBlob();
- バイト配列オブジェクトを作成し、Blobオブジェクトの値をバイトとして取得します。
- オブジェクトFileOutputStreamオブジェクトを作成し、フルパスを渡してそのパスに画像を保存します。画像を保存するFileOutputStreamオブジェクトのwrite()メソッドを呼び出します。
- その後、プログラムは正常に実行されました。
#8) 出力画像の場所に移動し、入力と出力が同じかどうかを確認します。
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(); } } } 出力:

入力ファイル:

指定されたパスにファイルが正常に保存されました。

出力ファイル:

説明:
上記のプログラムでは、最初に「D:\ Bhakiya \ Bhakiya \ JDBC」フォルダに1つのテキストファイル「file1.txt」を作成/保存しました。この場所はほんの一例です。システムに独自のファイルパスを作成できます。次に、そのファイルをDBテーブルに格納し、テーブルからそのファイルを取得してローカルシステムに格納するJavaプログラムを1つ作成しました。
これまで、タスクの概要について説明してきました。次に、プログラムでそれをどのように達成したかを見ていきます。
#1) DBに1つのテーブルを作成して、イメージを保存します。
以下は、CREATETABLEクエリの構文です。
String QUERY = 'Create table Clob_Sample_Example ( FileName varchar2(30), StoreFile CLOB)';上記のクエリでは、2つの列があります。
- FileName –varchar2->画像の名前を保存するために使用されます。
- StoreFile –CLOB->ファイルをテーブルに保存するために使用されます。
CLOBデータ型は、バイナリデータの文字型をDBテーブルに格納するために使用されます
#二) 接続とステートメントが作成され、CREATEクエリを実行するためにexecuteメソッドが呼び出されました。
statemnt1.execute(QUERY);#3) 次に、挿入クエリを作成し、PreparedStatementを使用して実行しました。
PreparedStatement構文:
PreparedStatement pstmnt = conn.prepareStatement(insert_query);#4) setString()の使用–FileNameの名前を設定します。
#5) ファイルを設定/保存するには、FileReaderクラスを使用して、塗りつぶしの場所を指定してファイルを渡します。
構文:
FileReader fileRead = new FileReader('D:\Bhakiya\Bhakiya\JDBC\file1.txt');次に、setClob()メソッドを使用して、PreparedStatementオブジェクトにファイルを設定できます。その後、PreparedStatementのexecuteメソッドを呼び出しました。これにより、指定されたデータがテーブルに挿入されます。
挿入クエリを実行した後、ResultSetオブジェクトを使用して、テーブルからデータを取得しています(Selectクエリを使用)。
クエリの選択:
'select * from Clob_Sample_Example'#6) getStringメソッドを使用して、FileName列の値を取得できます。
# 7) ファイルを取得するには、 以下の手順に従いました。
- Clobオブジェクトを作成し、ResultSetオブジェクトのgetClobメソッドの戻り値を割り当てます。
- そのための構文は次のとおりです。 Clob clob1 = rs.getClob();
- Readerオブジェクトを作成し、Clobオブジェクトの値をCharacterとして取得します。
- オブジェクトFileWriterオブジェクトを作成し、フルパスを渡してファイルをそのパスに格納します。 FileWriteオブジェクトのwrite()メソッドを呼び出します。これにより、その場所のファイルにデータが書き込まれます。
- その後、プログラムは正常に実行されました。
#8) 出力ファイルの場所に移動し、入力ファイルと出力ファイルが同じであるかどうかを確認します。
覚えておくべきポイント:
- ACIDプロパティでは、データベースでのトランザクション管理について説明しています。
- Commit()、rollback()、およびsavepointは、トランザクション管理で最も重要な操作です。
- コミットはDBに永続的に変更を加え、ロールバックは最後のコミットまたは前述のセーブポイントまで変更を元に戻し、セーブポイントはチェックポイントの作成に役立ちます。
- データベースはSQLデータ型を維持し、JavaはJavaデータ型を維持します。この変換の処理には、JDBCドライバーが使用されます。
- JDBCドライバー自体にはいくつかのSQLタイプの識別子があるため、プログラマーはデータタイプについて心配する必要はありません。
よくある質問
Q#1)JDBCデータ型とは何ですか?
回答: Javaにはデータ型があり、データベースにはデータ型があります。 JDBCドライバーは、Javaデータ型をデータベースが受け入れる適切なSQLデータ型に変換します。 ResultSetオブジェクトは、適切なデータ型で使用できるsetXXX()メソッドとgetXXX()メソッドも提供します。
Q#2)Javaの日付のデータ型は何ですか?
回答: Javaの日付は、データ型であるだけでなく、クラスでもあります。 Javaの日付には、日付、時刻、年、曜日の名前、曜日、およびタイムゾーンがあります。日付クラスには、関連データを取得するための適切なメソッドがあります。
Q#3)java.util.Dateとjava.sql.Dateの違いは何ですか?
回答: 主な違いは、java.util.Dateには日付と時刻に関する情報も含まれていることです。ただし、java.sql.Dateには日付に関する情報しかありません。これが、java.util.Dateをjava.sql.Dateに直接マッピングできない主な違いです。
Q#4)SQLのTIME型とTIMESTAMP型を表すクラスがJavaにありますか?
回答: はい、SQL用のTIME型とTIMESTAMP型のクラスがあります。 java.sql.Timeクラスは、TIME関連の情報を表します。 java.sql.timestampクラスは、TIMESTAMP関連の情報を表します。
Q#5)JDBCでトランザクションを開始するにはどうすればよいですか?
回答: JDBC接続は、自動コミットモードを有効にして開始します。このモードでは、各SQLステートメントがトランザクションと見なされます。 JDBCでトランザクションを開始するための特定のプロセスはありません。接続を作成してSQLステートメントの実行を開始すると、トランザクションが開始されます。
Q#6)Javaのcommit()メソッドとは何ですか?
回答: JavaのCommit()メソッドは、最後のcommit()以降に行われた変更を保存するために使用されます。 Commit()メソッドは、接続インターフェイスで使用できます。接続オブジェクトを使用して、commit()を呼び出すことができます。
Q#7)Javaのロールバックメソッドとは何ですか?
回答: 最後のcommit()の後、問題が発生した場合は、rollback()メソッドを呼び出して、最後のcommit.rollback()メソッドが接続インターフェイスで使用可能になるまでに行われたすべての変更を元に戻すことができます。接続オブジェクトを使用して、rollback()メソッドを呼び出すことができます。
結論
ここでは、JavaとDBのデータ型と、JDBCドライバーがそれを処理する方法について説明しました。 ACIDプロパティについて説明しました。それは銀行の分野にとって最も重要です。それはあなたのキャリアに非常に役立ちます。トランザクション管理のセクションでは、commit()、rollback()、setAutoCommit()、setSavepoint()、releaseSavepoint()などのcommitメソッドとrollbackメソッドについて説明しました。