13-LABORATORIYA ISHI
Mavzu: Tarmoqda ma’lumotlar bazasini yaratish
Ishning maqsadi:
Talabalarda Java dasturlash tilining java.sql.* paketi klasslaridan foydalanib ma’lumotlar bazasi bilan ishlovchi tarmoq dasturini yaratish bo‘yicha ko‘nikmalar hosil qilish.
Nazariy qism:
Har bir drayver tomonidan amalga oshiriladigan uchta interfeys yordamida ma’lumotlar bazasi bilan o‘zaro bog‘lanish mumkin:
- Statement;
Ushbu interfeys ma’lumotlar bazasiga umumiy maqsadlarda murojaat qilish uchun ishlatiladi. Dastur ishlayotganda statik SQL ifodalarini ishlatganda juda foydalidir. Ushbu interfeys hech qanday parametrlarni qabul qilmaydi.
- PreparedStatement;
Ushbu interfeys SQL ifodalarini bir necha marta ishlatmoqchi bo‘lganimizda foydalaniladi. Dastur ishlayotganida parametrlarni qabul qiladi.
- CallableStatement;
Ushbu interfeys turli ma’lumotlar bazasi protseduralariga murojaat qilishni xohlaganimizda foydali bo‘ladi. Bundan tashqari, dastur ishlayotgan vaqtda parametrlarni kiritish mumkin.
Statement ekzemplyarini yaratish.
SQL so‘rovlarini bajarish uchun Statement ekzemplyarini ishlatishdan oldin shunday ekzemplyarni yaratish lozim. Buning uchun Connection.createStatement() metodi ishlatiladi. Kodda bu quyidagicha ko‘rinadi:
try {
statement =connection.createStatement();
} catch (SQLException e) {
e.printStackTrace();
} finally {
/*Do some job...*/
} Shundan so‘ng SQL so‘rovlarini bajarish uchun statement ekzemplyaridan foydalanish mumkin.
Buning uchun Statement interfeysi har bir JDBC drayverini amalga oshirilishi orqali ishlatiladigan uchta usulga ega:
- boolean execute(String SQL)
ResultSet obyekti olinishi mumkin bo‘lsa, bu metod rost mantiqiy qiymatini qaytaradi. Aks holda, yolg‘on qaytaradi. DDL SQL so‘rovlarini yoki dinamik SQL bajarish uchun ishlatiladi.
- int executeUpdate(String SQL)
Ushbu metod, SQL so‘rovi ta’sir qilgan jadvaldagi ustunlar sonini qaytaradi. Ma’lum ustunlar sonini olishni xohlasak, SQL so‘rovlarni bajarish uchun ushbu metoddan foydalanamiz.
- ResultSet executeQuery(String SQL)
Ushbu metod ResultSet ekzemplyarini qaytaradi. Ushbu metoddan SQL so‘rovini bajarish natijasida ko‘p obyektlar olishimiz kerak bo‘lgan hollarda foydalanamiz. Misol uchun, muayyan shartlarga javob beradigan elementlar ro‘yxatini olishda.
Statement ekzemplyarini yopish.
Natijalarni ma’lumotlar bazasiga saqlash uchun ulanishni yopganda, Statement ekzemplyari ham xuddi shu tarzda yopiladi.
Buning uchun close() metodi qo‘llaniladi.
Koddagi ko‘rinishi:
Connection connection = null;
Statement statement = null;
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL, USER, PASSWORD);
try {
statement = connection.createStatement();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (statement != null) {
statement.close(); }
}
Amalda qanday ishlashini tushunish uchun ma’lumotlar bazasidan ma’lumotlarni olishga harakat qiladigan oddiy dasturni ko‘rib chiqiladi.
Misol:
package jdbc;
import java.sql.*;
public class StatementDemo {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DATABASE_URL = "jdbc:mysql://localhost/talaba";
static final String USER = "root";
static final String PASSWORD = "admin";
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Connection connection = null;
Statement statement = null;
System.out.println("JDBC drayverni ro‘yxatdan o‘tkazish...");
Class.forName(JDBC_DRIVER);
System.out.println("Ma’lumotlar bazasiga bog‘lanish...");
connection = DriverManager.getConnection(DATABASE_URL, USER, PASSWORD);
System.out.println("So‘rov yaratish...");
statement = connection.createStatement();
String sql = "SELECT * FROM developers";
Boolean isRetrieved = statement.execute(sql);
System.out.println("Ma’lumotlar olindi: " + isRetrieved);
System.out.println("Olingan ma’lumotlarni ko‘rsatish:");
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
String specialty = resultSet.getString("specialty");
int salary = resultSet.getInt("salary");
System.out.println("id: " + id);
System.out.println("Name: " + name);
System.out.println("Specialty: " + specialty);
System.out.println("Salary: " + salary);
System.out.println("===================");
}
System.out.println("Bog‘lanishni yopish...");
try {
resultSet.close();
statement.close(); connection.close();
}finally {
if(statement !=null){
statement.close();
}
if(connection!=null){
connection.close();
}
}
System.out.println("Raxmat");
}
}
PreparedStatement ekzemplyarini yaratish.
PreparedStatement Statement interfeysidan meros olib, oddiy Statementga nisbatan aniq ustunlik beradi. Xususan, argumentlarni dinamik qo‘llab-quvvatlashda ko‘proq moslashuvchanlikka ega bo‘ladi.
Amalda PreparedStatement ekzemplyarini yaratish quyidagicha bo‘ladi:
try {
String SQL = "Update developers SET salary WHERE specialty = ?";
preparedStatement = connection.prepareStatement(SQL);
}catch (SQLException e){
e.printStackTrace();
}finally {
/*do some job...*/
}
So‘roq (?) belgisi bilan berilgan parametrlar parameter markerlari deyiladi. Bu ularning metod parametrlari orqali uzatilishini bildiradi.
Har bir parametr metod imzosining tartib raqamiga mos keladi. Ya’ni. birinchi marker birinchi joyda, ikkinchi - ikkinchi joyda va hokazo. Massivlardan farqli o‘laroq, bu yerda 1-raqamdan boshlanadi. Bu munosabatlar ma’lumotlar bazalarining ishi asoslanadigan relatsion modelning o‘ziga xos xususiyatlari bilan bog‘liq.
SQL so‘rovlarini bajarish uchun bir xil nomlar (execute(), executeQuery(), executeUpdate()) kabi biroz o‘zgartirilgan metodlar ishlatiladi.
PreparedStatement ekzemplyarini yopish. Natijalarni ma’lumotlar bazasiga saqlash uchun ulanishni yopganda, PreparedStatement ekzemplyari ham xuddi shu tarzda yopiladi.
Buning uchun close() metodi qo‘llaniladi.
Koddagi ko‘rinishi:
try {
String SQL = "Update developers SET salary WHERE specialty = ?";
preparedStatement = connection.prepareStatement(SQL);
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (preparedStatement != null) {
preparedStatement.close();
}
}
CallableStatement ekzemplyarini yaratish.
CallableStatement ekzemplyari protseduralarni bajarish uchun bevosita ma’lumotlar bazasida qo‘llaniladi.
|