Veri Tabanı Sistemleri - Uygulama Geliştirme
Upcoming SlideShare
Loading in...5
×
 

Veri Tabanı Sistemleri - Uygulama Geliştirme

on

  • 1,899 views

Gömülü SQL, JDBC, tetikler, görüntüler, izinler.

Gömülü SQL, JDBC, tetikler, görüntüler, izinler.

Statistics

Views

Total Views
1,899
Slideshare-icon Views on SlideShare
1,889
Embed Views
10

Actions

Likes
1
Downloads
45
Comments
3

3 Embeds 10

http://www.slideshare.net 8
http://static.slidesharecdn.com 1
http://www.lmodules.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

13 of 3 Post a comment

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Veri Tabanı Sistemleri - Uygulama Geliştirme Veri Tabanı Sistemleri - Uygulama Geliştirme Presentation Transcript

    • Uygulama Geli¸tirme s SQL Kaynaklar Veri Tabanı Sistemleri Uygulama Geli¸tirme s H. Turgut Uyar ¨ g¨ u u Sule O˘ud¨c¨ ¸ 2002-2012 ¸ ¨ g¨ u uH. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Uygulama Geli¸tirme s SQL KaynaklarLicense ¸ ¨ g¨ u u c 2002-2012 T. Uyar, S. O˘ud¨c¨ You are free: to Share – to copy, distribute and transmit the work to Remix – to adapt the work Under the following conditions: Attribution – You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). Noncommercial – You may not use this work for commercial purposes. Share Alike – If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one. Legal code (the full license): http://creativecommons.org/licenses/by-nc-sa/3.0/ ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Uygulama Geli¸tirme s SQL KaynaklarKonular 1 Uygulama Geli¸tirme s Giri¸ s G¨m¨l¨ SQL o uu ODBC JDBC 2 SQL Kayıtlı Yordamlar G¨r¨nt¨ler ou u ˙ Izinler ˙ cları Ipu¸ ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCKonular 1 Uygulama Geli¸tirme s Giri¸ s G¨m¨l¨ SQL o uu ODBC JDBC 2 SQL Kayıtlı Yordamlar G¨r¨nt¨ler ou u ˙ Izinler ˙ cları Ipu¸ ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCGiri¸ s veri tabanı dili ile genel ama¸lı bir programlama dilinin c birlikte kullanımı uygulamanın yazıldı˘ı genel ama¸lı dil: taban dil g c SQL ile taban dil arasında uyumsuzluk: SQL i¸lemleri k¨meler uzerinde s u ¨ genel ama¸lı dillerde yineleme yapıları c ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCGiri¸ s veri tabanı dili ile genel ama¸lı bir programlama dilinin c birlikte kullanımı uygulamanın yazıldı˘ı genel ama¸lı dil: taban dil g c SQL ile taban dil arasında uyumsuzluk: SQL i¸lemleri k¨meler uzerinde s u ¨ genel ama¸lı dillerde yineleme yapıları c ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCProgram Yapısı ba˘lantı kur g sunucu, veri tabanı, kullanıcı adı, parola gerektik¸e komut ¸alı¸tır: c c s g¨ncelleme i¸lemleri i¸lemden etkilenen satır sayısını d¨nd¨r¨r u s s o uu sorgulama i¸lemleri sonu¸ k¨meleri d¨nd¨r¨r s c u o uu → d¨ng¨yle satır satır gez o u ba˘lantıyı kopar g ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCProgram Yapısı ba˘lantı kur g sunucu, veri tabanı, kullanıcı adı, parola gerektik¸e komut ¸alı¸tır: c c s g¨ncelleme i¸lemleri i¸lemden etkilenen satır sayısını d¨nd¨r¨r u s s o uu sorgulama i¸lemleri sonu¸ k¨meleri d¨nd¨r¨r s c u o uu → d¨ng¨yle satır satır gez o u ba˘lantıyı kopar g ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCProgram Yapısı ba˘lantı kur g sunucu, veri tabanı, kullanıcı adı, parola gerektik¸e komut ¸alı¸tır: c c s g¨ncelleme i¸lemleri i¸lemden etkilenen satır sayısını d¨nd¨r¨r u s s o uu sorgulama i¸lemleri sonu¸ k¨meleri d¨nd¨r¨r s c u o uu → d¨ng¨yle satır satır gez o u ba˘lantıyı kopar g ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCUygulama Geli¸tirme Y¨ntemleri s o uygulama programı aray¨z¨ (API) u u g¨m¨l¨ SQL o uu ODBC dil standart aray¨zleri u ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCUygulama Programı Aray¨z¨ u u SQL sunucusunun kitaplık fonksiyonlarını ¸a˘ırarak c g avantajı: hızlı dezavantajı: sunucudan sunucuya de˘i¸iyor gs ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCUygulama Programı Aray¨z¨ u u SQL sunucusunun kitaplık fonksiyonlarını ¸a˘ırarak c g avantajı: hızlı dezavantajı: sunucudan sunucuya de˘i¸iyor gs ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC u u ¨ gUygulama Programı Aray¨z¨ Orne˘i ¨ Ornek (PostgreSQL - C) # include < libpq - fe .h > int main ( int argc , char * argv []) { /* connect */ /* execute query */ /* disconnect */ } ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC u u ¨ gUygulama Programı Aray¨z¨ Orne˘i ¨ Ornek (veri tabanı ba˘lantısı) g /* PGconn * conn ; */ conn = PQconnectdb ( " host = localhost dbname = imdb " " user = itucs password = itucs " ); if ( PQstatus ( conn ) == CONNECTION_BAD ) { fprintf ( stderr , " Connection failed . n " ); exit (1); } /* execute query */ PQfinish ( conn ); ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC u u ¨ gUygulama Programı Aray¨z¨ Orne˘i ¨ Ornek (sorgunun i¸leni¸i) s s /* PGresult * result ; */ sprintf ( query , " SELECT TITLE , SCORE " " FROM MOVIE WHERE ( YR = % d ) " , year ); result = PQexec ( conn , query ); if ( PQresultStatus ( result ) != PGRES_TUPLES_OK ) { fprintf ( stderr , " Query failed . n " ); PQclear ( result ); PQfinish ( conn ); exit (1); } ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC u u ¨ gUygulama Programı Aray¨z¨ Orne˘i ¨ Ornek (sonu¸ k¨mesinin i¸leni¸i) c u s s for ( i = 0; i < PQntuples ( result ); i ++) { title = PQgetvalue ( result , i , 0); score = PQgetvalue ( result , i , 1); ... } PQclear ( result ); ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCKonular 1 Uygulama Geli¸tirme s Giri¸ s G¨m¨l¨ SQL o uu ODBC JDBC 2 SQL Kayıtlı Yordamlar G¨r¨nt¨ler ou u ˙ Izinler ˙ cları Ipu¸ ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCG¨m¨l¨ SQL o uu a¸amalar: s 1 taban dil i¸inde SQL komutları i¸aretlenir: EXEC SQL c s 2 g¨m¨l¨ SQL ¨ni¸leyicisi: o uu o s g¨m¨l¨ SQL komutları → uygulama programı aray¨z¨ ¸a˘rıları o uu u uc g 3 taban dil derleyicisi avantajları: hızlı, standart dezavantajları: kullanı¸sız, farklı diller i¸in deste˘i yok s c g G¨m¨l¨ SQL b¨l¨m¨n¨ atla o uu ou u u ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCG¨m¨l¨ SQL o uu a¸amalar: s 1 taban dil i¸inde SQL komutları i¸aretlenir: EXEC SQL c s 2 g¨m¨l¨ SQL ¨ni¸leyicisi: o uu o s g¨m¨l¨ SQL komutları → uygulama programı aray¨z¨ ¸a˘rıları o uu u uc g 3 taban dil derleyicisi avantajları: hızlı, standart dezavantajları: kullanı¸sız, farklı diller i¸in deste˘i yok s c g G¨m¨l¨ SQL b¨l¨m¨n¨ atla o uu ou u u ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCG¨m¨l¨ SQL o uu ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCG¨m¨l¨ SQL Standardı o uu taban dil ile de˘i¸ken payla¸ımı gs s hata denetimi sorgu sonu¸larının uyarlanması c ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCDe˘i¸ken Payla¸ımı gs s Yazım EXEC SQL BEGIN DECLARE SECTION ; shared variables EXEC SQL END DECLARE SECTION ; SQL komutlarında taban dil de˘i¸kenlerinin ¨n¨ne ’:’ gs o u ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCHata Denetimi Hata ˙sleme I¸ EXEC SQL WHENEVER { SQLERROR | SQLWARNING | NOT FOUND } { STOP | CONTINUE | DO command | GOTO label } ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCSorgu Sonu¸larının Uyarlanması c ˙ cler Imle¸ EXEC SQL DECLARE cursor_name CURSOR FOR SELECT ...; EXEC SQL OPEN cursor_name ; EXEC SQL FETCH IN cursor_name INTO variables ; EXEC SQL CLOSE cursor_name ; tanımlama i¸leminde sorgu ¸alı¸tırılmaz s c s a¸ma i¸lemiyle sorgu ¸alı¸tırılır c s c s imle¸ sonu¸ k¨mesinin ilk satırına konumlandırılır c c u ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCSorgu Sonu¸larının Uyarlanması c ˙ cler Imle¸ EXEC SQL DECLARE cursor_name CURSOR FOR SELECT ...; EXEC SQL OPEN cursor_name ; EXEC SQL FETCH IN cursor_name INTO variables ; EXEC SQL CLOSE cursor_name ; tanımlama i¸leminde sorgu ¸alı¸tırılmaz s c s a¸ma i¸lemiyle sorgu ¸alı¸tırılır c s c s imle¸ sonu¸ k¨mesinin ilk satırına konumlandırılır c c u ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC ¨ gG¨m¨l¨ SQL Orne˘i o uu ¨ Ornek (veri tabanına ba˘lanma) g EXEC SQL BEGIN DECLARE SECTION ; int year ; char * title = NULL , * score = NULL ; EXEC SQL END DECLARE SECTION ; EXEC SQL CONNECT TO imdb USER itucs IDENTIFIED BY itucs ; /* process query */ EXEC SQL DISCONNECT ; ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC ¨ gG¨m¨l¨ SQL Orne˘i o uu ¨ Ornek (sorgunun i¸lenmesi) s scanf ( " % d " , & year ); EXEC SQL DECLARE c_query CURSOR FOR SELECT TITLE , SCORE FROM MOVIE WHERE ( YR = : year ); EXEC SQL OPEN c_query ; /* execute query */ EXEC SQL CLOSE c_query ; EXEC SQL COMMIT ; ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC ¨ gG¨m¨l¨ SQL Orne˘i o uu ¨ Ornek (sorgunun ¸alı¸tırılması) c s EXEC SQL WHENEVER NOT FOUND DO break ; while (1) { EXEC SQL FETCH c_query INTO : title , : score ; ... } ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCKonular 1 Uygulama Geli¸tirme s Giri¸ s G¨m¨l¨ SQL o uu ODBC JDBC 2 SQL Kayıtlı Yordamlar G¨r¨nt¨ler ou u ˙ Izinler ˙ cları Ipu¸ ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCODBC ODBC: Open DataBase Connectivity uygulama ile sunucu arasında bir servis katmanı avantajları: standart dezavantajları: yava¸ s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCODBC ODBC: Open DataBase Connectivity uygulama ile sunucu arasında bir servis katmanı avantajları: standart dezavantajları: yava¸ s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCODBC Mimarisi uygulama s¨r¨c¨ y¨neticisi uu u o ODBC s¨r¨c¨lerini kaydeder uu u uygulamadan gelen ODBC isteklerini ilgili s¨r¨c¨ye aktarır uu u s¨r¨c¨ uu u istekleri veri kayna˘ına uygun ¸ekilde iletir g s veri kayna˘ı g s¨r¨c¨den gelen komutları i¸ler uu u s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCODBC Mimarisi uygulama s¨r¨c¨ y¨neticisi uu u o ODBC s¨r¨c¨lerini kaydeder uu u uygulamadan gelen ODBC isteklerini ilgili s¨r¨c¨ye aktarır uu u s¨r¨c¨ uu u istekleri veri kayna˘ına uygun ¸ekilde iletir g s veri kayna˘ı g s¨r¨c¨den gelen komutları i¸ler uu u s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCODBC Mimarisi uygulama s¨r¨c¨ y¨neticisi uu u o ODBC s¨r¨c¨lerini kaydeder uu u uygulamadan gelen ODBC isteklerini ilgili s¨r¨c¨ye aktarır uu u s¨r¨c¨ uu u istekleri veri kayna˘ına uygun ¸ekilde iletir g s veri kayna˘ı g s¨r¨c¨den gelen komutları i¸ler uu u s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCODBC Mimarisi uygulama s¨r¨c¨ y¨neticisi uu u o ODBC s¨r¨c¨lerini kaydeder uu u uygulamadan gelen ODBC isteklerini ilgili s¨r¨c¨ye aktarır uu u s¨r¨c¨ uu u istekleri veri kayna˘ına uygun ¸ekilde iletir g s veri kayna˘ı g s¨r¨c¨den gelen komutları i¸ler uu u s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC ¨ gODBC Orne˘i ¨ Ornek (PHP) $conn = odbc_connect ( " imdb " , " itucs " , " itucs " ); $query = " SELECT TITLE , SCORE FROM MOVIE " . " WHERE ( YR = " . $year . " ) " ; $result = odbc_exec ( $conn , $query ); /* process the result set */ odbc_close ( $conn ); ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC ¨ gODBC Orne˘i ¨ Ornek (sonu¸ k¨mesinin i¸lenmesi) c u s echo " < table > n " ; while ( odbc_fetch_row ( $result )) { $title = odbc_result ( $result , " title " ); $score = odbc_result ( $result , " score " ); echo " <tr > n " ; echo " <td > $title </ td > n " ; echo " <td > $score </ td > n " ; echo " </ tr > n " ; } echo " </ table > n " ; ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCKonular 1 Uygulama Geli¸tirme s Giri¸ s G¨m¨l¨ SQL o uu ODBC JDBC 2 SQL Kayıtlı Yordamlar G¨r¨nt¨ler ou u ˙ Izinler ˙ cları Ipu¸ ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCJDBC JDBC: Java DataBase Connectivity ODBC ile aynı mimari kavramları de˘i¸ik s¨r¨c¨ tipleri gs u u u ba˘lantı i¸in JDBC URL adresi g c jdbc:<altprotokol>:<parametreler> Java ile SQL veri tiplerinin e¸le¸tirilmesi s s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCJDBC JDBC: Java DataBase Connectivity ODBC ile aynı mimari kavramları de˘i¸ik s¨r¨c¨ tipleri gs u u u ba˘lantı i¸in JDBC URL adresi g c jdbc:<altprotokol>:<parametreler> Java ile SQL veri tiplerinin e¸le¸tirilmesi s s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCJDBC JDBC: Java DataBase Connectivity ODBC ile aynı mimari kavramları de˘i¸ik s¨r¨c¨ tipleri gs u u u ba˘lantı i¸in JDBC URL adresi g c jdbc:<altprotokol>:<parametreler> Java ile SQL veri tiplerinin e¸le¸tirilmesi s s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCJDBC JDBC: Java DataBase Connectivity ODBC ile aynı mimari kavramları de˘i¸ik s¨r¨c¨ tipleri gs u u u ba˘lantı i¸in JDBC URL adresi g c jdbc:<altprotokol>:<parametreler> Java ile SQL veri tiplerinin e¸le¸tirilmesi s s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCJDBC S¨r¨c¨leri uu u 1 Tip I: k¨pr¨ler o u ba¸ka sistemlerin ¸a˘rılarına d¨n¨¸t¨r (¨rne˘in ODBC) s c g o us u o g 2 Tip II: Java olmayan bir s¨r¨c¨yle do˘rudan ¸eviri uu u g c veri kayna˘ının uygulama aray¨z¨ne ¸evir (¨rne˘in C++) g u u c o g 3 Tip III: a˘ k¨pr¨leri g o u veri kayna˘ının uygulama aray¨z¨ne ¸evirmesi i¸in g u u c c orta katman yazılımına ba˘lan g 4 Tip IV: Java s¨r¨c¨s¨yle do˘rudan ¸eviri uu uu g c VTYS ile Java soketleri uzerinden ileti¸im kur ¨ s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCJDBC S¨r¨c¨leri uu u 1 Tip I: k¨pr¨ler o u ba¸ka sistemlerin ¸a˘rılarına d¨n¨¸t¨r (¨rne˘in ODBC) s c g o us u o g 2 Tip II: Java olmayan bir s¨r¨c¨yle do˘rudan ¸eviri uu u g c veri kayna˘ının uygulama aray¨z¨ne ¸evir (¨rne˘in C++) g u u c o g 3 Tip III: a˘ k¨pr¨leri g o u veri kayna˘ının uygulama aray¨z¨ne ¸evirmesi i¸in g u u c c orta katman yazılımına ba˘lan g 4 Tip IV: Java s¨r¨c¨s¨yle do˘rudan ¸eviri uu uu g c VTYS ile Java soketleri uzerinden ileti¸im kur ¨ s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCJDBC S¨r¨c¨leri uu u 1 Tip I: k¨pr¨ler o u ba¸ka sistemlerin ¸a˘rılarına d¨n¨¸t¨r (¨rne˘in ODBC) s c g o us u o g 2 Tip II: Java olmayan bir s¨r¨c¨yle do˘rudan ¸eviri uu u g c veri kayna˘ının uygulama aray¨z¨ne ¸evir (¨rne˘in C++) g u u c o g 3 Tip III: a˘ k¨pr¨leri g o u veri kayna˘ının uygulama aray¨z¨ne ¸evirmesi i¸in g u u c c orta katman yazılımına ba˘lan g 4 Tip IV: Java s¨r¨c¨s¨yle do˘rudan ¸eviri uu uu g c VTYS ile Java soketleri uzerinden ileti¸im kur ¨ s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCJDBC S¨r¨c¨leri uu u 1 Tip I: k¨pr¨ler o u ba¸ka sistemlerin ¸a˘rılarına d¨n¨¸t¨r (¨rne˘in ODBC) s c g o us u o g 2 Tip II: Java olmayan bir s¨r¨c¨yle do˘rudan ¸eviri uu u g c veri kayna˘ının uygulama aray¨z¨ne ¸evir (¨rne˘in C++) g u u c o g 3 Tip III: a˘ k¨pr¨leri g o u veri kayna˘ının uygulama aray¨z¨ne ¸evirmesi i¸in g u u c c orta katman yazılımına ba˘lan g 4 Tip IV: Java s¨r¨c¨s¨yle do˘rudan ¸eviri uu uu g c VTYS ile Java soketleri uzerinden ileti¸im kur ¨ s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCJDBC Akı¸ı s bir ba˘lantı nesnesi al g statik: DriverManager.getConnection() → Connection ba˘lantı uzerinde bir komut nesnesi yarat g ¨ Connection.createStatement() → Statement sorguyu ¸alı¸tır c s okuma: Statement.executeQuery(query) → ResultSet ekleme, g¨ncelleme, silme: u Statement.executeUpdate(query) sonu¸ları i¸le c s i¸i biten kaynakları kapat s (sonu¸ k¨mesi, komut, ba˘lantı) c u g ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCJDBC Akı¸ı s bir ba˘lantı nesnesi al g statik: DriverManager.getConnection() → Connection ba˘lantı uzerinde bir komut nesnesi yarat g ¨ Connection.createStatement() → Statement sorguyu ¸alı¸tır c s okuma: Statement.executeQuery(query) → ResultSet ekleme, g¨ncelleme, silme: u Statement.executeUpdate(query) sonu¸ları i¸le c s i¸i biten kaynakları kapat s (sonu¸ k¨mesi, komut, ba˘lantı) c u g ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCJDBC Akı¸ı s bir ba˘lantı nesnesi al g statik: DriverManager.getConnection() → Connection ba˘lantı uzerinde bir komut nesnesi yarat g ¨ Connection.createStatement() → Statement sorguyu ¸alı¸tır c s okuma: Statement.executeQuery(query) → ResultSet ekleme, g¨ncelleme, silme: u Statement.executeUpdate(query) sonu¸ları i¸le c s i¸i biten kaynakları kapat s (sonu¸ k¨mesi, komut, ba˘lantı) c u g ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCJDBC Akı¸ı s bir ba˘lantı nesnesi al g statik: DriverManager.getConnection() → Connection ba˘lantı uzerinde bir komut nesnesi yarat g ¨ Connection.createStatement() → Statement sorguyu ¸alı¸tır c s okuma: Statement.executeQuery(query) → ResultSet ekleme, g¨ncelleme, silme: u Statement.executeUpdate(query) sonu¸ları i¸le c s i¸i biten kaynakları kapat s (sonu¸ k¨mesi, komut, ba˘lantı) c u g ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCJDBC Akı¸ı s bir ba˘lantı nesnesi al g statik: DriverManager.getConnection() → Connection ba˘lantı uzerinde bir komut nesnesi yarat g ¨ Connection.createStatement() → Statement sorguyu ¸alı¸tır c s okuma: Statement.executeQuery(query) → ResultSet ekleme, g¨ncelleme, silme: u Statement.executeUpdate(query) sonu¸ları i¸le c s i¸i biten kaynakları kapat s (sonu¸ k¨mesi, komut, ba˘lantı) c u g ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCSonu¸ların ˙slenmesi c I¸ ResultSet bir yineleyici ba¸ta satır olup olmadı˘ı: ResultSet.hasNext() s g sıradaki satıra ge¸: ResultSet.next() c satırdaki veriyi uygun tiplere d¨n¨¸t¨rerek de˘i¸kenlere aktar o us u gs s¨tunun adıyla: ResultSet.getXXX(name) u s¨tunun sıra numarasıyla: ResultSet.getXXX(order) u ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCSonu¸ların ˙slenmesi c I¸ ResultSet bir yineleyici ba¸ta satır olup olmadı˘ı: ResultSet.hasNext() s g sıradaki satıra ge¸: ResultSet.next() c satırdaki veriyi uygun tiplere d¨n¨¸t¨rerek de˘i¸kenlere aktar o us u gs s¨tunun adıyla: ResultSet.getXXX(name) u s¨tunun sıra numarasıyla: ResultSet.getXXX(order) u ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCVeri Tipi D¨n¨¸umleri o us ¨ SQL tipi Java sınıfı ResultSet metodu BIT Boolean getBoolean() CHAR String getString() VARCHAR String getString() DOUBLE Double getDouble() FLOAT Float getDouble() INTEGER Integer getInt() REAL Double getFloat() DATE java.sql.Date getDate() TIME java.sql.Time getTime() TIMESTAMP java.sql.TimeStamp getTimestamp() ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC ¨ gJDBC Orne˘i ¨ Ornek (veri tabanı s¨r¨c¨s¨n¨n y¨klenmesi) uu uu u u try { Class . forName ( " org . postgresql . Driver " ); } catch ( ClassNo t F o u nd E x c e pt i o n e ) { // PostgreSQL driver not installed } ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC ¨ gJDBC Orne˘i ¨ Ornek (veri tabanına ba˘lantı) g try { Connection conn = DriverManager . getConnection ( " jdbc : postgresql : imdb " , " itucs " , " itucs " ); } catch ( SQLException e ) { // connection error } ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC ¨ gJDBC Orne˘i ¨ Ornek (ekleme) String query = " INSERT INTO MOVIE ( TITLE , YR ) " + " VALUES ( ’ Casablanca ’, 1942) " ; Statement stmt = conn . createStatement (); stmt . executeUpdate ( query ); stmt . close (); ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCHazır Komutlar hazır komutlar parametre de˘erleri de˘i¸tirilerek g gs yeniden kullanılabilir yaratma: Connection.prepareStatement(query) → PreparedStatement sorguda parametreler i¸in yer tutucu: ’?’ c c s ¸alı¸tırmadan ¨nce de˘erleri ayarlanmalı: o g PreparedStatement.setXXX(order, value) c s ¸alı¸tırma: PreparedStatement.executeQuery() ya da PreparedStatement.executeUpdate() ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCHazır Komutlar hazır komutlar parametre de˘erleri de˘i¸tirilerek g gs yeniden kullanılabilir yaratma: Connection.prepareStatement(query) → PreparedStatement sorguda parametreler i¸in yer tutucu: ’?’ c c s ¸alı¸tırmadan ¨nce de˘erleri ayarlanmalı: o g PreparedStatement.setXXX(order, value) c s ¸alı¸tırma: PreparedStatement.executeQuery() ya da PreparedStatement.executeUpdate() ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCHazır Komutlar hazır komutlar parametre de˘erleri de˘i¸tirilerek g gs yeniden kullanılabilir yaratma: Connection.prepareStatement(query) → PreparedStatement sorguda parametreler i¸in yer tutucu: ’?’ c c s ¸alı¸tırmadan ¨nce de˘erleri ayarlanmalı: o g PreparedStatement.setXXX(order, value) c s ¸alı¸tırma: PreparedStatement.executeQuery() ya da PreparedStatement.executeUpdate() ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC ¨ gHazır Komut Orne˘i ¨ Ornek (ekleme - hazır komutla) String query = " INSERT INTO MOVIE ( TITLE , YR ) " + " VALUES (? , ?) " ; PreparedStatement stmt = conn . prepareStatement ( query ); for ( Movie movie : getMovies ()) { stmt . setString (1 , movie . getTitle ()); stmt . setInt (2 , movie . getYear ()); stmt . executeUpdate (); } stmt . close (); ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC ¨ gSonu¸ K¨mesi Orne˘i c u ¨ Ornek (bir yıldaki film ba¸lıklarını listeleme) s String query = String . format ( " SELECT TITLE FROM MOVIE WHERE ( YR = % d ) " , year ); Statement stmt = conn . createStatement (); ResultSet results = stmt . executeQuery ( query ); while ( results . next ()) { String title = results . getString ( " TITLE " ); System . out . println ( " Title : " + title ) , } results . close (); stmt . close (); ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC ¨ gJDBC Orne˘i ¨ Ornek (silme) String query = " DELETE FROM MOVIE " + " WHERE ( ID = ?) " ; PreparedStatement stmt = conn . prepareStatement ( query ); stmt . setInt (1 , movie . getId ()); stmt . executeUpdate (); stmt . close (); ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC ¨ gJDBC Orne˘i ¨ Ornek (g¨ncelleme) u String query = " UPDATE MOVIE SET YR = ? " + " WHERE ( ID = ?) " ; PreparedStatement stmt = conn . prepareStatement ( query ); stmt . setInt (1 , movie . getYear ()); stmt . setInt (2 , movie . getId ()); stmt . executeUpdate (); stmt . close (); ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCKaynakları Kapama sonu¸ k¨mesi, komut gibi kaynakların c u try - catch - finally bloklarının finally kısmında kapatılması ¨nerilir o ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC ¨ gKaynakları Kapatma Orne˘i Statement stmt = conn . createStatement (); ResultSet results = null ; try { results = stmt . executeQuery ( query ); ... } catch ( SQLException e ) { ... } finally { results . close (); stmt . close (); } ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCOtomatik Kimlik De˘erleri g otomatik uretilen kimlik de˘erleri sorulmak isteniyorsa, ¨ g komutu yaratırken RETURN_GENERATED_KEYS bayra˘ı kullanılır g komutu ¸alı¸tırdıktan sonra: c s Statement.getGeneratedKeys() → ResultSet ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC ¨ gOtomatik Kimlik De˘erleri Orne˘i g String query = " INSERT INTO ... " ; PreparedStatement stmt = connection . prepareStatement ( query , Statement . RE T UR N_ G EN E RA TE D _K EY S ); stmt . executeUpdate (); ResultSet ids = stmt . getGeneratedKeys (); // assuming there is one and only one result ids . next (); int id = ids . getInt (1); ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCToplu Komut Calı¸tırma ¸ s komutları biriktirerek topluca ¸alı¸tırmak hız kazandırabilir c s ba˘lantı ” g auto commit” kipinden ¸ıkarılır c biriktirme: Statement.addBatch(query) birikenleri ¸alı¸tırma: Statement.executeBatch() c s yazmayı sonlandırma: Connection.commit() ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBCToplu Komut Calı¸tırma ¸ s komutları biriktirerek topluca ¸alı¸tırmak hız kazandırabilir c s ba˘lantı ” g auto commit” kipinden ¸ıkarılır c biriktirme: Statement.addBatch(query) birikenleri ¸alı¸tırma: Statement.executeBatch() c s yazmayı sonlandırma: Connection.commit() ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC ¨ gToplu Komut Calı¸tırma Orne˘i ¸ s stmt = conn . createStatement ( ... ); conn . setAutoCommit ( false ); int queryCount = 0; int batchSize = 100; for ( ... ) { stmt . addBatch ( query ); queryCount ++; if ( queryCount % batchSize == 0) { stmt . executeBatch (); conn . commit (); } } ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC¨Onceden Okuma Miktarı JDBC s¨r¨c¨leri sorgudaki satırları ¨nceden okur uu u o ba¸arımı artırır ama bellek harcamasını da artırır s k¨¸uk bir ¨nceden okuma miktarı bellek harcamasını azaltır: uc¨ o Statement.setFetchSize(count) ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC¨Onceden Okuma Miktarı JDBC s¨r¨c¨leri sorgudaki satırları ¨nceden okur uu u o ba¸arımı artırır ama bellek harcamasını da artırır s k¨¸uk bir ¨nceden okuma miktarı bellek harcamasını azaltır: uc¨ o Statement.setFetchSize(count) ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Giri¸ s Uygulama Geli¸tirme s G¨m¨l¨ SQL o uu SQL ODBC Kaynaklar JDBC¨ ¨ gOnceden Okuma Miktarı Orne˘i stmt . setFetchSize (1); // MySQL stmt . setFetchSize ( Integer . MIN_VALUE ) ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸Konular 1 Uygulama Geli¸tirme s Giri¸ s G¨m¨l¨ SQL o uu ODBC JDBC 2 SQL Kayıtlı Yordamlar G¨r¨nt¨ler ou u ˙ Izinler ˙ cları Ipu¸ ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸Kayıtlı Yordamlar uygulamanın bazı i¸levleri s veri tabanı sunucusunda ger¸eklenebilir c diller: SQL, PL/SQL, C, ... tavsiye edilmez ta¸ınabilir de˘il s g oc ¨l¸eklenebilir de˘il g veri tabanı sunucuları i¸ mantı˘ına g¨re optimize edilmiyor s g o → i¸ mantı˘ı uygulama sunucusunda ger¸eklenmeli s g c ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸Kayıtlı Yordamlar uygulamanın bazı i¸levleri s veri tabanı sunucusunda ger¸eklenebilir c diller: SQL, PL/SQL, C, ... tavsiye edilmez ta¸ınabilir de˘il s g oc ¨l¸eklenebilir de˘il g veri tabanı sunucuları i¸ mantı˘ına g¨re optimize edilmiyor s g o → i¸ mantı˘ı uygulama sunucusunda ger¸eklenmeli s g c ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸Fonksiyon Yaratma Komut CREATE FUNCTION function_name ([ parameter_type [ , ...]]) RETURNS return_type AS function_body LANGUAGE language_name birinci parametre $1, ikinci parametre $2, ... ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸ ¨ gSQL Fonksiyonu Orne˘i ¨ Ornek (yeni puan hesaplanması) $1: eski puan, $2: eski oy sayısı, $3: yeni oy CREATE FUNCTION NEW_SCORE ( float , int , int ) RETURNS float AS ’ SELECT ( $1 * $2 + $3 ) / ( $2 +1); ’ LANGUAGE ’ sql ’ ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸Tetikler Tanım tetik: belirli olaylarda kendili˘inden etkinle¸tirilen fonksiyon g s b¨t¨nl¨˘u sa˘lamaya yardımcı olabilir u u ug¨ g ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸Tetik Yaratma Komut CREATE TRIGGER trigger_name { BEFORE | AFTER } { event [ OR ... ] } ON table_name [ FOR [ EACH ] { ROW | STATEMENT } ] EXECUTE PROCEDURE function_name (...) PL/pgSQL: old: ¸oklunun i¸lemden ¨nceki de˘eri c s o g new: ¸oklunun i¸lemden sonraki de˘eri c s g ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸ ¨ gTetik Orne˘i ¨ Ornek (SCORE * VOTES de˘eri POINTS s¨tununda tutulsun) g u CREATE FUNCTION UPDA TE_MOVIE _POINTS () RETURNS opaque AS ’ BEGIN new . POINTS = new . SCORE * new . VOTES ; RETURN new ; END ; ’ LANGUAGE ’ plpgsql ’ ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸ ¨ gTetik Orne˘i ¨ Ornek (POINTS s¨tunu g¨ncellemelerde kendili˘inden hesaplansın) u u g CREATE TRIGGER UPDATE_MOVIE BEFORE INSERT OR UPDATE ON MOVIE FOR EACH ROW EXECUTE PROCEDURE UPDA TE_MOVIE _POINTS () ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸Konular 1 Uygulama Geli¸tirme s Giri¸ s G¨m¨l¨ SQL o uu ODBC JDBC 2 SQL Kayıtlı Yordamlar G¨r¨nt¨ler ou u ˙ Izinler ˙ cları Ipu¸ ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸G¨r¨nt¨ler ou u t¨retilmi¸ tabloyu taban tablo gibi g¨stermek u s o veri tabanı yapısındaki de˘i¸ikliklerden gs kullanıcıların ve uygulama programlarının etkilenmemesi ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸G¨r¨nt¨ler ou u t¨retilmi¸ tabloyu taban tablo gibi g¨stermek u s o veri tabanı yapısındaki de˘i¸ikliklerden gs kullanıcıların ve uygulama programlarının etkilenmemesi ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸G¨r¨nt¨ Yaratma ou u Komut CREATE VIEW view_name AS SELECT ... g¨r¨nt¨ uzerindeki her i¸lemde ou u¨ s SELECT komutu yeniden ¸alı¸tırılır c s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸ ou u ¨ gG¨r¨nt¨ Orne˘i ¨ Ornek CREATE VIEW NEW_MOVIE AS SELECT ID , TITLE , YR FROM MOVIE WHERE ( YR > 1995) SELECT * FROM NEW_MOVIE ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸G¨r¨nt¨de G¨ncelleme ou u u g¨ncellemeler taban tablolarda yapılmalı u kural belirtilmeli Kural Yaratma CREATE RULE rule_name AS ON event TO view_name [ WHERE condition ] DO [ INSTEAD ] sql_statement ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸G¨r¨nt¨de G¨ncelleme ou u u g¨ncellemeler taban tablolarda yapılmalı u kural belirtilmeli Kural Yaratma CREATE RULE rule_name AS ON event TO view_name [ WHERE condition ] DO [ INSTEAD ] sql_statement ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸ ¨ gG¨r¨nt¨ Kuralı Orne˘i ou u ¨ Ornek UPDATE NEW_MOVIE SET TITLE = ’ .. ’ WHERE ( ID = 1) CREATE RULE UPDATE_TITLE AS ON UPDATE TO NEW_MOVIES DO INSTEAD UPDATE MOVIE SET TITLE = new . TITLE WHERE ( ID = old . ID ) ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸ ¨ gG¨r¨nt¨ Kuralı Orne˘i ou u ¨ Ornek UPDATE NEW_MOVIE SET TITLE = ’ .. ’ WHERE ( ID = 1) CREATE RULE UPDATE_TITLE AS ON UPDATE TO NEW_MOVIES DO INSTEAD UPDATE MOVIE SET TITLE = new . TITLE WHERE ( ID = old . ID ) ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸Konular 1 Uygulama Geli¸tirme s Giri¸ s G¨m¨l¨ SQL o uu ODBC JDBC 2 SQL Kayıtlı Yordamlar G¨r¨nt¨ler ou u ˙ Izinler ˙ cları Ipu¸ ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸˙Izinler ¨zne: kullanıcı, kullanıcı grubu o nesne: tablo, s¨tun, g¨r¨nt¨, veri tabanı, ... u ou u nesnenin sahibi olan ¨zne o di˘er ¨znelerin eri¸im yetkilerini belirler g o s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸˙Izinler ¨zne: kullanıcı, kullanıcı grubu o nesne: tablo, s¨tun, g¨r¨nt¨, veri tabanı, ... u ou u nesnenin sahibi olan ¨zne o di˘er ¨znelerin eri¸im yetkilerini belirler g o s ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸SQL ˙ Izinleri ˙ Izin Verme GRANT permission_name [ , ...] ON object_name TO subject_name [ WITH GRANT OPTION ] ˙ Izin Kaldırma REVOKE permission_name ON object_name FROM subject_name ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸SQL ˙ Izinleri ˙ Izin Verme GRANT permission_name [ , ...] ON object_name TO subject_name [ WITH GRANT OPTION ] ˙ Izin Kaldırma REVOKE permission_name ON object_name FROM subject_name ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸˙ OrnekleriIzin ¨ ¨ Ornek (tablo i¸in izin verme) c GRANT SELECT , INSERT , UPDATE ON MOVIE TO ’ itucs ’ ¨ Ornek (tablo i¸in izin kaldırma) c REVOKE INSERT ON MOVIE FROM ’ itucs ’ ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸˙ OrnekleriIzin ¨ ¨ Ornek (tablo i¸in izin verme) c GRANT SELECT , INSERT , UPDATE ON MOVIE TO ’ itucs ’ ¨ Ornek (tablo i¸in izin kaldırma) c REVOKE INSERT ON MOVIE FROM ’ itucs ’ ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸Konular 1 Uygulama Geli¸tirme s Giri¸ s G¨m¨l¨ SQL o uu ODBC JDBC 2 SQL Kayıtlı Yordamlar G¨r¨nt¨ler ou u ˙ Izinler ˙ cları Ipu¸ ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸Dizinler bazı i¸lemler sıralama gerektirir: s ORDER BY, DISTINCT, GROUP BY, UNION, ... dizinler aramaları hızlandırır ekleme ve g¨ncellemeleri yava¸latır u s Komut CREATE [ UNIQUE ] INDEX index_name ON table_name ( column_name [ , ...]) ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸Dizinler bazı i¸lemler sıralama gerektirir: s ORDER BY, DISTINCT, GROUP BY, UNION, ... dizinler aramaları hızlandırır ekleme ve g¨ncellemeleri yava¸latır u s Komut CREATE [ UNIQUE ] INDEX index_name ON table_name ( column_name [ , ...]) ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸Dizinler bazı i¸lemler sıralama gerektirir: s ORDER BY, DISTINCT, GROUP BY, UNION, ... dizinler aramaları hızlandırır ekleme ve g¨ncellemeleri yava¸latır u s Komut CREATE [ UNIQUE ] INDEX index_name ON table_name ( column_name [ , ...]) ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸Toplu Veri Aktarımı satırları tek tek eklemek ya da silmek yerine ur¨ne ¨zel toplu veri aktarımı komutları kullanılmalı ¨u o tab ile ayrılmı¸ de˘er dosyaları ile okuma-yazma s g ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸Toplu Veri Aktarımı PostgreSQL COPY table_name ( column_name [ , ...]) TO ’ output_file_path ’ COPY table_name ( column_name [ , ...]) FROM ’ input_file_path ’ ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Kayıtlı Yordamlar Uygulama Geli¸tirme s G¨r¨nt¨ler ou u SQL ˙ Izinler Kaynaklar ˙ cları Ipu¸Toplu Veri Aktarımı MySQL SELECT column_name [ , ...] FROM table_name INTO OUTFILE ’ output_file_path ’ LOAD DATA INFILE ’ input_file_path ’ INTO TABLE table_name ( column_name [ , ...]) ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri
    • Uygulama Geli¸tirme s SQL KaynaklarKaynaklar Okunacak: Date Chapter 4: An Introduction to SQL 4.6. Embedded SQL Chapter 9: Integrity 9.11. Triggers (a Digression) Chapter 10: Views Yardımcı Kaynak: Ramakrishnan, Gehrke Chapter 6: Database Application Development ¸ ¨ g¨ u u H. Turgut Uyar, Sule O˘ud¨c¨ Veri Tabanı Sistemleri