Java Swing Menyimpan Gambar pada Basisdata

Swing save Image db

Ada banyak diskusi di dunia internet terutama Stackoverflow mengenai teknik penyimpanan gambar pada basisdata. Diskusi yang umum terjadi adalah apakah akan menyimpan gambar langsung dalam basisdata sebagai sebuah binary menggunakan tipe data Blob atau gambar disimpan di file system (biasanya folder) dan pada basisdata hanya menyimpan path/nama file gambar dalam tipe varchar.

Kedua teknik tadi memiliki pros dan cons masing-masing. Silahkan ikuti diskusinya disini untuk mengetahuinya. Pada kesempatan kali ini saya akan menunjukkan cara menyimpan sebuah gambar di basisdata pada aplikasi java swing menggunakan teknik yang kedua, yaitu hanya menyimpan nama file dari gambar.

Struktur Project dan Library yang Digunakan

Untuk memudahkan memahami tutorial ini berikut adalah struktur project pada Netbeans serta library yang digunakan

struktur project dan library

untuk media penyimpanan file gambar kita buat sebuah folder dengan nama [rad-hl]image[/rad-hl] yang terletak sejajar dengan folder [rad-hl]src[/rad-hl]

folder image

Diagram Use Case

Diagram fungsional dibawah ini menunjukkan apa saja yang bisa dilakukan oleh pengguna aplikasi.

Java Swing Menyimpan Gambar pada Basisdata

Menyiapkan Basisdata

Buat sebuah basisdata dengan sebuah tabel bernama [rad-hl]book[/rad-hl]

Kelas Domain

Jangan lupa untuk membuat sebuah kelas domain yang merepresentasikan tabel book yang baru saja kita buat. Kelas ini memiliki properti yang sama dengan kolom pada tabel book.

file : Book.java

Kelas DAO

Kelas DAO berfungsi untuk melakukan operasi dengan basisdata. Jadi semua hal yang berhubungan dengan basisdata kita serahkan ke DAO ini seperti simpan, ambil, ubah dan hapus data.
Pada aplikasi yang kita buat DAO hanya memiliki 2 method untuk operasi basisdata yaitu untuk menyimpan buku dan mendapatkan daftar buku yang telah disimpan.

file : BookDao.java

Kelas Service

Service digunakan sebagai logika bisnis aplikasi. Selain itu service juga digunakan sebagai tempat mengatur transaksi pada basisdata. Jika transaksi berhasil maka transaksi akan dicommit, jika gagal transaksi akan di rollback untuk dikembalikan seperti semula.
Lebih lengkap soal transaksi baca disini

file : BookService.java

Table Model

Kalau saya perhatikan masih banyak yang menggunakan [rad-hl]DefaultTableModel[/rad-hl] untuk menampilkan data di JTable. Padahal kalau dibandingkan dengan teknik yang akan saya gunakan jauh lebih gampang menggunakan ini nantinya. Konsentrasi penanganan kode untuk menampilkan data dan manipulasi lainnya di JTable seperti update, delete, edit hanya terfokus pada kelas ini.
Table model yang selalu saya gunakan merupakan sub-kelas dari [rad-hl]AbstractTableModel[/rad-hl]

file : BookTableModel.java

Desain Form

Desainlah form pada Netbeans GUI Builder seperti pada gambar dibawah ini atau sesuaikan dengan selera
form desain

Berikut ini nama variabel komponen dari GUI diatas
components

Kode pada Form

Tambahkan beberapa deklarasi objek diatas constructor dan ubah constructor menjadi seperti berikut

file : UploadImageFrame.java

disitu terlihat adanya method tambahan [rad-hl]initTable()[/rad-hl]. Method ini digunakan untuk mengisi JTable dengan data yang tersimpan pada basisdata saat pertama kali form muncul. Selain itu pada method ini juga terdapat kode untuk memunculkan gambar pada kotak jlabel ketika salah satu data di JTable terseleksi.
Dibawah ini adalah isi dari initTable(), letakkan dibawah constructor

