Büyük Nesnelerle (LOB) Çalışma

Java ile PostgreSQL Veritabanına Sorgu Yazma

Miller Trujillo

Staff Software Engineer

Veritabanlarında Büyük Nesneler

  • BLOB: İkili Büyük Nesne (görüntüler, videolar, PDF'ler)
  • CLOB: Karakter Büyük Nesne (uzun metin, XML, JSON)

BLOB ve CLOB temsili

Java ile PostgreSQL Veritabanına Sorgu Yazma

Neden BLOB ve CLOB?

  • VARCHAR küçük veriler için uygundur
  • BLOB ve CLOB çok büyük içerikler için tasarlanmıştır
  • Akış desteği: parça parça okuma ve yazma

Benzerlik - film akışı

Java ile PostgreSQL Veritabanına Sorgu Yazma

Java'da BLOB Yazma

String sql = "INSERT INTO covers (book_id, image) VALUES (?, ?)";


try (PreparedStatement pstmt = conn.prepareStatement(sql); FileInputStream fis = new FileInputStream("cover.png")) {
pstmt.setInt(1, 101);
pstmt.setBinaryStream(2, fis);
pstmt.executeUpdate();
}
  • INSERT - tabloya yeni satırlar ekler
  • setBinaryStream() - BLOB sütununa ikili veri akışı sağlar
Java ile PostgreSQL Veritabanına Sorgu Yazma

Java'da CLOB Yazma

String sql = "INSERT INTO manuscripts (book_id, content) VALUES (?, ?)";

try (PreparedStatement pstmt = conn.prepareStatement(sql);

FileReader reader = new FileReader("manuscript.txt")) {
pstmt.setInt(1, 101);
pstmt.setCharacterStream(2, reader);
pstmt.executeUpdate();
}

setCharacterStream() - CLOB sütununa metin verisi akışı sağlar

Java ile PostgreSQL Veritabanına Sorgu Yazma

Java'da LOB Okuma

  • InputStream bayt okur; Reader karakter okur
  • BLOB: getBinaryStream() bir InputStream döndürür
  • CLOB: getCharacterStream() bir Reader döndürür
String sql = "SELECT image FROM covers WHERE book_id = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
    pstmt.setInt(1, 101);
    try (ResultSet rs = pstmt.executeQuery()) {

if (rs.next()) {
try (InputStream is = rs.getBinaryStream("image");
FileOutputStream fos = new FileOutputStream("out.png")){
is.transferTo(fos);
} } } }
Java ile PostgreSQL Veritabanına Sorgu Yazma

CLOB'ları Reader ile Okuma

String sql = "SELECT content FROM manuscripts";
try (PreparedStatement pstmt = conn.prepareStatement(sql);
     ResultSet rs = pstmt.executeQuery()) {

while (rs.next()) {
try (Reader reader = rs.getCharacterStream("content")) {
char[] cb = new char[30];
reader.read(cb); // Chars from 0 to 29
reader.read(cb); // Chars from 30 to 59: } } }
Java ile PostgreSQL Veritabanına Sorgu Yazma

LOB'lar için En İyi Uygulamalar

  • 📂 Referansları (URL veya yollar) saklamayı tercih edin
  • ⏩ Akış API'lerini kullanın (setBinaryStream(), getBinaryStream(), setCharacterStream())
  • 🚫 Çok büyük nesnelerde sık güncellemelerden kaçının

$$

$$

Büyük nesneler temsili

Java ile PostgreSQL Veritabanına Sorgu Yazma

Haydi pratik yapalım!

Java ile PostgreSQL Veritabanına Sorgu Yazma

Preparing Video For Download...