18 April 2009

Java-MySql: Aplikasi Database dengan Data Gambar (Updated)


Untuk update metode simpan gambar lihat di appGambar 2.0


Bagaimana caranya menyimpan data yang membutuhkan penyimpanan data gambar? Misalkan data pegawai yang membutuhkan penyimpanan gambar dari setiap pegawai. Alternatifnya ada dua, dengan kelebihan dan kekurangan masing-masing. Cara yang pertama adalah dengan membuat field dengan tipe data binary, kemudian menyimpan gambar yang dibutuhkan dalam field di database tersebut. Cara ini membutuhkan manajemen program yang lebih rumit, tapi data gambar akan terjamin, karena tersimpan didalam database yang terintegrasi dengan data lainnya. Kekurangan lainnya adalah ukuran database yang akan membesar dan lambat. Bayangkan saja, sebuah field membutuhkan gambar dengan format jpeg, 200kB. Apabila ada 200 juta record, maka ukuran field yang diperuntukan khusus untuk gambar dengan perhitungan kasar adalah 0.2 MB x 200M = 40 x 10^12 = 40 TB. Belum ditambah dengan ukuran data dari field lainnya, kalau misalkan untuk menyimpan data penduduk Indonesia.

Sedangkan cara lainnya dengan menyimpan gambar dalam bentuk file di folder yang disediakan. Pemrogramannya akan lebih mudah, dan databse tidak ikut terbebani untuk menyimpan data gambar. Selain gambar, kedua cara ini bisa dipakai untuk data yang lain, misalkan attachment berupa dokumen word.

Untuk selanjutnya, yang dibahas adalah cara yang kedua. Sebuah implementasi penyimpanan data yang disertai gambar dengan cara pengkopian file aslinya, dengan menggunakan Java dan mysql. Sudah disediakan download project yang bisa dibuka di Netbeans. Sedangkan untuk aplikasi yang sudah jadi dalam bentuk exe dan jar, juga sudah disediakan. Pastikan untuk menyiapkan database mysql terlebih dahulu dengan mengimport sql script yang disediakan, dengan mengharuskan menggunakan username "root" dengan tanpa password untuk server mysql-nya, agar aplikasi ini bisa mengakses datanya.

Persiapan.
Pada contoh ini menggunakan database mysql. Disarankan untuk menggunakan paket instalasi server yang terintegrasi seperti halnya XAMPP. disana sudah ada mysql dengan phpmyadmin sebagai user interface nya.
Editor, sebenarnya lebih menyenangkan kalau menggunakan notepad2. Tapi, kalau mau memakai yang serba "wah" dan gratis, gunakan inipun dibuat dengan Netbeans 6.5 supaya lebih mudah untuk dipelajari ulang. Saya sendiri sedang mempelajari Netbeans paling baru, 6.7 ML, terutama bagian Netbeans Framework-nya yang keren.
Untuk driver koneksi, memakai mysql-connector-java-5.1.7, sudah ada dalam project, akan dipanggil sebagai lib tambahan apabila project ini dibuka kembali di Netbeans.

Manajemen data.
pertama kali ada pembuatan data baru, data kemudian akan disimpan di database mysql. Setelah penyimpanan data, kita bisa mengambil data kembali yang sudah disimpan dengan pencarian berdasarkan ID.

Manajemen Gambar.
Untuk gambar, saat pembuatan data baru, gambar akan ditampilkan setelah pemilihan file. Saat penyimpanan, gambar akan dikopikan ke folder images, kemudian diganti namanya sesuai dengan ID. Sedangkan pada saat penampilan hasil pencarian data, gambar akan ditampilkan kembali.
Untuk menampilkan gambar, dulunya sering memakai komponen JLabel dan dijadikan sebagai image icon. Tapi untuk yang ini memakai canvas dengan meng-override paint(), sehingga lebih bebas untuk penampilan gambar, termasuk bisa melakukan scale-autofit-aspect ratio apabila gambar yang dipilih lebih besar dari tempat yang disediakan.

