java jdbc transaction management with example
이 튜토리얼은 JDBC 트랜잭션 유형, 데이터 유형, 트랜잭션 관리 방법 및 Java 프로그램에서 사용하는 방법을 설명합니다.
에서 JDBC 결과 집합 튜토리얼 JDBC 튜토리얼 시리즈 , JDBC ResultSet을 사용하여 데이터를 검색하는 방법을 배웠습니다.
이 튜토리얼에서는 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– 내구성-> 트랜잭션이 한 번 커밋되면 항상 커밋 된 상태로 유지됩니다.
트랜잭션 관리에는 가장 중요한 세 가지 기능이 있습니다. 그들은:
Eclipse에서 Java 프로젝트 시작
- 범하다: SQL 문을 실행 한 후 데이터베이스에서 변경 사항을 영구적으로 적용하려고합니다. commit () 메서드를 호출해야합니다. 일반적으로 커밋이란 데이터베이스에서 영구적으로 변경 사항을 적용한다는 것을 의미합니다. 변경 사항을 실행 취소 / 취소 할 수 없습니다. 그러나 데이터베이스의 데이터를 변경할 수 있습니다.
- 롤백 : 롤백은 마지막 커밋 또는 언급 된 저장 점까지 변경 사항을 취소합니다. 때때로 우리는 변경 사항을 취소 할 수 있습니다. 예를 들면 하나의 중첩 된 쿼리가 있고 한 부분은 성공적으로 실행되었으며 다른 부분은 일부 예외가 발생했습니다. 이때 첫 번째 부분에서 수행 한 변경 사항을 취소하려면 예외가 발생하면 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 () 메소드를 사용하여 저장 점까지 또는 savepoint () 이후에 모든 변경 사항을 실행 취소 할 수 있습니다. setSavepoint () 메서드는 새 저장 점을 만드는 데 사용됩니다.
# 5) releaseSavepoint () 메서드
생성 된 저장 점을 삭제하는 데 사용됩니다.
아래 프로그램에서 이러한 방법에 대해 더 많이 알게 될 것이며 Java 프로그램에서 사용하는 방법도 배울 것입니다.
이 튜토리얼에서 모든 프로그램은 Java로 작성됩니다. 우리는 Java 8 버전과 Oracle DB를 사용했습니다.
>> 클릭 여기 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) EMPID를 기반으로 2 명의 직원에 대한 2 개의 Select 쿼리 생성
다음은 2 개의 선택 쿼리입니다.
String QUERY = 'select * from employee_details where empNum = 2001'; String QUERY1 = 'select * from employee_details where empNum = 2002';
#두) EMPID를 기반으로 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';
#삼) 연결을 열고 선택 쿼리를 실행하고 EMPNUM = 2001의 데이터를 표시합니다.
# 4) setAutoCommit () 메서드를 사용하여 autoCommit 값을 false로 설정합니다.
# 5) EMPNUM = 2001의 업데이트 쿼리를 실행하고 동일한 Database에 대해 다른 연결을 생성하고 EMPNUM = 2001의 값을 선택했습니다.
# 6) EMPNUM = 2001 인 Employee의 결과 데이터는 업데이트 된 데이터가 아닙니다. commit () 작업을 수행하지 않았기 때문입니다. 업데이트에 사용한 것과 동일한 연결을 사용했다면 업데이트 된 데이터가 표시되었을 것입니다. 이제 데이터를 커밋했습니다. 데이터가 표에 반영되었습니다.
# 7) 커밋 작업 후 하나의 저장 점을 생성했습니다.
# 8) 선택 쿼리를 사용하여 EMPNUM = 2002의 데이터를 표시합니다. 업데이트 쿼리를 사용하여 해당 직원의 급여를 변경했습니다. 그 후 동일한 연결을 사용하여 EMPNUM = 2002의 데이터가 표시되었습니다. 업데이트 된 데이터가 표시되어야합니다.
# 9) 롤백 방법을 사용하여 마지막 저장 점까지 롤백을 수행합니다. 이제 동일한 연결을 사용하여 해당 직원의 데이터를 표시했을 때 마지막 커밋에 세이브 포인트를 언급하면 롤백이 마지막 세이브 포인트까지 변경 사항을 취소하기 때문에 이전 데이터가 있습니다.
# 10) 여기에 데이터를 여러 번 표시하고 있기 때문에 데이터를 표시하는 하나의 방법을 만들었습니다.
JDBC 데이터 유형
데이터베이스에는 SQL 데이터 유형이 있고 Java에는 Java 데이터 유형이 있습니다. Java 애플리케이션과 데이터베이스간에 데이터를 읽고 쓰는 메커니즘이 있어야합니다. 다른 데이터베이스는 SQL 유형을 지원하지만 이름에 약간의 차이가 있습니다.
예를 들면 대부분의 데이터베이스는 큰 이진 값을 지원하고 Oracle은이를 LONG RAW로, Sybase는이를 IMAGE로, Informix는이를 BYTE로, DB2는이를 LONG VARCHAR FOR BIT DATA로 호출합니다.
JDBC 프로그램을 작성하는 동안 대상 데이터베이스에서 사용하는 SQL 데이터 유형에 대해 걱정할 필요가 없습니다. JDBC에는 java.sql.Types 클래스에 일반 SQL 유형 식별자 세트가 있습니다. 이러한 유형은 대부분의 일반 SQL 데이터 유형을 지원하도록 설계되었습니다. JDBC 프로그램을 작성하는 동안 JDBC 데이터 유형 만 사용합니다.
JDBC 드라이버는 Java 데이터 유형을 데이터베이스 데이터 유형으로 앞뒤로 변환합니다. java.sql.DatabaseMetaData.getTypeInfo 메소드를 사용하여 주어진 데이터베이스에서 실제로 지원되는 SQL 유형을 확인한 다음 프로그램을 작성할 수 있습니다. JDBC는 대부분의 데이터 유형에 대해 기본 매핑을 사용합니다.
예를 들면 Java 문자열은 SQL VARCHAR 유형으로 변환됩니다.
다음 표에서 prepareStatement 또는 CallableStatement 또는 ResultSet 인터페이스의 setXXX, getXXX 및 updateXXX 메소드에서 맵핑이 수행되는 방법을 볼 수 있습니다.
SQL 유형 | JAVA / JDBC 유형 | setXXX | getXXX | updateXXX |
---|---|---|---|---|
정수 | int | setInt | 착색 | updateInt |
숯 | 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 | getTime | updateTime |
타임 스탬프 | java.sql.Timestamp | setTimestamp | getTimestamp | updateTimeStamp |
CLOB | java.sql.Clob | setClob | getClob | updateClob |
얼룩 | 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(); } } }
산출:
파일이 주어진 경로에 성공적으로 저장되었습니다.
설명:
위의 프로그램에서 우리가 한 것은 먼저 폴더에 하나의 이미지를 생성 / 저장했습니다. 'D : \ Bhakiya \ Bhakiya \ JDBC' . 이 위치는 예입니다. 시스템에서 고유 한 파일 경로를 만들 수 있습니다. 파일 이름은 소프트웨어 테스트 사진입니다. 그런 다음 DB 테이블에 해당 이미지를 저장하고 테이블에서 이미지를 검색하여 로컬 시스템에 저장하는 하나의 Java 프로그램을 만들었습니다.
지금까지 우리는 작업의 개요를 논의했습니다. 이제 우리는 프로그램에서 어떻게 달성했는지 볼 것입니다.
#1) 이미지를 저장할 DB에 하나의 테이블을 생성합니다.
통사론:
String QUERY = 'Create table Blob_Sample_Example ( PicName varchar2(30), picture BLOB)';
위 쿼리에는 2 개의 열이 있습니다.
- PicName – varchar2-> 사진의 이름을 저장하는 데 사용됩니다.
- picture – BLOB-> Picture in Table을 저장하는데 사용됩니다.
BLOB 데이터 유형은 DB 테이블에 사진 / 이미지를 저장하는 데 사용됩니다.
#두) 연결 및 문이 생성되고 CREATE Query를 실행하기위한 execute 메서드가 호출되었습니다.
statemnt1.execute(QUERY);
#삼) 다음으로 삽입 쿼리를 만들고 PreparedStatement를 사용하여 실행했습니다.
PreparedStatement 구문 :
PreparedStatement pstmnt = conn.prepareStatement(insert_query);
# 4) setString () 사용 – 그림의 이름을 설정합니다.
# 5) 그림을 설정하려면 FileInputStream 클래스를 사용하여 그림 위치를 전달하십시오.
통사론:
FileInputStream inputStream = new FileInputStream('Picture Full Path');
그런 다음 setBlob () 메서드를 사용하여 PreparedStatement 객체에 그림을 설정할 수 있습니다. 그 후 PreparedStatement의 실행 메소드를 호출합니다. 그러면 주어진 데이터가 테이블에 삽입됩니다.
삽입 쿼리를 실행 한 후 ResultSet 개체를 사용하여 테이블에서 데이터를 검색합니다 (Select Query 사용).
# 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”폴더에“file1.txt”텍스트 파일을 생성 / 저장했습니다. 이 위치는 예입니다. 시스템에서 고유 한 파일 경로를 만들 수 있습니다. 그런 다음 DB 테이블에 해당 파일을 저장하고 테이블에서 해당 파일을 검색하여 로컬 시스템에 저장하는 하나의 Java 프로그램을 만들었습니다.
지금까지 우리는 작업의 개요를 논의했습니다. 이제 우리는 프로그램에서 어떻게 달성했는지 볼 것입니다.
#1) 이미지를 저장할 DB에 하나의 테이블을 생성합니다.
다음은 CREATE TABLE 쿼리의 구문입니다.
String QUERY = 'Create table Clob_Sample_Example ( FileName varchar2(30), StoreFile CLOB)';
위 쿼리에는 2 개의 열이 있습니다.
- FileName – varchar2-> 사진의 이름을 저장하는 데 사용됩니다.
- StoreFile – CLOB-> File을 Table에 저장하기 위해 사용합니다.
CLOB 데이터 유형은 DB 테이블에 이진 데이터의 문자 유형을 저장하는 데 사용됩니다.
#두) 연결 및 문이 생성되고 CREATE Query를 실행하기위한 execute 메서드가 호출되었습니다.
statemnt1.execute(QUERY);
#삼) 다음으로 삽입 쿼리를 만들고 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의 실행 메소드를 호출했습니다. 그러면 주어진 데이터가 테이블에 삽입됩니다.
삽입 쿼리를 실행 한 후 ResultSet 개체를 사용하여 테이블에서 데이터를 검색합니다 (Select Query 사용).
검색어 선택 :
'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의 날짜에는 날짜, 시간, 연도, 요일 이름, 요일 및 시간대가 있습니다. Date 클래스에는 관련 데이터를 검색하는 데 적합한 메서드가 있습니다.
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 클래스가 있습니까?
대답: 예, TIME에 대한 클래스와 SQL에 대한 TIMESTAMP 유형이 있습니다. java.sql.Time 클래스는 TIME 관련 정보를 나타냅니다. java.sql.timestamp 클래스는 TIMESTAMP 관련 정보를 나타냅니다.
Q # 5) JDBC에서 트랜잭션을 시작하는 방법은 무엇입니까?
대답: JDBC 연결은 각 SQL 문이 트랜잭션으로 간주되는 자동 커밋 모드가 활성화 된 상태로 시작됩니다. JDBC에서 트랜잭션을 시작하는 특정 프로세스는 없습니다. 연결을 만들고 SQL 문 실행을 시작하면 트랜잭션이 시작됩니다.
Q # 6) Java에서 commit () 메소드는 무엇입니까?
대답: Java의 Commit () 메소드는 마지막 commit () 이후 변경된 사항을 저장하는 데 사용됩니다. Commit () 메서드는 Connection 인터페이스에서 사용할 수 있습니다. 연결 객체를 사용하여 commit ()을 호출 할 수 있습니다.
Q # 7) Java에서 롤백 방법은 무엇입니까?
대답: 마지막 commit () 후 문제가 발생하면 rollback () 메서드를 호출하여 마지막 commit.rollback () 메서드를 Connection 인터페이스에서 사용할 수있을 때까지 모든 변경 사항을 되돌릴 수 있습니다. 연결 객체를 사용하여 rollback () 메서드를 호출 할 수 있습니다.
결론
여기에서는 Java 및 DB의 데이터 유형과 JDBC 드라이버가이를 처리하는 방법에 대해 설명했습니다. ACID 속성에 대해 논의했습니다. 그것은 은행 분야에서 가장 중요합니다. 당신의 경력에 매우 도움이 될 것입니다. 트랜잭션 관리 섹션에서 commit (), rollback (), setAutoCommit (), setSavepoint () 및 releaseSavepoint ()와 같은 커밋 및 롤백 메서드에 대해 설명했습니다.
추천 도서
- Java JDBC 자습서 : JDBC 란 무엇입니까 (Java 데이터베이스 연결)
- 프로그래밍 예제가 포함 된 Java JDBC 연결 자습서
- JDBC DriverManager, JDBC PreparedStatement 및 문
- JDBC ResultSet : Java ResultSet을 사용하여 데이터를 검색하는 방법
- Java 데이터 유형, 루프, 배열, 스위치 및 어설 션
- 예제가있는 Java String length () 메서드
- Java toString 메서드를 사용하는 방법?
- Selenium 데이터베이스 테스트 (WebDriver 및 JDBC API 사용)