Dari row yang terseleksi pada jtable kita bisa memperoleh baris keberapa yang terseleksi dengan menggunakan
int row=jTableBook.getSelectedRow();
dari situ kita bisa mendapatkan objek book dengan memanfaatkan kelas tabel model sebagai berikut
Book book=bookTableModel.findOne(row);
Dari objek book maka bisa kita dapatkan nama file gambar buku yang tersimpan pada database. Untuk meloadnya digunakan
Image image=toolkit.getImage(path+”/image/”+book.getImage());
Dan kemudian diresize yang akhirnya ditampilkan pada jlabel
Semoga cukup jelas penjelasannya

Tombol cari buku digunakan untuk browsing gambar pada hardisk komputer yang akan digunakan sebagai gambar pelengkap data buku. Berikut adalah event kliknya

Pada method diatas perhatikan pada baris yang saya tandai. Objek tersebut digunakan untuk menampung file gambar yang nantinya akan dikopikan kedalam folder image ketika proses penyimpanan data.

Terakhir adalah membuat event simpan pada tombol simpan. Pada proses penyimpanan akan berlangsung pula proses penyalinan gambar dari folder asli dimana gambar tersebut berasal menuju folder [rad-hl]image[/rad-hl] yang telah kita buat tadi, untuk itulah library [rad-hl]apache commons io[/rad-hl] digunakan.

Pada baris yang saya tandai. Semudah itulah menyalin file menggunakan library apache commons io 😀

Kelas Main

Modifikasi kelas utama kita menjadi seperti ini

file : SaveImageDB.java

Screenshot

SS memilih gambar buku
choose image

SS mengisi data buku
Mengisi data

SS data berhasil disimpan
berhasil disimpan

SS gambar dikopi pada folder image
gambar terkopi

SS gambar akan muncul sesuai dengan data yang terseleksi
gambar terseleksi

Source Code

Source Code bisa didownload pada Github saya disini
Jangan lupa untuk menambahkan library yang dibutuhkan

PERHATIAN
Ketika aplikasi kita sudah berbentuk .jar jangan lupa untuk membuat folder [rad-hl]image[/rad-hl] untuk menyimpan gambar sejajar dengan file .jar aplikasi kita
after jar

Semoga bermanfaat 🙂
Jika ada yang kurang jelas saya persilahkan untuk bertanya

Facebook Comments
 

Agung Setiawan

Agung Setiawan adalah software engineer di BukaLapak.com, penulis sekaligus pecinta sastra, dan pembaca buku

 
Halo, perkenalkan saya Agung Setiawan.
Saya Software Engineer di BukaLapak.
Simak pemikian saya soal dunia Software Engineering via Twitter di @agungsetiawanmu dan facebook
Blog ini saya update seminggu sekali jadi sering-sering saja mampir
Mau belajar Vim bareng saya?
Belajar ngoding dari nol menggunakan PHP

12 thoughts on “Java Swing Menyimpan Gambar pada Basisdata

  1. Mas, “FileUtils” di saya kok terbaca error di netbeans, ini menyangkut ke library ekstensi atau kita harus membuat class baru FileUtils?

  2. Maskalo misalkan saya membuat aplikasi kyak gitu terus udah sya jadikan file jar,lha untuk menjalankan aplikasi tersebut kan harus menyalakan mysqlnya dulu pada komoputer kita dari xampp, dan yang saya tanyakan,
    Bagaimana jika kita ingin mnjalankanan aplikasi yang sudah saya buat tnpa harus menjalankan mysqlnya (jika kita mnjalankan aplikasinya, mysql otomatis nyala, tnpa harus mnyalakan mysql dari xampp), terima kasih.

  3. untuk media penyimpanan file gambar kita buat sebuah folder dengan nama [rad-hl]image[/rad-hl] yang terletak sejajar dengan folder [rad-hl]src[/rad-hl]

Leave a Reply

Your email address will not be published. Required fields are marked *