2010-08-18 4 views
1

나는 여러 xml 파일을 생성 한 다음 압축하여 파일 시스템에 저장하는 Java 프로그램을 가지고있다. 나중에이 프로그램을 내 오라클 데이터베이스의 blob 열에 저장하려고합니다. 문제는 어떻게해야할지 모르겠다. 데이터를 읽거나 데이터를 처리 할 필요가 없습니다. 영구적 인 중앙 저장소를 위해 데이터베이스로 이동하십시오.Java에서 zip 파일을 blob 열로 이동하려면 어떻게해야합니까?

감사합니다.

답변

0

나는 당신이 setBytes() 방법을 사용하고자하는 것 같아요 :

그래서 몸이 바이트 스트림의 모습입니다 전자 우편을 나타내는 테이블의 예 :

 PreparedStatement ps = con.prepareStatement(
     "INSERT INTO Image (ID, Subject, Body) VALUES (2,?,?)"); 
     ps.setString(1, subject); 
     byte[] bodyIn = {(byte)0xC9, (byte)0xCB, (byte)0xBB, 
     (byte)0xCC, (byte)0xCE, (byte)0xB9, 
     (byte)0xC8, (byte)0xCA, (byte)0xBC, 
     (byte)0xCC, (byte)0xCE, (byte)0xB9, 
     (byte)0xC9, (byte)0xCB, (byte)0xBB}; 
     ps.setBytes(2, bodyIn); 
     int count = ps.executeUpdate(); 
     ps.close(); 

I 압축 된 XML 객체에 대해 getBytes()이라는 호출을 쉽게 변환 할 수 있다고 가정합니다.

1

이렇게 할 수있는 방법은 여러 가지가 있지만 PreparedStatement.setBinaryStream 일 수 있습니다.

public void saveFileToDatabase(File file) { 
    InputStream inputStream = new FileInputStream(file); 

    Connection conn = ...; 
    PreparedStatement pS = conn.prepareStatement(...); 
    ... 
    pS.setBinaryStream(index, inputStream, (int) file.length()); 
    ... 
    pS.executeUpdate(); 
} 

(필자는 Connection, PreparedStatementInputStream을 닫는에 필요한 시도/캐치 물건 중 하나를 포함하지 않은 단순함에 대한 것을 참고,하지만 당신은 그렇게해야합니다.)

이 방법을 완료 한 번에 메모리에로드 할 필요없이 데이터가 파일에서 데이터베이스로 스트리밍됩니다.

+0

오류 처리가 제거 된이 시도한 : public void updateBlob (String id, File sf) { InputStream = new FileInputStream (sf); 문자열 sql = "INSERT INTO tname ('bCol')"+ "VALUES (?) WHERE tnameId =?"; PreparedStatement stmt = null; 연결 conn = SqlUtil.getCurrentConnection(); stmt = conn.prepareStatement (sql); stmt.setBinaryStream (1, is, sf.length()); stmt.setString (2, id); stmt.executeUpdate(); 오류 : java.lang.AbstractMethodError : org.apache.commons.dbcp.DelegatingPreparedStatement.setBinaryStream (ILjava/io/InputStream; J) V – Ironosity

+1

'sf.length()'의'long "결과를 다음과 같이 캐스팅 해보십시오. 'int' ...'int' 길이를 취한'setBinaryStream' 버전이있었습니다. 그리고 JDBC 4.0은'long' 길이를 가지는 하나를 추가했습니다. 4.0 메소드가 3.0 라이브러리에 대해 호출 될 수 있습니다. 그래도 작동하지 않으면 Commons DBCP와 Oracle 드라이버가 JDBC 3.0 이상을 지원하는지 확인하십시오. – ColinD

관련 문제