Cara Menyimpan Gambar Ke Database Dan Menampilkannya

he.he.heeee, halooo friends2 java smuanya... jumpa lagi sama saya. kali ini, kita bersama akan membahas bagaimana menyimpan, menampilkan, mengedit serta menghapus gambar pake netbeans. posting ini saya tulis, setelah sekian lama mencari-cari di mbah google, serta tanya blog tetangga, ikut miling list dan lain sebagainya.he.he.heeee..

Aq : tak ceritain ga' ya???
Qm : ngak..ngak..ngak usah,... ntar kayak kemarin kelamaan...
Aq : ngak kok friends, ceritanya ngak lama2 lagi, please... kan kalo ngak pake cerita ngak seru
Qm : y udah ceritain tapi ngak pake lama...
Aq : wah.. friends emang temen yang baik... thanks y... begini nih ceritanya...

pada suatu hari(kayak dongeng2 aja..he.heee), waktu itu Aq baru diterima kerja, langsung aja disuruh buat program, pertama-nya sih disuruh buat program web, tapi karena blind(alias buta) ma program web Aq langsung bilang dengan jujur(maklum dari kecil diajarin ma buk guru, ngak boleh bohong.^_^), kalo aku ngak bisa buat program web. tapi aku bisanya buat program aplikasi yang stand alone(eh.. betul ngak ya tulisannya,.. klo salah sory y.. maklum bahasa inggris dapet C melulu... Qm : siapa sih dosen-nya??).

setelah berbincang cukup sebentar dengan bos di sana, bos bisa nerimanya. mulai deh saya oprek-oprek program java, yang udah lama tak tinggal karena sibuk dengan urusan2 pribadi(maen bola, mancing, pacaran, dst... pokoknya urusan pribadi..). karena dulu pas tak tinggal program java netbeans saya masih mentah banget... malah kebangetan(bisanya cuma program save, edit, delete, exit doank...). akan tetapi karena kita adalah orang indonesia, kita tidak boleh mudah menyerah kita harus tetap berjuang sampai tetes darah penghabisan(Qm : eh kok malah kayak kemarin lagi.. kampanye.. kayaknya lebih cocok jadi caleg, dari pada programer. Aq : eh.. sory keceplosan lagi deh..).

setelah berjuang akhirnya selesai juga program save mahasiswa, akan tetapi ada temen yang ngasih masukkan lagi, dia bilang gini : TmenQu : khai, bisa ngak nampilin foto di java netbeans??
Aq : (mulai mumet lagi nih otak, program standar ja, kayak gini apa lagi nampilin foto??)tapi sekali lagi kita bangsa indonesia tidak mudah menyerah(Qm : udah.. udah... jangan kampanye lagi donk, ceritanya kepanjangan. Aq : y..y.. tak singkat ja ceritanya.).

semenjak hari itu, langsung deh tak duduk depan monitor, sambil ngoprek sana sini, melototin monitor ampe mata sakit. tetap juga tak dapet. akhirnya otak kanan ngasih ide, gini katanya : eh, khai cuba ja lo tanya ma mbah google, siapa tau dapet.. setelah dapet ide dari si otak, langsung deh mintak kiriman tambahan sama orang tua, buat biaya pergi ke warnet.he.he.heee...

akhirnya, jreng...jreng.... dapet juga pencerahan dari mbah google, gini katanya : cucu, coba cucu pergi ke sahabat sekaligus cucu mbah yang telah lama berjuang di dunia java, namanya om4gus, dia tinggal di www.om4gus.blogspot.com.. setelah dapet pencerahan dari mbah google, langsung deh pergi nemuin cucunya mbah google, om4gus namanya, ya ngak om.^_^. setelah konsultasi sama om4gus, akhirnya om ngasih ilmunya ke saya buat nyimpan foto.

udah ngak sabar ya friends, hahahahahahaha... nih ilmunya :

penyimpanan foto di dalam database, merupakan hal yang penting jika kita membuat aplikasi database mahasiswa or karyawan or pegawai(kata saya sih penting.^_^). dalam melakukan penyimpanan gambar or foto dalam database dapat dilakukan dengan dua cara. yakni, dengan menyimpan field gambar tersebut langsung ke dalam database dalam bentuk binary. cara kedua adalah, dengan hanya menyimpan data alamat foto tersebut ke dalam database, sementara gambar or fotonya disimpan dalam folder.

nah temen2 pada kesempatan kali ini kita hanya akan membahas cara kedua, yakni memasukkan data alamat gambar ke dalam database. sementara foto or gambarnya ke dalam folder dari program yang kita buat.

nih langkah pertama yang kita harus buat :

1. buat database dengan nama database terserah anda(Ex : dbMhs or dbKaryawan, dan lain sebagainya..he.he.heeee..).
nih contoh script create databasenya :

CREATE DATABASE `dbMhs`;
USE `dbMhs`;
CREATE TABLE IF NOT EXISTS `Mhs` (
`NoBp` varchar(15) NOT NULL,
`namaMhs` varchar(100) NOT NULL,
`jekel` char(7) NOT NULL,
`alamat mahasiswa` varchar(200) NOT NULL,
PRIMARY KEY (`NoBp`)
);