Langkah pemuatan:

- Untuk mencoba menjalankan aplikasi ini terlebih dahulu harus membuat database. Membuat database di mysql dengan script:

CREATE DATABASE `data`;
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,
PRIMARY KEY (`id`)
);


- Untuk komponen cGambar dengan jenis Canvas, di Editor Netbeans, ubah bagian code, custom creation code, dengan new Painter(); , sehingga pada bagian kode akan menghasilkan baris berikut : cGambar = new Painter(); , dibagian deklarasi pembuatan variabel.

- Bagian penting dari program dengan penjelasannya:

//Membuat File chooser dengan propertiesnya, menentukan filter gambar, setelah itu dipanggil untuk mengambil gambar
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);

}
}//GEN-LAST:event_bBukaActionPerformed

//Menyimpan Data di mysql dan mengkopikan gambar yang dipilih
private void bSimpanActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bSimpanActionPerformed
String jk = (eL.isSelected() ? "L" : "P");
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();
}//GEN-LAST:event_bSimpanActionPerformed

//Pencarian ID yang sudah disimpan, dan menampilkan gambar kembali sesuai dengan ID
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());
}
}//GEN-LAST:event_bCariActionPerformed

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

//Membuat koneksi ke Database Mysql
public void testDriver() {
try {
java.lang.Class.forName(mySqlDriver);
con = java.sql.DriverManager.getConnection(mySqlUrl, "root", "");
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";
}

//Class untuk mengkopi file
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();
}
}

//Class untuk menampilkan gambar
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);
}
}


Download Aplikasi - appGambar

Download Project - appGambar

77 °C:

Rachmad said...

nice post

Mr. SKHAI said...

makasih y mas, udah mau ngejawab pertanyaan saya,.. tutorialnya bagus banget,..tak oprek-oprek dulu di kos ah,.. he.he..

Mr. SKHAI said...

mas, rarnya pake password y,.. kok rarnya ga' mau kebuka?

mbahsomo said...

om4gus walah om4gus :D

om4gus said...

@Rachmad
Masa baru tahu kalo saya baik hati? ;D

@Mr. SKHAI
Keduanya dalam bentuk zip, bukan rar, dan tanpa password. Coba dowloan ulang, karena masalahnya pasti download belum selesai sehingga file-nya rusak. Atau bisa didownload juga dari http://www.box.net/shared/tkmntzs2uo dan http://www.box.net/shared/isjj1pdxm9@mbahsomo
:D
kenapa mbah?
Ngomong aja kalo ada yang salah, bilang aja kalo terlalu jelek gambar bart-nya.
Jadi penasaran, kenapa mbah?

Mr. SKHAI said...

mas, kmaren udh brhasil ngedownload programnya. udah sya tes, alhamdulillah lancar gambarnya mau tersimpan. pas saya coba berikan perintah update, fotonya mau berubah tapi, alamat gambar(eGambar) yang dibacanya masih alamat yang lama. perintah yang saya buat :

String sql = "update tfoto set Letak_foto=? where nobp='"+jTextfield1.getText+"'";

trus klo pengen hapus data fotonya gimana mas?. sebelumnya makasih y mas, maaf klo kepanjangan.

om4gus said...

@Mr. SKHAI
Untuk program ini tidak memerlukan penyimpanan letak file yang asli. Misalkan gambarnya berasal dari flashdisk, maka setelah penyimpanan data, gambar akan dikopikan ke folder images di folder bawah folder program. Kalaupun flashdisk sudah dikeluarkan, gambar yang dikopikan masih ada.

Terlepas dari itu, kalau memerlukan untuk menyimpan, perintahnya adalah :
String sql = "update tfoto set letak_foto = ' " + eGambar.getText() + " ' where nobp = ' " + eID.getText() + " ' ";


Sedangkan untuk menghapus file yang sudah tersimpan adalah :
new File(gambar(eID.getText())).delete();

atau sederhananya:

new File("pict_001.jpg").delete();

