Java ilə Oracle bazasına məlumat yazmaq, dəyişmək və silmək

Posted on 1 Fevral 2010. Filed under: Java, JDBC, Oracle | Etiketlər: , , , , , , , |


Əvvəlki Java ilə Oracle bazasına qoşulmaq yazısında Oracle bazasına qoşulan sadə bir Java proqramının yazılmasına baxmışdıq.
Bu yazıda isə onun davamı olaraq Java ilə Oracle bazasına məlumat yazmaq, dəyişmək və silmək əməliyyatlarını nümunə proqram üzərində göstərəcəm.
Yenə HR sxemasındakı EMPLOYEES cədvəlini istifadə olunacaq. Oracle bazasına qoşulmaq üçün Oracle SQL Developer 2.1 proqramı istifadə olunacaq. Məqsədim, mümkün qədər open source və pulsuz proqramları istifadə etməkdir. Proqramı http://www.oracle.com/technology/software/products/sql/index.html səhifəsindən yükləyin.

Əvvəlcə SQL Developer ilə Oracle bazaya qoşulaq.

Yeni əlaqə yaratmaq

Yeni əlaqə yaratmaq

EMPLOYEES cədvəlinin strukturuna baxaq.

Employees cədvəlinin strukturu

EMPLOYEES cədvəlini üzərində olan məhdudiyyətlərə (constraints) baxaq.

Employees cədvəli üzərində təyin olunmuş məhdudiyyətlər (constraints)

Employees cədvəli üzərində təyin olunmuş məhdudiyyətlər (constraints)

Şəkildən göründüyü kimi bu cədvəl üçün 10 məhdudiyyət  təyin edilib. Buradakı məhdudiyyət (constraint) obyektlərinin adlandırılması ilə bağlı qısa şərh versəm, onları başa düşmək daha asan olacaq.

PK – Primary key – təkrarlana və boş ola bilməz, sətri digərlərindən fərqləndirən açardır.

FK – Foreign key – təkrarlana bilər, sütünu başqa cədvəldəki bir sütün ilə əlaqələndirmək üçündür.

UK – Unique key – təkrarlana bilməz, amma boş ola bilər.

NN – Not null –  sütun boş ola bilməz.

EMP_ – employees cədvəlinin qısa adını göstərir.

Employees cədvəli üzərində təyin edilmiş məhdudiyyət obyektləri və onların açıqlaması:

1. EMP_EMP_ID_PK –  employee_id sütunu primary key olaraq təyin edilib.

2. EMP_DEPT_FK – deparment_id sütunu foreign key olaraq təyin edilib və Departments cədvəlindəki department_id ilə əlaqəlidir.

3. EMP_JOB_FK – job_id sütünu foreign key olaraq təyin edilib və – Jobs cədvəlindəki job_id ilə əlaqəlidir.

4. EMP_MANAGER_FK – manager_id sütünu foreign key olaraq təyin edilib və Employees cədvəlindəki employee_id ilə əlaqəlidir, menecer özü də bir işçidir.

5. EMP_EMAIL_UK – email sütünu unique key olaraq təyin edilib, unikal olmalıdır, təkrarlana bilməz, bütün işçilərin email adresi fərqli olmalıdır.

6. EMP_EMAIL_NN – email sütünu üçün not null şərti qoyulub, boş ola bilməz (“EMAIL” IS NOT NULL).

7. EMP_LAST_NAME_NN – last_name sütünu üçün not null şərti qoyulub, boş ola bilməz (“LAST_NAME” IS NOT NULL).

8. EMP_HIRE_DATE_NN – hire_date sütünu üçün not null şərti qoyulub, boş ola bilməz (“HIRE_DATE” IS NOT NULL).

9. EMP_JOB_NN – job_id sütünu üçün not null şərti qoyulub, boş ola bilməz (“HIRE_DATE” IS NOT NULL).

10. EMP_SALARY_MIN – salary sütünu üçün müsbət ədəd olma şərti qoyulub, 0 və mənfi ədəd ola bilməz (salary > 0).

Employees cədvəlinə yeni işçi haqda məlumat əlavə etmək üçün məcburi olan (not null şərti olmayan) sahələr aşağıdakılardır:

1.Employee_id

2.Last_name

3.Email

4.Hire_date

