전공 과목 이수2👨‍💻/데이터베이스

[데이터베이스] 트랜잭션 처리

천숭이 2021. 5. 30. 00:00

# JDBC에서 트랜잭션 처리 Transaction : Logical unit of work자동 커밋 (default)

- 자동 커밋 off

conn.setAutoCommit(false);

트랜잭션을 커밋하거나 롤백 해야함

   = conn.commit();

   = conn.rollback();

- 자동 커밋 on

conn.setAutoCommit(true)

 

# ACID

Atomicity 원자성 : All or nothing

      ALL : Commit           nothing : Rollback

Consistency, Isolation, Durability

 

insert into ~~~~ ---> commit <---- all

 

# 자동커밋 autocommit

자동커밋을 하는 경우는 보통 그룹을 만들고(insert) 해당 그룹에 가입(update) 시키는 작업이 한번에 일어날때

autocommit을 false값으로 바꿔놓는다.

autocommit이 ture값이면(디폴트) 우리가 작성한 문장이 자동으로 테이블에 반영된다.

이렇게 되면 그룹은 만들어지는데 예외가 발생해 가입작업이 안되는 경우가 발생하기 때문이다.

conn.setAutoCommit(false);
stmt.executeUpdate("~~"); //sql문장 작성
conn.rollback();

# 대형객체 불러오기 large object

동영상, 사진, 문자데이터 등등 많은 양의 데이터베이스를 처리 가능하다.

getBlob() 와 getClob() 메소드

blob 와 clob 타입의 객체를 반환

객체 전체를 저장하는게 아니라 위치자(포인터)를 저장함

* 위치자란 실제 대형 객체에 대한 논리적인 포인터

setBlob : 데이터베이스 칼럼을 입력 스트림에 연결할 수 있도록 한다. 데이터가 입력스트림에서 읽혀지고 데이터베이스에 blob으로 저장된다

setClob : 데이터베이스 칼럼을 입력 스트림에 연결할 수 있도록 한다.

Statement sta = con.createStatement(); 
ResultSet res = sta.executeQuery("SELECT * FROM Image"); 
int i = 0; 
while (res.next() && i<3) { 
	i++; System.out.println("Record ID: "+res.getInt("ID")); 
	System.out.println(" Subject = "+res.getString("Subject")); 
	Blob bodyOut = res.getBlob("Body"); 
	int length = (int) bodyOut.length(); 
	System.out.println(" Body Size = "+length); 
	byte[ ] body = bodyOut.getBytes(1, length); 
	String bodyHex = bytesToHex(body, 32); 
	System.out.println(" Body in HEX = "+bodyHex+"..."); 
	// bodyOut.free(); // new in JDBC 4.0
 } 
res.close(); 
sta.close(); 

setBlob()

String INSERT_PICTURE = "insert into blob1 values (?)"; 
FileInputStream fis = null; 
PreparedStatement ps = null; 
try { 
	conn.setAutoCommit(false);  // 자동커밋 해제
	File file = new File("1.wma");   // 파일을 불러오고
	fis = new FileInputStream(file); 
	byte b[ ] = new byte[(int)file.length()];  
	fis.read(b); 
	System.out.println(b.length); 
	java.sql.Blob b2 = new SerialBlob(b);   // json형태로 변환
	ps = conn.prepareStatement(INSERT_PICTURE); 
	ps.setBlob(1,b2); 
	ps.executeUpdate(); 
	conn.commit(); 
	System.out.println("Record inserted successfully"); 
} catch(Exception ex){ 
	ex.printStackTrace(); 
	throw ex; 
} 
finally { 
	ps.close(); 
	fis.close(); 
} 

설명하셨는지 확인하기

# ODBC  p.152

Open DataBase Connectivity(ODBC) 표준

데이터베이스 서버와 통신하는 응용 프로그램 표준

#API

데이터베이스에 접속을 염

질의와 갱신 전송

결과 얻음