Mr. SKHAI said...

makasih banyak y om,... skarang sya udah bisa nyimpan, nampilin, ngedit n hapus foto pake java. walaupun baru dapet satu cara.^_^... 1 x lgi makasih banget y om, tutorialnya bermanfaat banget. pa lagi buat newbie kyak saya, jadi semakin tertarik lagi nih untuk memperdalam java..

Mr. SKHAI said...

om, sya buat link alamat om di blog saya bleh ga'?. o y om, satu lagi, bleh ga' saya posting trik2 java om di blog saya?.

om4gus said...

@Mr. SKHAI
Boleh lah. Makasih. Lagipula seringkali artikel yang saya buat membingungkan karena sebenarnya sulit untuk membuat tulisan yang enak buat dibaca. Sehingga dituliskan dengan kata-kata mas sendiri tentu akan lebih menarik

Roby said...

mass agus yang baik,...:D saya orang padang yang lagi TA.... bisa tolong saya nga bikin menu yang bagus dengan flash atauu apa lah... (mengenai aplikasi data pegawai dengan java netbeans) ntar saya tinggal menambahhkan palette nya dengan jar yang mas berikan hahahha<---- mau enak aja nih mas" mohon bantuan nya...

om4gus said...

@Roby
Java tidak bisa digabungkan dengan object flash. Untuk pembuatan menu bisa dengan gambar ataupun dengan menu standard JMenuBar. Kalau di Netbeans tinggal geser-geser saja sudah jadi kok

Mr. SKHAI said...

mbah, saya kemarin udah coba pemanggilan antar frame java menggunakan jTable(untuk table), dan frame pemanggil(berisi jTextField, jYearChooser, jDateChooser untuk menampung data yang akan diklik(saya menggunakan eventmoseclicked mbah.^_^)). kasusnya seperti ini mbah, untuk data yang ada dalam jTable(nama, nomahasiswa), yang nanti variable penampung pada frame pemanggil berupa jTextField, data yang saya klik mau pindah dari jTable ke jTextField frame pemanggil. akan tetapi untuk jYearChooser dan jDateChooser data yang saya klik dari jTable tidak mau pindah ke frame pemanggil. yang saya ingin tanyakan apa listing perintah netbeans yang harus saya pakai, supaya jYearChooser dan jDateChoosernya mau tampil??. adapun listing jYearChooser dan jDateChooser yang saya buat sekarang seperti dibawah ini :
untuk di Class-nya :
public class mhsakbidobj {

private Integer angkatan(jYearChooser);
private String tggl_lahir(jDateChooser);

public mhsakbidobj(Integer angkatan,String tggl_lahir){

this.angkatan = angkatan;
this.tggl_lahir = tggl_lahir;

}

public Integer getangkatan() {
return angkatan;
}

public void setangkatan(Integer angkatan) {
this.angkatan = angkatan;
}

public Date gettgl1(){
return tgl1;
}

public void settgl1(Date tgl1){
this.tgl1 = tgl1;
}

}

sementara listing untuk di jTablenya(eventmouseclicked-nya) adalah :

dataTable=new mhsakbidobj();
TableModel data=tabelBaru1.getModel();

dataTable.setangkatan(data.getValueAt(tabelBaru1.getSelectedRow(), 0));
dataTable.settgl1(data.getValueAt(tabelBaru1.getSelectedRow(), 6).toString());

untuk listing di frame pemanggil jTable-nya(tempat menampung hasil pengklikan) adalah :

TablMhsAkbid dt=new TablMhsAkbid(this, true);
dt.setVisible(true);
mhsakbidobj mho=dt.getTableData();
if(mho!=null){

jYearChooser1.setYear(mho.getangkatan());
jDateChooser1.setDate(mho.gettgl1());

}

maaf y mbah kepanjangan, solusinya apa y mbah??? bisa diajarin or bisa mintak contoh program jadinya ga' mbah???

o y mbah, kataerror di netbeans-nya :

