appGambar 2.0, Prototipe Java untuk Simpan Gambar di Database
- April 28th, 2010
- Posted in Programming
- Write comment

Dengan begitu banyaknya permintaan untuk membuat satu lagi metode untuk simpan data gambar di database, appGambar di blog lama, baru sekarang ini bisa terpenuhi untuk update. Kalau sebelumnya data gambar disimpan diluar dalam bentuk file dan hanya disimpan nama filenya saja, ini menggunakan metode berbeda. Dengan appGambar versi 2.0 ini, kita bisa menyimpan gambar langsung di database dengan untuk field dengan tipe data long blob, kemudian mengambil data untuk ditampilkan.

Seperti dijelaskan sebelumnya, masing-masing metode mempunyai tujuan dan keuntungan yang berbeda. File yang disimpan diluar akan menghemat ukuran data dan kecepatan koneksi database, sedangkan data yang disimpan di dalam database akan menjamin integritas data, untuk mencegah terjadinya kehilangan data.
Aplikasi ini dibuat dengan Netbeans 6.8 berbasis project menggunakan jdk1.6.0_17.
Sebelum mencoba, import file database terlebih dahulu, baru menjalankan aplikasi .exe atau .jar. Program dites dengan menggunakan username default root tanpa password, bagi yang berbeda harus dicompile ulang terlebih dahulu.
Klik Simpan untuk menyimpan setelah mengisikan semua field dan memilih gambar yang disimpan. Klik Cari untuk menampilkan ID yang sudah disimpan.
Struktur Database MySql
1 2 3 4 5 6 7 8 9 10 11 12 | DROP DATABASE `data`; CREATE DATABASE `data` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; USE `data`; CREATE TABLE IF NOT EXISTS `data_pegawai` ( `id` varchar(10) NOT NULL, `nama` varchar(50) NOT NULL, `jenis_kelamin` char(1) NOT NULL, `alamat` varchar(150) NOT NULL, `gambar` longblob, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; |
Source untuk Simpan Gambar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | private void bSimpanActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bSimpanActionPerformed String jk = (eL.isSelected() ? "L" : "P"); String perintah = "insert into data_pegawai (id, nama, jenis_kelamin, alamat, gambar) values (" + "'" + eID.getText() + "'," + "'" + eNama.getText() + "'," + "'" + jk + "'," + "'" + eAlamat.getText() + "'," + " ?)"; try { //new NIOCopier(eGambar.getText(), gambar(eID.getText())); //if (stmt.executeUpdate(perintah) > 0) { PreparedStatement ps = con.prepareStatement(perintah); //"update data_pegawai set gambar = ? where id = '" + eID.getText() + "'"); ps.setBinaryStream(1, new FileInputStream(eGambar.getText()), new File(eGambar.getText()).length()); int s = ps.executeUpdate(); if (s > 0) { JOptionPane.showMessageDialog(this, "Penyimpanan berhasil"); } } catch (Exception ex) { cetak(ex.toString()); JOptionPane.showMessageDialog(this, "Penyimpanan gagal, \n" + ex.toString()); } kosongkan(); }//GEN-LAST:event_bSimpanActionPerformed |
Source untuk Ambil Gambar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | //Pencarian ID yang sudah disimpan private void bCariActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bCariActionPerformed String id = eID.getText(); String perintah = "select * from data_pegawai where id = '" + id + "'"; kosongkan(); try { ResultSet hasil = stmt.executeQuery(perintah); for (int I = 0; hasil.next(); I++) { eID.setText(hasil.getString(1)); eNama.setText(hasil.getString(2)); if (hasil.getString(3).equals("L")) { eL.setSelected(true); } if (hasil.getString(3).equals("P")) { eP.setSelected(true); } eAlamat.setText(hasil.getString(4)); ((Painter) cGambar).setImage(gambar(id)); Blob blob = hasil.getBlob(5); ((Painter) cGambar).setImageIcon(new javax.swing.ImageIcon( blob.getBytes(1, (int) (blob.length())))); } } catch (Exception ex) { cetak(ex.toString()); } }//GEN-LAST:event_bCariActionPerformed |
Source untuk Tampilkan Gambar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public class Painter extends Canvas { Image image; public void setImage(String file) { URL url = null; try { url = new File(file).toURI().toURL(); } catch (Exception ex) { cetak(ex.toString()); } image = getToolkit().getImage(url); repaint(); } public void setImageIcon(ImageIcon file) { image = file.getImage(); repaint(); } @Override public void paint(Graphics g) { double d = image.getHeight(this) / this.getHeight(); double w = image.getWidth(this) / d; double x = this.getWidth() / 2 - w / 2; g.drawImage(image, (int) x, 0, (int) (w), this.getHeight(), this); } } |
Download Link:
appGambar_2.0_database.zip
appGambar_2.0_database-kucing.zip
appGambar_2.0.exe
appGambar_2.0.jar
appGambar_2.0-sourcecode.zip
Aplikasi exe dari java dibuat dengan j2eWizard
Note:
Tolong kasih tahu kalau ada link yang bermasalah.
Ps:
Kucingnya suka difoto…

Maaf pak, mau tanya… Saya coba program yang bpk buat. Tapi pada code
…
ps.setBinaryStream(1, new FileInputStream(eGambar.getText()), new File(eGambar.getText()).length());
…
Dalam code simpan, terjadi error.
@bagudung
Seharusnya kalau menggunakan appGambar_2.0-sourcecode.zip tidak terjadi error. Errornya exception apa?
Maaf pak, saya pemula di java. Saya kurang mengerti menjelaskan apa errornya. Tapi intinya, code tombol “simpan” tidak dapat mengambil/memakai data yang telah di ambil pada code “buka”. Eh, iya pak.. Gambar saya memasukkan kedalam database, bukan disimpan dalam folder. Saya tidak menyimpan gambarnya kedalam folder, agar data(code) lebih mudah saya pahami (sesuai dengan materi database). Jadi, saya ambil gambar pakai JFileChooser kemudian disimpan ke database dengan menggunakan perintah :
ps.setBinaryStream(1, new FileInputStream(eGambar.getText()), new File(eGambar.getText()).length());
Mungkin bapak bisa memberikan contoh bagaimana memasukkan gambar ke database dengan type BLOB. Karena file yang saya download, menyimpan gambar di folder. Kalau saya sudah bisa mencobanya, baru saya akan mencoba menyimpan ke folder seperti yang di atas. Terima kasih pak atas bantuannya..
@bagudung
ps.setBinaryStream() hanya sebagian kode untuk menentukan tipe data blob yang akan disimpan, pada baris sebelumnya ada set perintah insert sedangkan baris berikutnya ada ps.executeUpdate() untuk simpan data. Jadi tidak disimpan diluar, tapi sudah dalam didalam tabel database.
Contoh diatas sudah lengkap untuk simpan data blob ke database. Tolong baca artikelnya baru tanya.
Jadi coba dulu file project zip yah, kalau sudah berjalan nanti baru digunakan.
mas saya dah coba…..tapi kalo nyimpan file gambar ukuran kecil(4,5 KB, 3,9 KB) kok gak muncul yah gambarnya dan kutika pencarian juga gak muncul, tapi di dalam database dah ke simpan
@hayyi
Bisa beri contoh gambarnya? yang disupport drawImage adalah gif dan jpg dengan kompresi standar
kok ada peringatan nullexception wktu dRUN
@kotak47
Bagian mana?
Hlo Bro… lama ga jumpa…
hehehe… lg cari cara nyimpan gambar ke database, googling ketemu dengan blog Om Agus… hehehe
Ok ak pelajari dlu… Thx & sukses selalu..
@kudanil, *rapiin meja*
iya mas daniel, silakan liat-liat. sekalian kasih ide dong bikin tulisan apa, udah kehabisan ide.
maap mas… mau tanya…
saya newbie..
ketika saya jalankan program kemudian memilih browse pilih gambar dan kemudian open koq ndak muncul gambarnya y…
ad exception spt berikut…???
Exception in thread “AWT-EventQueue-0″ java.lang.ClassCastException: java.awt.Canvas cannot be cast to xxx.Anggota$Painter
mohon bantuannya…
@haha
itu berarti kelas painter pada bagian untuk menampilkan gambar harus ada dulu. coba gunakan project biar semua code-nya.
Maaf nih Om AGUS OOT nih,… saya mau tanya ada contoh program sistem pakar ttg penyakit ato apa aja untuk j2se ngk om,
Kalao ada posting donk ,kalo bisa kasih linknya ke email saya…hehehehehe
maaf y om sebelumnya kalo OOT(Out Of Topic ini)
Terima Kasih,
@hendra
Gk punya
kalo pesan errornya “java.lang.NullPointerException” bagaimana tuh mas??
@ayiend
tergantung errornya sebelah mana penyebabnya apa
penyimpanan gagal java.io.FileNotFoundException:
gimana yah mas?
penyimpanan gagal java.io.FileNotFoundException:
gimana yah mas? kayakna masalah mysqlY mas,.access denied
uda bisa mas,.btw sekalian nanya kalo mau updateY bisa g??edit data yg sudah ke simpen, deleteY
@ayiend
untuk update data tinggal cari apakah id sudah ada, kemudian gunakan update / delete di MySQL.
mas mau nanya,.aq bikin aplikasi dektop gitu,.pake librari jcalender,.kok saat tampilY bukan keluar tgl bln tahun yg kita input tpi format dateY aja dd MMM yy gitu
@ayiend
coba JCalendar((new DateFormat()).parse(“07/10/2011 4:5 PM, PDT”));
salam kenal mas,.saya coba bikin juga mas,.tpi kenapa gambarY g muncul di form itu??tapi di cek di mysqlY uda masuk binary fotonya mas??tolong bntu mas
di output netbeanY sih ada pesan “null\images” mas,.gimana tuh mas?
@wahyu
Saya sudah coba lagi project ini, dengan netbeans terbaru 6.9, tidak ada masalah. Saat penyimpanan maupun pengambilan data dari database. Coba masukkan ID yg sudah dimasukkan, setelah itu klik cari, maka gambar dari database akan keluar. Ini screenshotnya:
http://imgur.com/k1Zqn
iyah mas saat proses penyimpanan tidak ada masalah kok,.penyimpanan berhasil,.tapi saat cari berdasarkan id yg uda di input n disimpen beserta foto tadi g muncul yg fotoY,.data2 yang lain muncul aja mas
@wahyu
di saya muncul terus kok. saya tidak bisa betulkan kalo saya tidak bisa lihat errornya.
“null\images” gitu mas di output netbeansY gitu,.ada YM mas??biar bisa sekalian konsultasi
@wahyu
itu kan ada aplikasi exe, coba di PC lain yg juga ada database MySQL.
bukan yg punya mas kok yg bermasalah,.saya mencoba menerapkan yg punya mas di frame yg baru saya buat mas,.masalahY di menampilkan foto yg uda di input,.ketika di cari berdasarkan id data yg lain muncul kecuali data foto atau gambar mas yg g tampil atau kosong
mohon bantuannya mas,.
@wahyu
perintah ini adalah bagian tampilkan gambar:
((Painter) cGambar).setImage
(gambar(id));
Blob blob = hasil.getBlob(5);
((Painter) cGambar)
.setImageIcon(new javax.swing.ImageIcon(
blob.getBytes(1, (int)
(blob.length()))));
}
} catch (Exception
ex) {
cetak
(ex.toString());
nanti saya hubungi lewat email kalo memang perlu.
uda di cek mas barusan,.persis kok,.makaY penasaran sekaligus bingung juga nih mas,.need help mas di email biar enak juga saya kirim punya saya
mas???
Assalamualaikum om agus
@wahyu
sudah saya kirim email. sudah dicek?
uda di cek mas,.tpi g ada mas,.btw alamat email saya ini mas “@yahoo.co.id” tolong di hapus mas setelah dapet reply ini
@wahyu
sudah saya kirim kok, karena kan ada di kotak input email. coba di cek di kotak spam.
oh iyah masuk spam mas,.
mas kalo mau make JDateChooser gimana yah mas?kok incorrect date value nih.
@wahyu
Saya baru bisa cek masalah gambar itu barusan. Yg null/image itu bukan error, karena keluar pada saat pertama kali dijalankan, jadi tentu saja gambarnya masih kosong. Sedangkan penyebab utamanya belum tahu.
uda bisa mas,.coba utak atik ternyata bisa,n g tau juga dimana kesalahan sebenerY,.mas bisa tolong cek emailY g mas,.ada yg saya tanyakan
uda dikirim mas ke email
Mas..kalo pake Postgresql untuk tipe data Gambarnya gak ada yang longblob. tipe data yang lain bisa gak mas?
Best regard,
Vani
@Vani
Gunakan bytea.
CREATE TABLE images (imgname text, img bytea);
File file = new File(“myimage.gif”);
FileInputStream fis = new FileInputStream(file);
PreparedStatement ps = conn.prepareStatement(“INSERT INTO images VALUES (?, ?)”);
ps.setString(1, file.getName());
ps.setBinaryStream(2, fis, (int)file.length());
ps.executeUpdate();
ps.close();
fis.close();
mas klo gambarnya ga diisi kok ga bisa nyimpen yah…
supaya bisa nyimpan data tp tak harus dengan gambarnya
@craz
Pake if dong, tinggal buat sql simpan tapi tanpa field gambar
@om4g.us
bisa ngasih contoh ga mas…
oke mas makasih dah nemu caranya
@craz: gimana tuh?