2.untuk menampilkan gambar or foto di form project netbeans, kita menggunakan canvas, yang ada pada Editor Netbeans, tapi kita harus ubah bagian code, custom creation code, dengan new Painter();

caranya :

klik kanan pada canvas, lalu ambil propertis trus klik tab variable, selanjutnya ubah custom creation code dengan new Painter();

sedangkan untuk Editor swing lainnya tetap memakai construktor or editor netbeans seperti biasanya tanpa harus diedit.

Ex : untuk NoBp kita tetap memakai jTextField, nama jTextfield, jenis kelamin dapat memakai jComboBox or jRadioButton, dan alamat dapat memakai list atau jTextField..

nah ini listing programnya, silahkan di pelajari dan di sedot sepuasnya..he.he..he... :

listing pertama, pada jButton1(button untuk membuka lokasi gambar or foto, nama variabel button-nya dapat kita rubah dengan nama bBuka atau yang lainnya, saya tiru aja nama variabel om4gus, boleh kan om.^_^) :
private void bBukaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bBukaActionPerformed
javax.swing.JFileChooser jfc = new JFileChooser();
FileFilter jpgFilter, gifFilter, bothFilter;
jpgFilter = new FileNameExtensionFilter("Gambar JPEG", "jpg");
gifFilter = new FileNameExtensionFilter("Gambar GIF", "gif");
bothFilter = new FileNameExtensionFilter("Gambar JPEG dan GIF", "jpg", "gif");
jfc.setAcceptAllFileFilterUsed(false);
jfc.addChoosableFileFilter(jpgFilter);
jfc.addChoosableFileFilter(gifFilter);
jfc.addChoosableFileFilter(bothFilter);
if (jfc.showOpenDialog(this) == jfc.APPROVE_OPTION) {
String f = jfc.getSelectedFile().toString();
eGambar.setText(f);
((Painter) cGambar).setImage(f);

}
}


listing kedua, pada jButton2(button untuk menyimpan alamat foto ke database, sementara fotonya sendiri disimpan ke dalam folder. nama variabel button-nya dapat kita rubah dengan nama bSimpan atau yang lainnya(Ex : bSave, dll), saya tiru aja nama variabel om4gus lagi, boleh y om.^_^) :

private void bSimpanActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bSimpanActionPerformed
String jk = (eL.isSelected() ? "L" : "P");// dapet juga menggunakan combo untuk memilih jenis kelaminnya..
String perintah = "insert into data_pegawai values (" +
"'" + eID.getText() + "'," +
"'" + eNama.getText() + "'," +
"'" + jk + "'," +
"'" + eAlamat.getText() + "'" +
")";
try {
new NIOCopier(eGambar.getText(), gambar(eID.getText()));
if (stmt.executeUpdate(perintah) > 0) {
JOptionPane.showMessageDialog(this, "Penyimpanan berhasil");
}
} catch (Exception ex) {
cetak(ex.toString());
}
kosongkan();
}


listing ketiga, diletakkan pada jButton3(button untuk melakukan pencarian foto yang telah kita simpan. nama variabel button-nya dapat kita rubah dengan nama bCari atau yang lainnya(Ex : bSave, dll), tak tiru lagi y om4gus nama variabelnya, boleh y om.^_^) :

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));
}
} catch (Exception ex) {
cetak(ex.toString());
}
}


listing program ini di buat untuk membersihkan Editor netbeans pada form yang kita buat :

private void kosongkan() {
eAlamat.setText("");
eGambar.setText("");
//cGambar = new Painter();
((Painter) cGambar).setImage("");
eID.setText("");
eL.setSelected(false);
eP.setSelected(false);
eNama.setText("");
}


listing program untuk menkoneksikan program kita ke database :

public void testDriver() {
try {
java.lang.Class.forName(mySqlDriver);// dapat dirubah dengan jdbc java(sun.jdbc.odbc.JdbcOdbcDriver)
con = java.sql.DriverManager.getConnection(mySqlUrl, "root", "");("jdbc:odbc:nama datasources","","")
stmt = con.createStatement();
} catch (Exception ex) {
cetak(ex.toString());
}
}

Menentukan tempat penyimpanan gambar

private String gambar(String id) {
return folder + File.separator + id.trim() + ".jpg";
}


listing untuk mengcopykan gambar or foto ke dalam folder, dimana nama gambar atau foto yang akan dicopykan ke dalam folder tersebut akan sama dengan NoBp or Id dari mahasiswa atau karyawan.

public class NIOCopier {

public NIOCopier(String asal, String tujuan) throws IOException {
FileInputStream inFile = new FileInputStream(asal);
FileOutputStream outFile = new FileOutputStream(tujuan);
FileChannel inChannel = inFile.getChannel();
FileChannel outChannel = outFile.getChannel();
for (ByteBuffer buffer = ByteBuffer.allocate(1024 * 1024);
inChannel.read(buffer) != -1;
buffer.clear()) {
buffer.flip();
while (buffer.hasRemaining()) {
outChannel.write(buffer);
}
}
inChannel.close();
outChannel.close();
}
}


listing program ini, untuk mengatur gambar or foto yang akan ditampilkan ke dalam canvas.

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 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);
}
}


nah, selesai deh pembahasan kali ini, jangan lupa masukkannya, ok friends. wasalam...