java.lang.Integer can not be applied to java lang.Object...

makasih untuk jawabannya y mbah....

om4gus said...

@Mr. skhai
mas kan punya blog, jadi buat aja sebuah artikel percobaan yg belum ketemu jawabannya, jadi ditanyakan solusinya kepada pembaca. setelah itu buat komentar disini, atau buat trackback dengan link ke artikel mas, jadi saya bisa ikutan jawab. daripada memakai kolom komentar yang terbatas dengan source itu. kalau jawabannya nanti aja dulu yah, mau jalan2 dulu. yang jelas errornya karena konversi tipe data dari tabel.

Mr. SKHAI said...

makasih sarannya y om(btul juga baru kefikiran saran dari om), sbelumnya mintak maaf, udah nyebut om mbah(kesalahan teknis.^_^). tpi, tolong postingin jawaban permasalahannya y om. makasih sebelumnya..

om4gus said...

@Mr. SKHAI
Baru dilihat lagi ^^
Tapi terlalu banyak yang saya aneh dari kode diatas. Misalkan, JYearChooser, saya tidak tahu kalau ada komponen seperti ini di javax.swing, mungkin komponen luar. Object Integer, jarang digunakan secara langsung, lebih mudah menggunakan keyword int. Dan lainnya lagi. Jadi dirapihkan saja dulu, buat postingan. Paling tidak, diupload contohnya nanti saya lihat lagi.

YTS BLOG said...

bisa tapi harus di pilih buttonnya.misalnyaklo mo update jtextfield ga bisa ke updatea alert(gambar=null);masa setiap update pilih gambarnya dulu.

om4gus said...

@yts
Nggak mudeng ini ngomongin masalah apa?
Btw, makasih yah. Di program ini tentu ada banyak kekurangan karena tujuannya cuma sebagai contoh yang bisa dikembangkan sendiri, bukan untuk digunakan sehari-hari

-S- said...

Mas, kebetulan saya lagi cari cara untuk nampilin gambar dan simpan gambar seperti artikel mas ini. Kan yg mas bahas tentang simpan gambar tapi cuma alamatnya aja kan di database? Kalau saya ingin benar2 menyimpan gambar di db gmn caranya ya mas? Terus juga, kalau tampilin gambarnya di JLabel apakah caranya sama dengan menampilkan di canvas?
Makasih ya untuk jawabannya. :)

om4gus said...

@ s
Kalau untuk menyimpan gambar langsung, prinsipnya: gambar diambil byte lengkapnya, kemudian dimasukkan dengan tipe data binary ke mysql.
Sedangkan untuk menampilkan gambar di jlabel, gunakan method setIcon.
Saya harap bisa memberi pencerahan :)

-S- said...

Makasih mas buat pencerahannya. Saya uda bisa simpen gambar ke databasenya.. ^^

-S- said...

Mas, saya bole nanya lg ya?! :)
Kan mas ud jelasin kalau cara copy gambar gimana. Kalau saya mau hapus gambar yg sudah dicopy itu, gmn caranya ya mas? Jd, misalkan user ud upload image dan image sudah tercopy ke folder tertentu. Kemudian user mau update dan imagenya diganti dengan image lain.

om4gus said...

@ s
Pake aja method File.delete()

-S- said...

Ok mas, uda bisa. Thx. ^^

-S- said...

Mas, saya tanya lg ya. :)
Kalau copy gambarny itu ke server, gmn ya? Jd, user pake komp di client, dan gambarnya disimpan ke server. Terus spesifikasi foldernya (tempat penyimpanan gambar) bisa user yg setting ga sih mas, mau simpan di mana? Makasih buat jawabannya.

om4gus said...

@ s
Untuk bisa penyimpanan file di server, sediakan sebuah server ftp dengan hak write user.
Setelah itu gunakan class dengan yang berfungsi untuk mengakses ftp. Sun tidak menyediakan class ini jadi harus mencari dan membuat sendiri.
Untuk masalah path tempat penyimpanan, tinggal sediakan textfield yang isinya diambil sehingga bebas tujuan kopi file-nya.

