bazı toplu işlem yapmak ve Oracle veritabanında BLOB alanlarda dosyaları olarak girdi ve çıktı verileri depolamak istediğiniz. Oracle sürümü 10g r2'dir. JDBC ile büyük (veya en az belirgin olmayan) BLOB'ları Oracle'a nasıl yerleştiririm? Ben bir uygulama üzerinde çalışıyorum
veritabanına küçük bir metin dosyası ekler aşağıda PreparedStatement.setBinaryStream() yöntemini kullanarak, ama daha büyük bir görüntü dosyası ile herhangi bir şans sahip değilim
.Yanlış bir şey yapıyorum? JDBC ile bu mümkün mü? DBA'yı rahatsız etmem gerekecek mi? Yardım ettiğin için teşekkür ederim.
DÜZENLEME: Sorun çözüldü. Ben çalışan bir örneğine bu kodu güncelledik:
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class WriteBlobDriver {
public static void main(String[] args) {
Connection con = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection(
"blahblah",
"blahblah",
"blahblah");
con.setAutoCommit(false);
Statement statement = con.createStatement();
//statement.executeUpdate("UPDATE BATCH_GC_JOBS SET INPUT_BATCH_FILE = EMPTY_BLOB() WHERE JOB_ID = 'a'");
//Get blob and associated output stream
ResultSet resultSet = statement.executeQuery("SELECT INPUT_BATCH_FILE FROM BATCH_GC_JOBS WHERE JOB_ID = 'a' FOR UPDATE");
resultSet.next();
Blob blob = resultSet.getBlob(1);
OutputStream outputStream = ((oracle.sql.BLOB)blob).getBinaryOutputStream();
// Buffer to hold chunks of data to being written to the Blob.
byte[] buffer = new byte[10* 1024];
int nread = 0;
//Write file to output stream
File file = new File("C:\\TEMP\\Javanese_cat.jpg");
FileInputStream fileInputStream = new FileInputStream(file);
while ((nread = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, nread);
}
//Cleanup
fileInputStream.close();
outputStream.close();
statement.close();
con.commit();
con.close();
System.out.println("done!");
} catch (Exception e){
e.printStackTrace();
}
}
}
Vincent, resmi Oracle belgelerine bağlayan senin iyi düşünülmüş yanıt için teşekkürler. Ne yazık ki, örneklerini takip etmeye çalıştıktan sonra UPGATE FORMATI sorgusu yayınlanır yayınlanmaz ORA-01002 hatalarını almaya başladım. – Phil
@Phil: ORA-01002, BLOB ile ilgili görünmüyor. İlk önce otomatik görüşmeyi devre dışı bıraktın mı? (bunun çalışması için bir işleme ihtiyacınız olacak => autocommit'i devre dışı bırak) –
Teşekkürler, işe yaradı! – Phil