# 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
데이터베이스에 접속을 염
질의와 갱신 전송
결과 얻음
'전공 과목 이수2👨💻 > 데이터베이스' 카테고리의 다른 글
[데이터베이스] 08. 관계형데이터베이스 설계 (0) | 2021.06.03 |
---|---|
[데이터베이스] 07.데이터베이스 설계 (0) | 2021.05.31 |
[데이터베이스] 13주차 | 프로시저, 함수 (0) | 2021.05.30 |
[데이터베이스] jdbc 입문 (0) | 2021.05.29 |
[데이터베이스] 4장 말 5장 초 (0) | 2021.05.26 |
[데이터베이스] join, 제약조건 실습 (0) | 2021.05.23 |