-S- said...

sebenernya saya ga gitu ngerti mas dengan ftp. mas bisa kasi contoh ga cara penggunaannya? ato ga, klo mau mencari harus mulai dari mana? thx before. :)

om4gus said...

@ s
Database mysql-nya pake apa? Kalau pake paket server lengkap seperti xampp disitu udah ada. Sedangkan kalo install mysql tersendiri download aja proftp server

Anonymous said...

kl untuk file gambar yg mau di tampilkan dari database gmn cara mas?
n gmn carax membuat timer dalam java netbeans mohon bantuanya mas???

om4gus said...

@ Anonim
Kalau untuk menampilkan gambar dari database, dengan cara mengubah tipe data binary menjadi gambar. Mungkin nanti saya buatkan tutorialnya kalo sempat, untuk sementara, silakan cari dulu memakai google.
Sedangkan untuk membuat Timer di java, dengan cara menggunakan class java.lang.Thread dengan method sleep(). Silakan dipelajari. Apabila menggunakan Netbeans, sudah disediakan class Timer di template yang bisa langsung digunakan.

Anonymous said...

trimakasih dah mau respon...!
ohya aq dah dpt kl yg pengunaan timernya.., tp kl menyimpan file gambarnya kedalam database lom juga rampung masih kebinggungan cara...dan juga dah search di om google lom nemukan yg tepat....mohon pencerahannya kang!
- kl boleh nanya lagi tentang menampilkan random file dalam 1 kali tampil dan tampilan yg kedua berbeda serta yg berikutx tidak dpt menampilkan file yang sudah dirandom tidak muncul dengan file yg sama....ini juga aq masih kebingungan nech...! yang akan dirandom di keluarkan dari databse nantix.?

kirimi linkx biar aq download nanti kang..!
mailq : durechintosh@gmail.com

terima kasih sebelumnya.....!

om4gus said...

@ Anonim
- Untuk menyimpan gambar, seperti yang sudah dijelaskan sebelumnya, akan saya buatkan artikel kalau ada waktu. Tunggu saja yah
- Silakan memakai fungsi rand() di mysql.
Select * from tabel order by rand();

Anonymous said...

mas, saya sudah mendownload project applikasi gambar...
nah ngambil sintaks buat bBuka...tapi ko selalu gagal y??
errornya di bawah ini:


Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.awt.Canvas cannot be cast to gambar1$Painter

tolong di bales nya y mas?thaks's

om4gus said...

@ Anonim
Coba perhatikan, Untuk menggunakan method bBuka membutuhkan internal class Painter. Jadi jangan tertinggal untuk ikut dikopi.

IdeGue! Blog said...

salam kenal sob,,,
infonya keren--keren...
saya jadi sangat tertarik,,,
ajari java ya sob,,,

http://trojandecoder.blogspot.com

om4gus said...

@IdeGue! Blog
Inggih mas, maturnuwun, kulo ugi mboten ngertos...
Kalo mau nitip link di komentar, belajar dulu a href yah :D

yasha0508 said...

salam kenal mas...
btw kalo pake jdatechooser truus datanya di simpan ke database methodnya gmn y mas??
nb: javanya pake netbeans 6.5 databasenya pake mysql mas...
trimakasih....

om4gus said...

@yasha0508
Jdatechooser yang mana?

Jdk standard tidak punya class Jdatechooser...

Defni Yusnita said...

slm knl mas... mw nanya ni, klo manggil foto td untuk buat laporan gmn y mas?? laporanx pakai inet crstal clear atw pakai java script jg blh...

om4gus said...

@Defni Yusnita
Gunakan tipe field picture dilaporan, kemudian memanggil alamat file gambar yg tersimpan berdasarkan id row yang ditampilkan

gi3 said...

Tx Berat OM, tutorial ini benar2 sangat membantu saya!!!

Btw cara nyimpen ukuran file gambarnya (size) ke database gmn caranya om?
-saya pake mysql-
makasih sebelumnya

