BLOB 사용 예제
저장하기
package BLOB;
import java.io.*;
import java.sql.*;
import java.util.*;
public class Exam_07 {
public static void main(String[] args) throws IOException {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("드라이버 검색 성공");
}catch(ClassNotFoundException e) {
System.err.println("error = " + e);
System.exit(1);
}
Connection conn = null;
PreparedStatement pstmt = null;
String url = "jdbc:oracle:thin:@localhost:1521:kyu";
String id = "scott";
String pass = "tiger";
String query = null;
try {
conn = DriverManager.getConnection(url, id, pass);
}catch(SQLException e) {
System.err.println("sql error = " + e);
System.exit(1); // 비정상 종료시 사용되는 함수이다.
}
Scanner sc = new Scanner(System.in);
System.out.print("업로드 할 파일 = ");
String filename = sc.next();
File f = new File(filename);
if(!f.exists()) {
System.out.println("파일이 존재 하지 않습니다.");
System.exit(1);
}
ByteArrayOutputStream bos = new ByteArrayOutputStream();
FileInputStream fis = new FileInputStream(f);
while(true) {
int x = fis.read();
if(x == -1) break;
bos.write(x);
}
fis.close();
bos.close();
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
query = "insert into filetable values (1, ?, ?)";
try {
pstmt = conn.prepareStatement(query);
pstmt.setString(1, f.getName());
pstmt.setBinaryStream(2, bis, bos.size());
pstmt.executeUpdate();
System.out.println("업로드 성공!");
pstmt.close();
conn.close();
}catch(SQLException e) {
System.err.println("sql error = " + e);
}
}
}
불러오기
import java.io.*;
import java.util.*;
import java.sql.*;
public class Exam_08 {
public static void main(String[] ar) throws IOException {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("드라이버 검색 성공");
}catch(ClassNotFoundException e) {
System.err.println("error = " + e);
System.exit(1);
}
Connection conn = null;
PreparedStatement pstmt = null;
String url = "jdbc:oracle:thin:@localhost:1521:kyu";
String id = "scott";
String pass = "tiger";
String query = null;
try {
conn = DriverManager.getConnection(url, id, pass);
}catch(SQLException e) {
System.err.println("sql error = " + e);
System.exit(1); // 비정상 종료시 사용되는 함수이다.
}
Scanner sc = new Scanner(System.in);
System.out.print("다운로드 할 번호 = ");
int num = sc.nextInt();
query = "select * from filetable where num = ?";
try {
pstmt = conn.prepareStatement(query);
pstmt.setInt(1, num);
ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
String filename = rs.getString("filename");
System.out.println("파일명 : " + filename);
Blob blob = rs.getBlob("filedata");
InputStream is = blob.getBinaryStream();
while(true) {
int x = is.read();
if(x == -1) break;
System.out.print((char)x);
}
is.close();
}
else {
System.out.println("찾는 번호는 없습니다.");
}
rs.close();
pstmt.close();
conn.close();
}catch(SQLException e) {
System.err.println("sql error = " + e);
}
}
}
테이블 스크립트
(
num NUMBER,
filename VARCHAR2(20),
filedata BLOB
)
* blob으로 저장시 한가지 문제점이 발생
java.sql.SQLException: ORA-01460: 요구된 변환은 실행될 수 없습니다.
- 오라클 드라이버 버전이 맞지 않아서 생긴 오류
- ojdbc14.jar --> ojdbc14_g.jar 로 변경
'프로그래밍' 카테고리의 다른 글
getter, setter 자동 생성 라이브러리 lombok (0) | 2012.10.23 |
---|---|
properties 너가 날 엿 먹이는 구나~ (0) | 2012.04.14 |
메인 도메인과 서브 도메인 세션 공유 문제 (0) | 2012.04.14 |
ant를 이용한 ftp 업로드 (0) | 2009.04.01 |
Generic과 Auto-boxing (1) | 2009.03.15 |
날짜함수 (0) | 2009.02.21 |
자바의 인터페이스 (0) | 2009.01.26 |
오라클 잠금 기능 (0) | 2009.01.02 |