×

Menyimpan Gambar ke dalam Database Sqlite Java

Menyimpan Gambar ke dalam Database Sqlite Java

1,649 Views

Sqlite selain kuat untuk menyimpaan jutaan record (pernah saya gunakan untuk menyimpan generate password ukuran 8 gb) sekitar 136 juta record tanpa ada masalah sedikit pun. Sqlite menyediakan type data berupa blob seperti gambar, text. Menyimpan Gambar ke dalam Database Sqlite Java harus dilakukan dalam mode byte. Apa itu BLOB? merupakan singkatan dari Binary Large Object.

BLOB Ini didefinisikan sebagai potongan data biner yang disimpan sebagai satu kesatuan dalam sistem database. BLOB digunakan terutama untuk menyimpan objek multimedia seperti gambar, video, dan suara, meskipun mereka juga dapat digunakan untuk menyimpan program. Tidak semua DBMS mendukung BLOB.

  • Keuntungan menyimpan data dalam tipe BLOB
    • BLOB adalah alternatif yang baik untuk menambahkan file biner besar ke DB.
    • Cadangan basis data berisi semua data.
    • Salah satu cara terbaik yang hemat biaya.
    • Ukuran basis data berkurang, karena penyimpanan BLOB menggunakan DB ringkas.
  • Kekurangan
    • BLOB tidak universal dalam hal Database (DB), yaitu tidak semua DB mendukungnya.
    • Tidak efisien karena lebih banyak ruang disk dan waktu respons diperlukan.
    • Penyimpanan BLOB tidak mengizinkan pemantauan DB.
    • Overhead tambahan diperlukan untuk mengamankan penyimpanan BLOB yang digunakan.

File Byte dan Hex

Untuk memahami cara kerja tersebut, akan saya mulai dari file itu sendiri. Setiap file yang disimpan dalam komputer sebenarnya akan disimpan dalam bentuk binary yaitu 0 dan 1. Namun itu agak rumit bila kita baca, oleh sebab itu biasanya kita bisa nampilan file tersebut kedalam bentuk hex (hexa decimal). Misalkan kita buat sebuah file dengan nama D:/test.txt yang isinya sebagai berikut

maka bila file tersebut dibuka menggunakan aplikasi hexa editor akan tampil sebuah karakter hexa

artinya hurus ASCII yang kita simpan dalam file txt akan dibaca 74 65 73 74 20 73 75 6B 61.

Kita bisa koq menggunakan Java untuk melihat isi file tersebut dalam mode hex

String file = "D:/test.txt";        
byte[] fileContent = Files.readAllBytes(Paths.get(file));
for (byte b : fileContent) {
    String st = String.format("%02X", b);
    System.out.println(st);
}

hasilnya

65
65
73
74
20
73
75
6B
61

perhatikan variabel byte [] fileContent itulah yang akan kita simpan dalam blob di Sqlite. Tidak hanya file *.txt semua file pun bisa kita baca dalam mode byte seperti gambar ataupun file aplikasi. Byte tersebut bisa kita simpan kembali kedalam sebuah file, caranya cukup mudah. (jangan lupa create folder terlebih dahulu, pada contoh dibawah ini menggunakan lokasi D:/hasil/)

Files.write(Paths.get("D:/hasil/"+new File(file).getName()),fileContent);

Menyimpan Gambar ke dalam Database Sqlite Java

Pertama-tama kita buat terlebih dahulu sebuah database dan table Sqlite seperti berikut

Connection conn = null;
try {
    // db parameters
    String url = "jdbc:sqlite:D:/contoh blob.db";
    // create a connection to the database
    conn = DriverManager.getConnection(url);            
    System.out.println("Koneksi telah terbangun");
    
    //membuat tabel baru
    String sql = "CREATE TABLE IF NOT EXISTS biodata (\n"
            + "	id_biodata integer PRIMARY KEY,\n"
            + "	nama  text NOT NULL,\n"
            + "	gambar blob NOT NULL \n"
            + ");";
    
    Statement stmt = conn.createStatement();
    stmt.execute(sql);

    
} catch (SQLException e) {
    System.out.println(e.getMessage());
}

Perhatikan jenis kolom gambar yang betipe blob. Langkah selanjutnya kita insert record

String insert = "INSERT INTO biodata(nama,gambar) VALUES(?,?)";
PreparedStatement pstmt = conn.prepareStatement(insert);
pstmt.setString(1,file);
pstmt.setBytes(2,fileContent);
pstmt.executeUpdate();

maka dengan Sql diatas menyimpan gambar ke  dalam database sqlite dapat selesai dengan baik. Nanti ukuran file database akan mengikuti ukuran file yang disimpan.

Membuka Gambar di Sqlite

Untuk membuka kembali database dan menyimpan hasil dalam bentuk aslinya, kita coba saja kode berikut

String select = "SELECT * FROM biodata";
ResultSet rs    = stmt.executeQuery(select);
while(rs.next()){
    String f = rs.getString("nama");
    byte [] b = rs.getBytes("gambar");
    Files.write(Paths.get("D:/hasil/"+new File(f).getName()),b);
    System.out.println(f);
}

perintah new File(f).getName() digunakan untuk mendapatkan nama filenya saja.

ref:

https://www.programiz.com/java-programming/examples/convert-byte-array-hexadecimal

https://howtodoinjava.com/java/io/read-file-content-into-byte-array/

https://mkyong.com/java/how-to-convert-array-of-bytes-into-file/

See also  Java Builder antara Ant, Maven, dan Gradle

You May Have Missed