om4gus said...

@gi3
Gunakan method length di system.io.File untuk mendapatkan ukuran file, setelah itu simpan di database.

gi3 said...

hehe,,,
belum paham Om, bisa di kasih contoh XD

Kahfi Deliansyah said...

om kalo misalnya mw save di beda Directory bisa?

om4gus said...

@Kahfi Deliansyah
Bisa

andreas said...

bisa upload project yang barunya ga? ga bisa di downlod.. helpme...

Tepoci said...

saya sangat tertarik dengan tutorial anda :)
saya mau tanya, jika membuat aplikasi tingkat multy user, dengan konsep penyimpanan gambar di folder, bagaimana cara komputer lain bisa akses foto tersebut?

mohon pencerahan dari om agus, saya bingun disitu om :D

om4gus said...

@andreas

Download juga dari http://www.box.net/shared/tkmntzs2uo dan http://www.box.net/shared/isjj1pdxm9

om4gus said...

@Tepoci
Gambar harus disimpan di database jaringan, sehingga bisa diakses dari mana saja yg terhubung komputer tersebut. Gunakan proyek ini untuk contoh:
http://blog.om4g.us/2010/04/appgambar-2-0-prototipe-java-untuk-simpan-gambar-di-database/

Anonymous said...

lho om misal file gambar disimpan dalam bentuk string bisa kan??

ka ntopik diatasa tadi menyebutkan jika make longblob kuatirnya ntr databasenya kagak muat gt cz saya gag baca ampe ahir seh gimana jika dipake text aja kan waktu input data berupa string gt

sebelumnya thx om..

Hanny said...

om, bisa berikan potongan coding yg utk memanggil alamat file gambar yg dsimpan ke laporan? sbgai pncerahan bgtu, soalx buntu bnget nih.

Zul Fadli said...
This comment has been removed by the author.
Zul Fadli said...

kereeen Om... ntar kalo saya bisa java, saya berambisi untuk membagi2 ilmu saya ke orang laen kayak yg Om lakuin ne.. thanks ya om...

aplikasinya sudah saya jalankan ne,, dan berhasil.. saya modif dikit ya,.. hanya menambahkan beberapa field dlm database dan tambahan textbox nya.. :)

om4gus said...

@Zul Fadli
Coba juga yg di website baru, http://om4g.us

luthfi21 said...

nice post!

Zul Fadli said...

oke Om.. siap siaaaap... :-)

we are advertis'd by our loving friends... said...
This comment has been removed by the author.
Indah said...

Hallo Om Agus..
saya udah liat projeknya, yang saya ingin tanyakan, bagaimana gambarnya dapat disimpan di folder ya? soalnya image yang sudah di upload kok ga ada tersimpan di folder image di projeknya ya?
mohon pencerahannya yah ^^

om4gus said...

Coba cari id yg sudah tersimpan. Apabila gambarnya keluar lagi, berarti gambar tersimpan. Gambar tersimpan di working directory program. Coba lakukan debug untuk bisa tahu lokasi nya

Indah said...

harusnya tersimpan di C:\Users\USER\Documents\NetBeansProjects\Recruitment\images

tetapi di programnya tidak ada loh om..

om4gus said...

@Indah
Coba lakukan debug untuk menampilkan working folder supaya bisa tahu lokasi penyimpanan. Program harus punya hak akses pada folder tersebut. Selain itu tampilkan error dari try catch.
atau
Coba gunanya penyimpanan database sehingga tidak ada masalah seperi ini:
http://blog.om4g.us/2010/04/appgambar-2-0-prototipe-java-untuk-simpan-gambar-di-database/

hamdy said...

nice...
thanks buat sharing nya, sangat berguna bgt buat saya

hamdy said...

mas mohon pencerahannya dong ,
codingan ini untuk mengetahui letak file gambarnya kan yah??
folder = System.getProperty("absensi.dir") + File.separator + "images";

