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!

Advertisements
Tam Yazını Oxu | Make a Comment ( 8 so far )

    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...