Java로 작성된 DB2 저장 프로 시저에서 일부 데이터를 Blob로 리턴하고 싶습니다.DB2 Java 저장 프로 시저에서 Blob을 동적으로 작성하십시오.
/**
* SQLJ Stored Procedure P_GET_BACKUP
* @param clubID
* @param backupID
* @param Backup
*/
package ch.swissasp.vvv.procedures;
import java.io.File;
import java.io.FileInputStream;
import java.sql.SQLException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class P_GET_BACKUP1
{
public static void p_GET_BACKUP1(int clubID, int backupNr, java.sql.Blob[] backup)
throws SQLException,
Exception
{
// create blob and return as output parameter 'backup'
}
}
내가 지금해야하는 것은을 생성 할 수있는 방법입니다 : 이것은
CREATE PROCEDURE CLUB.P_CLUB_GET_BACKUP (IN CLUBID INTEGER,
IN BNR INTEGER,
OUT BACKUP BLOB(50000000))
NO SQL
NOT DETERMINISTIC
LANGUAGE Java
EXTERNAL NAME 'P_CLUB_GET_BACKUP:ch.swissasp.vvv.procedures.P_GET_BACKUP1.p_GET_BACKUP1'
FENCED
THREADSAFE
PARAMETER STYLE JAVA
그리고 해당 자바 코드 :
이
은 DB2 서버의 절차를 생성하는 코드 저장 프로 시저에서 생성 된 일부 이진 데이터의 BLOB (BLOB가 쿼리에서 왔지만 데이터베이스 서버에있는 데이터를 읽지 않음)이 BLOB을 출력 매개 변수 'backup'으로 반환합니다. 문제는, 내가 어떻게 blob을 동적으로 생성하는지에 대한 단서가 없다는 것이다. java.sql.Blob 그 자체가 인터페이스이기 때문이다.// create a blob the complicated way...
Connection con = DriverManager.getConnection("jdbc:default:connection");
con.setReadOnly(true);
PreparedStatement stmt = con.prepareStatement("VALUES (Cast(? AS Blob))");
stmt.setBytes(1, new byte[0]);
ResultSet rs = stmt.executeQuery();
rs.next();
Blob blob = rs.getBlob(1);
rs.close();
을 그리고 다음과 같이 사용 : 나는 같은 더미 SQL을 사용하여 BLOB를 만들 수 있습니다
OutputStream out = blob.setBinaryStream(1L); // get output stream to blob
// code to write the data to output stream
out.close(); // close blob
backup[0] = blob; // set output param
하지만 바람직하게는 이런 일에 모든 SQL 코드를 대체 할 수있을 것입니다 :
java.sql.Blob blob = new DB2Blob(); // dynamically allocate blob
DB2에 blob을 동적으로 작성하는 기능이 있다면 어떤 아이디어가 있습니까?
이 파티에 매우 늦었지만 SerialBlob을 생성하고 반환 할 수 없었습니까? BLOB 인터페이스를 구현하고 byte [] 생성자를가집니다. http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/serial/SerialBlob.html – Mike
유망한 것으로 들립니다. 시간이 있으면 테스트 해 보겠습니다. –