2013-05-09 7 views
6

Aktualnie sprawdzam poprawność aplikacji opracowanej w produkcie Oracle for DB2. Ponieważ nie chcemy utrzymywać dwóch oddzielnych źródeł, potrzebuję trochę zapytania, aby wstawić obiekt blob do pola, które działa zarówno w Oracle, jak i db2. Nie mam żadnego identyfikatora, który pozwoliłby rozróżnić, w jakiej DB działa aplikacja.Wstawianie obiektu BLOB przy użyciu środowiska Java dla systemów DB2 i Oracle

Użyłem utl_raw.cast_to_raw w Oracle i CAST() as BLOB w DB2, które są wzajemnie niezgodne.

Odpowiedz

6

Nie będzie można znaleźć typowego kodu SQL używającego pewnego rodzaju przesyłania. Ale można to zrobić za pomocą „zwykłego” SQL za pomocą JDBC za setBinaryStream()

PreparedStatement pstmt = connection.prepareStatement(
    "insert into blob_table (id, blob_data) values (?, ?)"; 

File blobFile = new File("your_document.pdf"); 
InputStream in = new FileInputStream(blobFile); 

pstmt.setInt(1, 42); 
pstmt.setBinaryStream(2, in, (int)blobFile.length()); 
pstmt.executeUpdate(); 
connection.commit(); 

Można użyć setBinaryStream() w ten sam sposób z oświadczeniem UPDATE.

+0

Mam dane wewnątrz zmiennej typu String. Czy można użyć powyższej metody, konwertując ciąg do pliku BinaryStream? – Saju

+0

@Saju: jak możesz mieć * binarny * duży obiekt jako ciąg? Jaki jest rzeczywisty (np. Oracle) typ danych dla tej kolumny? Jeśli jest to "CLOB" (zamiast "BLOB"), powinieneś użyć 'setCharacterStream()' zamiast 'setBinaryStream()' –

+0

Być może @Saju oznacza NCLOB w Oracle, DBCLOB w DB2. – WarrenT

Powiązane problemy