5.Job_id

Aşağıdakı nümunə Java proqramında Employees cədvəlinə yeni işçi haqda məlumat daxil etmək,  onu oxumaq, məlumatlarını dəyişmək və silmək əməliyyatları göstərilmiş, həmçinin lazımi yerlərdə şərhlər yazılmışdır.

package jdbcdemo2;

import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.Properties;

/**
*
* @author Ramin Orujov
*/
public class Main {
private static String url;
private static String driver;
private static String username;
private static String password;

public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
String sql = “”;

try {
// bazaya qoşulmaq üçün ıazımi məlumatları konfiqurasiya faylında oxu
loadConfiguration();

// Oracle JDBC drayveri yüklə
Class.forName(driver);
// Bazaya qoşul
connection = DriverManager.getConnection(url, username, password);

// Yeni isci elave etmek
long id = 0;
String firstName = “Əli”;
String lastName = “Əliyev”;
String email = “ali@yahoo.com”;
double salary = 2000.0;
String job = “IT_PROG”;
Date hireDate = new Date(); // bu gunku tarix

// Yeni işçi əlavə etmək üçün SQL sorğusu
// ? işarələri parametrləri göstərir, sırasına uyğun olaraq məlumatları vermək lazımdır.
sql = “insert into employees(employee_id, first_name, last_name, email, hire_date, job_id, salary) ” +
” values(employees_seq.nextval, ?, ?, ?, ?, ?, ?)”;
preparedStatement = connection.prepareStatement(sql);
// 1-ci parametr (? işarəsi) ad
preparedStatement.setString(1, firstName);
// 2-ci parametr (? işarəsi) soyad
preparedStatement.setString(2, lastName);
// 3-cü parametr (? işarəsi) email adresi
preparedStatement.setString(3, email);
// 4-cü parametr (? işarəsi) işə qəbul tarixi
// java.util.Date obyektini java.sql.Date obyektine cevirmek lazimdir
preparedStatement.setDate(4, convert(hireDate));
// 5-ci parametr (? işarəsi) vəzifə kodu
preparedStatement.setString(5, job);
// 6-cı parametr (? işarəsi) maaş
preparedStatement.setDouble(6, salary);

// sql sorğusunu işlədirik, dəyişiklik edilmiş sətir sayını yoxlayırıq
int count = preparedStatement.executeUpdate();
if (count == 1) {
// 1 sətir əlavə edildi, deməli insert uğurlu oldu
System.out.println(“Yeni isci elave edildi”);
} else {
// əks halda məlumat cədvələ əlavə edilmədi
System.out.println(“Problem! Yeni isci elave edilmedi”);
}

// Əlave etdiyimiz işçini ad və soyadına görə tapıb oxumaq
sql = “select employee_id, first_name, last_name, email, hire_date, salary from employees where first_name=? and last_name=?”;
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, firstName);
preparedStatement.setString(2, lastName);
resultSet = preparedStatement.executeQuery();

// Əgər resultset obyektində məlumat varsa, onu oxu
if(resultSet.next()) {
id = resultSet.getLong(“employee_id”);
firstName = resultSet.getString(“first_name”);
lastName = resultSet.getString(“last_name”);
// java.sql.Date obyektini java.util.Date obyektine cevirmek lazimdir
hireDate = convert(resultSet.getDate(“hire_date”));
salary = resultSet.getDouble(“salary”);
System.out.println(“Id = ” + id);
System.out.println(“Employee = ” + firstName + ” ” + lastName);
System.out.println(“Hire date ” + hireDate + ” ” + salary);
System.out.println(“Salary ” + salary);
}

// İşçinin maaşını 20% artırmaq üçün update sorğusu
sql = “update employees set salary=1.2*salary where employee_id=?”;
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setLong(1, id);
count = preparedStatement.executeUpdate();
if (count == 1) {
System.out.println(“Iscinin maasi 20% artirildi”);
} else {
System.out.println(“Problem! Iscinin maasi artirilmadi”);
}

// İşcini silmək üçün SQL sorğusu
sql = “delete employees where employee_id=?”;
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setLong(1, id);
count = preparedStatement.executeUpdate();
if (count == 1) {
System.out.println(“Isci bazadan silindi”);
} else {
System.out.println(“Problem! Isci bazadan silinmedi”);
}

} catch (IOException ex) {
System.out.println(“Konfiqurasiya faylini oxumaqda problem var”);
} 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) {}
}
}

