Java ilə Oracle bazasına qoşulmaq
Bu yazıda Oracle bazasına qoşulan nümunə bir proqramın yazılmasına baxacıq.
İstifadə etdiyimiz proqram təminatı bunlardır:
1.Netbeans 6.7 + Java SDK 1.6
2.Oracle Express Edition universal
Proqram aşağıdakı hissələrdən ibarətdir:
1.Oracle bazasına qoşulmaq
2.Məlumat oxumaq
Java ilə verilənlər bazasına qoşulmaq üçün JDBC (Java Database Connectivity) texnologiyası istifadə olunur. Əvvəlcə qoşulmaq istədiyimiz verilənlər bazasına uyğun olan JDBC drayveri əldə etmək lazımdır. Oracle JDBC drayverini aşağıdakı saytdan yükləmək olar.
http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html
JDBC Driver Downloads siyahısından Oracle bazasının müxtəlif versiyalarına uyğun drayverlər verilmişdir, ən yeni olan Oracle Database 11g Release 2 (11.2.0.1.0) üçün drayveri yükləyək, çünki əvvəlki bütün versiyalar ilə uyğundur. 2-ci səhifədə yuxarıda “Accept License Agreement” seçib lisenziya razılaşmasını qəbul edin və siyahıda 1-ci olan ojdbc5.jar faylını yükləyirik. Əgər Oracle saytına login olmamısınızsa, onda istifadəçi adı və şifrəni soruşacaq. OTN-də qeydiyyatdan keçmisinizsə, istifadəçi adını və şifrənizi yazın, daxil olun, drayveri yükləyin. Əks halda sign up now səhifəsinə gedib qeydiyyatdan keçin, avtomatik olaraq drayveri yükləmə səhifəsinə qayıdacaqsınız.
Netbeansdə yeni java proyekti yaradın.
2-ci səhifədə proyektin adını, yerini seçin, istifadə edəcəyimiz kitabxanaları ayrı qovluqda saxlamaq üçün “Use dedicated folder for storing libraries” seçin və finish düyməsinə vurun.
Yüklədiyimiz Oracle drayveri Netbeansdə qlobal kitabxana kimi əlavə edək, bu halda onu digər proyektlərdə də istifadə etmək olar.
Bunun üçün Tools menyusundan Libraries seçin.
Sol tərəfdə aşağıdakı “New Library” düyməsinə vurun və açılan pəncərədə Oracle_JDBC_Driver yazın.
Kitabxanamız sol tərəfdəki siyahıya əlavə ediləcək, onu seçib sağ tərəfdəki Add JAR/Folder düyməsinə vurun, yüklədiyimiz ojdbc5.jar faylını seçin və OK düyməsinə vurun. Oracle JDBC drayveri artıq qlobal kitabxana olaraq əlavə elədik.
Əlavə etdiyimi kitabxananı proyektə əlavə etmək üçün Windows menyusundan Projects seçin, sol tərəfdə Netbeansdəki proyektlərin siyahısı görünəcək, buradan proyektimizi seçirik, onun Libraries qovluğu üzərində sağ düyməni vurun, kontekst menyudan Add Library seçirik.
Açılan pəncərədən İmport düyməsinə vurub qlobal kitabxanaların siyahısında Oracle_JDBC_Driver seçirik, sıra ilə İmport Library və Add Library düymələrinə vururuq, nəticədə Oracle drayver proyektə əlavə olundu.
Əvvəldən qeyd edim ki, Oracle-ın nümunə istifadəçisi olan HR ilə qoşulub, ona aid Employees cədvəli ilə işləyəcik (istifadəçi adı və şifrə hr)
Əvvəlcə proqramın tam mətnini göstərib, daha sonra onun üzərində izah edim.
package jdbcdemo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Main { public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { Class.forName("oracle.jdbc.OracleDriver"); String url = "jdbc:oracle:thin:@localhost:1521:XE"; String username="hr"; String password="hr"; connection = DriverManager.getConnection(url, username, password); String sql = "select employee_id, first_name, last_name, salary from employees"; preparedStatement = connection.prepareStatement(sql); resultSet = preparedStatement.executeQuery(); while(resultSet.next()) { long id = resultSet.getLong("employee_id"); String firstName = resultSet.getString("first_name"); String lastName = resultSet.getString("last_name"); System.out.println("" + id + " " + firstName + " " + lastName); } } catch (ClassNotFoundException ex) { System.out.println("Oracle jdbc driver yuklenmedi"); ex.printStackTrace(); } catch (SQLException ex) { System.out.println("Baza ile elaqeli problem var"); ex.printStackTrace(); } finally { try { resultSet.close(); preparedStatement.close(); connection.close(); } catch(SQLException ex) {} } } }
İndi isə proqramı hissə hissə başa salım.
Class.forName("oracle.jdbc.OracleDriver");
Oracle drayveri yaddaşa yükləyir, əgər drayver tapılmasa, bu halda ClassNotFoundException xətası yaranacaq, onu try-catch bloku ilə tutub istifadəçiyə xəta mesajı göstərmək lazımdır.
String url = "jdbc:oracle:thin:@localhost:1521:XE";<br /> String username="hr";<br /> String password="hr";<br /> connection = DriverManager.getConnection(url, username, password);
Bu hissədə Oracle bazaya qoşuluruq.
Qoşulma sətrinin formatı belədir: jdbc:oracle:thin:@Oracle_Server:PORT:ORACLE_SERVİS_ADI
Bizim proyektdə ORACLE_SERVER=localhost yazılıb, çünki Oracle eyni işləyir, əgər başqa kompüterdə yüklü olan Oracle serverə qoşulmaq istəyiriksə, bu halda ya onun İP adresini, ya da şəbəkədəki adını yazmaq lazımdır.
Port = 1521, əgər dəyişiklik edilməyibsə, Oracle server avtomatik olaraq 1521-ci portdan gələn sorğuları qəbul edir.
ORACLE_SERVİS_ADI=XE, bir serverdə birdən çox Oracle baza qurulu ola bilər, onların hər birinin ayrı servis adı ilə işləyir, bu misalda servis adı=XE
Qoşulmaq üçün DriverManager sinifinin getConnection metodu istifadə olunur, ona parametr olaraq qoşulma sətri, istifadəçi adı və şifrə göndərilir. Əgər qoşulma zamanı hər hansı bir xəta baş versə, bu halda SQLException xətası yaranacaq və onu try-catch bloku ilə tutub, istifadəçiyə uyğun xəta mesajı göstərmək lazımdır.
String sql = "select employee_id, first_name, last_name, salary from employees"; preparedStatement = connection.prepareStatement(sql); resultSet = preparedStatement.executeQuery();
Burada sadə bir SQL sorğusu verilib, işçilərin kodunu, ad, soyadını və maaşını öyrənmək istəyirik.
PreparedStatement sinifini ilə bazaya istənilən sorğunu göndərmək mümkündür, executeQuery metodu ilə bazaya select sorğusu göndərmək olur.
executeQuery metodu cavab olaraq resultSet obyekti qaytarır və bu obyektdə cədvəldən seçdiyimiz məlumatlar saxlanılıb.
while(resultSet.next()) { long id = resultSet.getLong("employee_id"); String firstName = resultSet.getString("first_name"); String lastName = resultSet.getString("last_name"); System.out.println("" + id + " " + firstName + " " + lastName); }
Bu kod blokunda isə resultSet obyektindən məlumatları oxuyub konsolda göstəririk.
Ən sonda isə finally bloku ilə resultSet, preparedStatement və connection obyektlərini bağlayıb, baza ilə əlaqəni kəsirik.
finally { try { resultSet.close(); preparedStatement.close(); connection.close(); } catch(SQLException ex) {} }
Yazının sonuna gəldik, ümid edirəm ki, hər şey aydın oldu. Qaranlıq qalan məqamlar üçün şərh yazmaqdan çəkinməyin.
Proyektin tam versiyasını buradan yükləyə bilərsiniz.
Proyektin tam variantı
Zip faylının yüklənməsinə icazə verilmədiyinə görə faylın adını jdbdemo.doc olaraq dəyişdim, odur ki, kompüterinizə yüklədikdən sonra jdbcdemo.zip olaraq dəyişin.
Boxca.com-dan yükləmək üçün http://www.boxca.com/vkyeegmu6fkh/JdbcDemo.zip.html
Bazaya məlumat yazmaq, dəyişmək və silmək növbəti yazılarda olacaq.
Uğurlar!
Hardasa C#-daki ile eynidir. Bir connection.Open() yoxdur.
Xoshuma gelen terefi PreparedStatement,ResultSet ile butun SQL bazalarina sorgu gonderib,cavab ala bilirsen. C#-da heresi uchun ayridir. Bi de VS2010 Beta System.Data.OracleClient-i desteklemir :(((
Xalid
25 Yanvar 2010
Oracle-ın ODP.NET-i daha yaxşıdır.
Bilməyənlər üçün ODP.NET = Oracle Data Provider for .NET
http://www.oracle.com/technology/tech/windows/odpnet/index.html
Ramin Orucov
26 Yanvar 2010
.NET ancag microsoftun productlari ile isleye biler(
mecid
1 Fevral 2010
Konkret olaraq C# ilə Oracle və MySQL bazalarına qoşulmuşam, heç bir problem yoxdur.
Bir də Mono proyekti var, Unix, Linux üçün .NET framework yazıblar.
http://mono-project.com/What_is_Mono
http://en.wikipedia.org/wiki/Mono_%28software%29
Ramin Orucov
1 Fevral 2010
Belə bir blog açdığınıza görə sizə təşəkkür edirəm.
Bazaya qoşulmaq istədiyimdə belə bir xəta çıxır :
java.sql.SQLException: ORA-01017: invalid username/password; logon denied
Alekber
24 Mart 2010
Çox sağ olun.
Oracle-a qoşularkən səhv istifadəçi adı və ya şifrə vermisiniz, zəhmət olmasa onu dəqiqləşdirin.
Ramin Orucov
24 Mart 2010
məlumatların çox xeyri oldu təşəkkürlər
rauf
7 Aprel 2010
[…] Salam, Bu dərsdə: 1.JDBC vasitəsilə JavaDB-yə qoşulmaq və əvvəlki dərsdə yaratmış olduğumuz kiçik table-a SELECT vermək. 2.Proyektə JDBC Driver(lər) necə əlavə olunur. 3.Kodu yazarkən qarşımıza çıxa bilən error-ların bəziləri də- göstərilmişdir. Koda kiçik dəyişiklər etməklə istənilən növ Java-nın dəstəklədiyi DBMS-ə qoşula bilərik. Sadəcə qoşulmaq istədiyimiz bazaya uyğun Driver-i əlavə etmək lazımdır. Məsələn, Oracle-a qoşulmaq haqqında dərs: Oracle-a qoşulmaq […]
JDBC vasitəsilə JavaDB-yə qoşulmaq « Rzayev Şəhriyar's Programming Blog
18 Aprel 2010
JPA istifade etmek daha meslehetlidir. JDBC kohne texnologiyadir artiq ve zulmdur
Hilal
14 İyul 2010
Təzə proyektlər üçün JPA və ya Hibernate ola bilər, amma əlimdəki mövcud neçə illik köhnə proyektlər JDBC ilədir, onlar da çoxlu sayda PL/SQL prosedur ve funksiya istifadə edir, ona görə də JDBC istifadə etmək lazımdır. JDBC + iBatis + Spring kombinasiyası daha yaxşıdır.
Ramin Orucov
14 İyul 2010
Spring de kohne texnologiyadir 🙂 infoq.com bu sehifeni meslehet gorerdim follow elemeye. JSF kitabxanalar tam oturmasa da uje istifade edilmeye baslanildi
Hilal
14 İyul 2010
İnsaf yaxşı şeydi, Spring 3.0 köhnə texnologiya deyil axı 🙂 İnfoq.com-u izləyirəm, maraqlı yazılar, videolar olur.
JSF 2.0 tətbiq etmək barədə fikirləşirəm, PrimeFaces və Oracle ADF Faces xoşuma gəlir 🙂
Ramin Orucov
14 İyul 2010
http://www.netobjectives.com/resources/webinars
Hilal
15 İyul 2010
Təşəkkürlər!!!
Ramin Orucov
15 İyul 2010
Salam. Sizcə “DataSource using JNDI” nə dərəcədə yaxşı texnoogiyadı baza ilə işləmək üçün?
Vasif
8 Avqust 2010
Sun Microsystems şirkəti hər yerdə DriverManager yerinə DataSource istifadə etməyi tövsiyə edir. JNDİ ilə bir dəfə mərkəzi şəkildə datasource resurslarını təyin edib idarə etmək daha asandır.
Ramin Orucov
10 Avqust 2010
tewekkur.
Vasif
10 Avqust 2010
[…] Ramin Orocuv – Java ilə Oracle bazasına qoşulmaq […]
OracleDatasource istifadə edərək bazaya qoşulmaq « Java Programming Blog
22 Sentyabr 2010
Tewekkurler Ramin heqiqeten cox gozel ve aydin formada yazilib. Minnetdaram
Gurban Adigozalov
20 Oktyabr 2010
Teshekkurler Ramin muellim…
Mende sadece olsun ORACLE servis adi SID=XE’den ferqli olaraq bildiyiniz kimi scolfield’dir 🙂
ZAUR
24 Dekabr 2010
[…] Java ilə Oracle bazasına qoşulmaq January 201020 comments and 1 Like on WordPress.com, 5 […]
Bye bye 2010, welcome 2011 :) « Ramin Orucovun Java və Oracle bloqu
3 Yanvar 2011
Cox sagolun Ustad cox yaxwi izah vermisiniz. Yeni baslayanlar ucun deyerli melumatlardir.
Irkan
17 Fevral 2012