klo saya ingin mengambil gambar dari folder lain bgmn tuh mas, misalnya saya mau ambil dari
D:\data\gambar\images

om4gus said...

@hamdy

Ganti atau buat perintah set property.
System.setProperty("absensi.dir", "D:\data\gambar\images");

imam vengeance said...

mas setelah saya buat terdapat pesan error ini..
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at beasiswa.program.penilaian.formSeleksi1$Painter.paint(formSeleksi1.java:670)
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:264)
at sun.awt.RepaintArea.paint(RepaintArea.java:240)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:347)

om4gus said...

@imam
Biasanya karena sebuah objek belum di-create atau sudah di destroy, tapi diberi perintah paint. Jadi saya belum tau kalau belum lihat baris source code lengkap.

L-kyuu said...

makasih Om
ni ilmu berharga banget

L-kyuu said...

mas mau nanya, merubah gambar dan programnya menampilkan langsung gambar yang baru ?

untuk update gambar dengan coding sama dengan insert nya "new NIOCopier(eGambar.getText(), gambar(textNoRegistrasi.getText()));"

gambar di folder nya sudah ganti tapi di programnya yng tampil gambar yang lama
kecuali programnya di restart gambar yang baru

mohon jawabannya

om4gus said...

@L-kyuu
Lupa belum di-flush. Rubah bagian setimage:

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);
image.flush();
repaint();

}

L-kyuu said...

makasih Om Cepat Membalasnya
dan makasih Om jawabannya

Semoga Sukses !! :)

Hasnan bg.bro said...

gan, nebeng yaa.. kalo untuk editnya gimana source nya gan ? q kbentur di gmbar ny nih,,, untuk source update ny.. kalo simpan udh bisa... mhon pncerahan nya yaa ... hehe

om4gus said...

@Hasnan
Ubah perintah di bSimpan, initinya seperti ini:

//Menyimpan Data dan Gambar
private void bSimpanActionPerformed(java.awt.event.ActionEvent evt) {
String jk = (eL.isSelected() ? "L" : "P");
String perintahInsert = "insert into data_pegawai values (" +
"'" + eID.getText() + "'," +
"'" + eNama.getText() + "'," +
"'" + jk + "'," +
"'" + eAlamat.getText() + "'" +
")";
String perintahUpdate = "update data_pegawai set " +
"nama = '" + eNama.getText() + "'," +
"jenis_kelamin = '" + jk + "'," +
"alamat = '" + eAlamat.getText() + "' " +
"where id = '" + eID.getText() + "'";
try {
if (stmt.executeUpdate(perintahInsert) > 0) {
JOptionPane.showMessageDialog(this, "Penyimpanan berhasil");
}
new NIOCopier(eGambar.getText(), gambar(eID.getText()));
} catch (Exception ex) {
cetak(ex.toString());
}
try {
if (stmt.executeUpdate(perintahUpdate) > 0) {
JOptionPane.showMessageDialog(this, "Update berhasil");
}
new NIOCopier(eGambar.getText(), gambar(eID.getText()));
} catch (Exception ex) {
cetak(ex.toString());
}
kosongkan();
}

rjuhedy said...

Om kl mau nampilin foto sma data lainnya gmana scriptnya? maklum newbie nih

Queen Aurellia Zetta Theodora said...

mas, koq muncul pesan

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.awt.Canvas cannot be cast to View.Admin.TambahBuku$Painter


padahal kelas painternya uda dicopyin

Anonymous said...

Dari: Farhan

Om agus, kok gk bisa di simpan?? aq buat database dengan field sbb:
id value=15
nama value = 25
jenkel value=15
alamat value=50


terus gambar itu di simpan di mana?

Anonymous said...

Dari : Farhan

Udah Berhasil OM,, saya yang salah edit coding nya..
heheheh

Anonymous said...

Dari: Farhan

Oh iya om agus,, gmn cara menampilkan foto yang sudah di save tadi ke laporan

saya memakai i-net crystal clear

gmn ya om agus??

Post a Comment