// bazaya qosulmaq ucun lazimi melumatlari konfiqurasiya faylinda oxumaq
private static void loadConfiguration() throws IOException{
Properties config = new Properties();
config.load(new FileReader(“database.properties”));
url = config.getProperty(“jdbc.url”);
driver = config.getProperty(“jdbc.driver”);
username = config.getProperty(“jdbc.username”);
password = config.getProperty(“jdbc.password”);
}

// java.sql.Date obyektini java.util.Date obyektine cevirmek
private static java.util.Date convert(java.sql.Date sqlDate) {
return new java.util.Date(sqlDate.getTime());
}

// java.util.Date obyektini java.sql.Date obyektine cevirmek
private static java.sql.Date convert(java.util.Date javaDate) {
return new java.sql.Date(javaDate.getTime());
}
}

Netbeansdə hazırlanmış proyektin tam versiyasını buradan yükləyə bilərsiniz.
1. Boxca.com-dan JdbcDemo2 proyekti
2. Əlavədən JdbcDemo2 proyekti (fayl adını .zip olaraq dəyişin).

Aydın olmayan məqamlar üçün suallarınızı və istədiyiniz başqa mövzular üçün təkliflərinizi şərh olaraq yazın.

Uğurlar!

Make a Comment

Bir cavab yazın

Sistemə daxil olmaq üçün məlumatlarınızı daxil edin və ya ikonlardan birinə tıklayın:

WordPress.com Loqosu

WordPress.com hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Twitter rəsmi

Twitter hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Facebook fotosu

Facebook hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Google+ foto

Google+ hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

%s qoşulma

8 Cavab to “Java ilə Oracle bazasına məlumat yazmaq, dəyişmək və silmək”

RSS Feed for Ramin Orucovun Java və Oracle bloqu Comments RSS Feed

Eşq olsun Raminə!
Uğurlar sənə!!!

Çox sağ ol, Cavid! Sən nə vaxt bloq açıb yazırsan?🙂

Ela cuvakj men shadam ki nehayet azerbaycan dilinde de bele bir blog yarandi yeri gelmishken xakerski fichlerden de nese izah edeceksen?

Təşəkkür edirəm! Java web proyektlərində və Oracle PL/SQL proqramlarında təhlükəsizlik ilə bağlı yazılar var planımda!
Əsas təhlükəsizlik problemləri və onların həlli (SQL injection, XSS, CSRF və s.) ilə bağlı araşdırmalar aparıram, inşallah onlara aid maraqlı yazılar yazacam. Bloq üçün fundamental anlayışlardan başladım, getdikcə orta və yüksək səviyyəli texnologiyalar haqda olacaq. Həmçinin oxuyucuların da maraqlarını və təkliflərini nəzərə almağa çalışacam.
Hər şey daha da maraqlı olacaq🙂

Salam Ramin muellim. tableset classinin jar-ni calisdiriram amma error verir
could not find the main class: tableset.Main. Program will exit.
Zehmet olmasa komek ederdiniz

Əleykə salam. Dediyiniz tableset classı hardansa götürmüsüz? Bəlkə onu proyektlə library kimi əlavə edib istifadə etmək lazımdır? Daha ətraflı məlumat lazımdı, belə dəqiq nəsə demək çətindir.

Ramin muellim sql bir table-dir. jdbc ile javada calisdiriram.Calisir. sonra clean and build edib jar-in calisdirirdim.

Onda yəqin ki, problem JAR faylının özündədir, mümkünsə proyekti mənə göndərin baxım.


Where's The Comment Form?

    Haqqında

    Java ilə obyekt yönlü proqramlaşdırma, Java web proqramlaşdırma, Oracle SQL, PL/SQL proqramlaşdırma, optimallaşdırma

    RSS

    Subscribe Via RSS

    • Subscribe with Bloglines
    • Add your feed to Newsburst from CNET News.com
    • Subscribe in Google Reader
    • Add to My Yahoo!
    • Subscribe in NewsGator Online
    • The latest comments to all posts in RSS

    Meta

Liked it here?
Why not try sites on the blogroll...

%d bloqqer bunu bəyənir: