Selamlar...
Bu örnekte kullanacağımız araçlar:
1 adet PostgreSql veritabanı.
1 adet java sınıfı
2 adet jsp sayfası
Bir tutam jar dosyası
Amacımız kişilerin resimlerini veritabanında tutmak ve istendiğinde ekrana basmak.
PostgreSql'de bir tablo oluşturalım. Ben 'KISI_RESIM' dedim adına, siz başka bir isim de verebilirsiniz. Ama kişilere ait resimlerin tutulacağı bir tablo olduğunu göz önünde bulundurursak, GLOBAL_YATIRIM_GOSTERGELERI falan gibi bir isim de vermemek lazım.:)
Tablomuzda iki adet alan olsun. Birincisi KISI_ID, ikincisi de RESIM. Birinci alan(KISI_ID) varchar(50), ikinci alan(RESIM) da BYTEA olsun.
Postgresql kurulumu, tablo oluşturma ile ilgili bilgi için daha evvelki görüntülü anlatımlara bakabilirsiniz.
Buraya kadar sorunsuz geldiğinizi farzedersek devam edebiliriz.
Java sınıfımızın içinde resimYukle metodu ve onun ihtiyacı olan yan metotlar olacak.
ResimIslemleri.java
private boolean resmiIsle(String pResimYolu, String strKisiId)
{         
Connection baglanti = null ; 
String sqlINSERT = " INSERT INTO KISI_RESIM (KISI_ID, RESIM) values (?, ?) " ; 
String sqlDELETE = " DELETE FROM KISI_RESIM WHERE KISI_ID = "   strKisiId ; 
FileInputStream fis = null ; 
PreparedStatement ps = null ; 
Statement stmt = null ; 
int intIslenenKayitSayisi = 0 ; 
boolean iseHataVar = true ; 
try 
{       
    if (!strKisiId.equals("")) 
    { 
        Properties prop = new Properties(); 
        prop.put("user","kullanici"); 
        prop.put("password","sifre");         
        Class.forName("org.postgresql.Driver"); 
        baglanti = DriverManager.getConnection("jdbc:postgresql://localhost:5432/TEST_DB", prop); 
        baglanti.setAutoCommit(false) ; 
        File file = new File(pResimYolu) ; 
        fis = new FileInputStream(file) ; 
        stmt = baglanti.createStatement() ; 
        intIslenenKayitSayisi = stmt.executeUpdate(sqlDELETE) ; 
        if (intIslenenKayitSayisi>0) 
            System.out.println("strKisiId:"   strKisiId); 
        ps = baglanti.prepareStatement(sqlINSERT) ; 
        ps.setLong(1, Long.parseLong(strKisiId)) ; 
        ps.setBinaryStream(2, fis, (int)file.length()) ; 
        ps.executeUpdate() ; 
        iseHataVar = false ; 
    } 
catch(Exception e) 
    System.out.println("GenelIslemler.resmiIsle()"   e.getMessage()); 
    iseHataVar = true ; 
finally 
    try 
    { 
        if(fis != null) 
        { 
            fis.close() ; 
        }
        if (iseHataVar)
        {
            baglanti.rollback() ;
        }
        else
        {
            baglanti.commit() ;
        }
        if (ps != null)
        {
            ps.close() ;
            ps = null ;
        }
        if (baglanti != null)
        {
            baglanti.close() ;
            baglanti = null ;
        }           
    }
    catch(Exception e)
    {
        System.out.println("resmiIsle"   e.getMessage()) ;
    }
}
return !iseHataVar ;
}//private boolean resmiIsle(String pResimYolu, String strKisiId)
 
JSP sayfalarımızdan birisi geriye gif döndüren bir jsp sayfası(ResmiBas.jsp). Ajax örneğimizdeki sayfa da geriye XML döndürüyordu hatırlarsak. Bu sayfa da GIF döndürüyor. Diğer JSP sayfamız da kişiye ait bilgilerin ve resminin basıldığı sayfa(ResimEkleGoster.jsp).
ResmiBas.jsp    
java.sql.Connection baglanti = null ;
ServletOutputStream o = null ;
ResultSet rs = null ;
byte[] imgBytes = null ;
PreparedStatement ps = null ;    
response.setContentType("image/gif") ;
String strKisiId = "" ;
if (request.getParameter("pKisiId") != null)
{
strKisiId = request.getParameter("pKisiId") ;
}   
try
{   
if (!strKisiId.equals(""))            
{
   Properties prop = new Properties();
   prop.put("user","kullanici");
   prop.put("password","sifre");        
   Class.forName("org.postgresql.Driver");
   baglanti = DriverManager.getConnection("jdbc:postgresql://localhost:5432/TEST_DB", prop);
   ps = baglanti.prepareStatement("SELECT RESIM FROM KISI_RESIM WHERE KISI_ID = "   strKisiId) ;
   rs = ps.executeQuery() ;
   if (rs != null)
   {
       while(rs.next())
       {
           imgBytes = rs.getBytes(1);
           o = response.getOutputStream();
       }
       rs.close() ;
   }        
   ps.close();
   baglanti.close() ;
   if (imgBytes != null)
   {
          o.write(imgBytes);
   }
   out.clear();
   out = pageContext.pushBody();
}
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
 
ResmiYukleGoster.jsp
if (!strKisiId.equals(""))            
{
   Properties prop = new Properties();
   prop.put("user","kullanici");
   prop.put("password","sifre");        
   Class.forName("org.postgresql.Driver");
   baglanti = DriverManager.getConnection("jdbc:postgresql://localhost:5432/kullanici", prop);
   ps = baglanti.prepareStatement("SELECT RESIM FROM KISI_RESIM WHERE KISI_ID = "   strKisiId) ;
   rs = ps.executeQuery() ;
   if (rs != null)
   {
       while(rs.next())
       {
           imgBytes = rs.getBytes(1);
           o = response.getOutputStream();
       }
       rs.close() ;
   }        
   ps.close();
   baglanti.close() ;
   if (imgBytes != null)
   {
          o.write(imgBytes);
   }
   out.clear();
   out = pageContext.pushBody();
}
 
Resmin boyutlarını java sınıfı içerisinde ayarlamak(genişletmek, uzatmak) falan mümkün ama ben uğraşmadım. Ben 105x130'dan büyükse yüklememe yöntemini seçtim. İsterseniz siz, gelen resmi boyutlandırabilirsiniz. Ayrıca resmi önce diskte 'kisiResimler' adında bir dizin oluşturup oraya atıyorum sonra da ordan veritabanına yazıyorum. Siz işlem bittikten sonra diksten silebilirsiniz de. 
ResimYukleGoster.zip
ya da
 
İhtiyaç olacak Jar dosyaları
ya da
Saygılar...
# Kategoriler : Java Yazılım
# Etiketler : Etiket Yok
# Yorumlar : 0 Yorum Yorum Yaz

Yorumlar

Yorum Eklenmemiş...

Yorum Yaz

Adınız: *
E-Mail Adresiniz: *
Web Sitesi:
Yorum: *
Güvenlik Kodu: *
 
Arama
  Ara
Sayfalar
Takvim
<December 2018>
SMTWTFS
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345
Bağlantılar