123 Street, New York, USA

info@example.com

Java Dasturlash Tilidagi MySQL Tushunchalar

1. MySQL bilan ulanish

Java'da MySQL bazasiga ulanish uchun `Connection`, `DriverManager` sinflaridan foydalaniladi.

import java.sql.Connection;
import java.sql.DriverManager;

public class DBConnection {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/your_db";
        String user = "root";
        String password = "";

        try {
            Connection conn = DriverManager.getConnection(url, user, password);
            System.out.println("Ulanish muvaffaqiyatli!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Misol: Mahalliy MySQL bazasiga ulanish

2. Ma’lumot kiritish (INSERT)

MySQL jadvaliga yangi yozuv qo‘shish uchun `INSERT INTO` SQL buyrug‘i ishlatiladi.

String sql = "INSERT INTO users(name, email) VALUES('Ali', 'ali@example.com')";
Statement stmt = conn.createStatement();
stmt.executeUpdate(sql);

Misol: Foydalanuvchi ma'lumotini bazaga yozish

3. Ma’lumot o‘qish (SELECT)

Bazadagi ma’lumotlarni olish uchun `SELECT` SQL operatoridan foydalaniladi.

String sql = "SELECT * FROM users";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
    System.out.println(rs.getString("name"));
}

Misol: Barcha foydalanuvchilarning ismini chiqarish

4. Ma’lumot yangilash (UPDATE)

Bazadagi mavjud yozuvni yangilash uchun `UPDATE` ishlatiladi.

String sql = "UPDATE users SET name='Vali' WHERE id=1";
stmt.executeUpdate(sql);

Misol: Foydalanuvchining ismini o‘zgartirish

5. Ma’lumot o‘chirish (DELETE)

Bazadan ma’lumotni olib tashlash uchun `DELETE FROM` ishlatiladi.

String sql = "DELETE FROM users WHERE id=2";
stmt.executeUpdate(sql);

Misol: ID 2 bo‘lgan foydalanuvchini o‘chirish

6. PreparedStatement — xavfsiz SQL yozish

SQL injektsiyaga qarshi xavfsizlik uchun `PreparedStatement` ishlatiladi.

String sql = "INSERT INTO users(name, email) VALUES (?, ?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, "Ali");
ps.setString(2, "ali@example.com");
ps.executeUpdate();

Misol: `?` belgilar yordamida xavfsiz parametr uzatish

7. try-with-resources — avtomatik resurs yopish

`try-with-resources` blokida `Connection`, `Statement`, `ResultSet` avtomatik yopiladi.

try (Connection conn = DriverManager.getConnection(url, user, pass);
     PreparedStatement ps = conn.prepareStatement("SELECT * FROM users")) {
    ResultSet rs = ps.executeQuery();
    while (rs.next()) {
        System.out.println(rs.getString("name"));
    }
} catch (Exception e) {
    e.printStackTrace();
}

Misol: Ulanish va so‘rov avtomatik yopiladi

8. DAO Pattern — qatlamli arxitektura

DAO (Data Access Object) pattern orqali biznes logika va ma’lumotlar bazasi alohida ajratiladi.

// User.java - model class
public class User {
    private int id;
    private String name;
    private String email;
    // getter/setter
}

// UserDAO.java
public class UserDAO {
    public List<User> getAllUsers(Connection conn) throws SQLException {
        List<User> list = new ArrayList<>();
        String sql = "SELECT * FROM users";
        try (PreparedStatement ps = conn.prepareStatement(sql);
             ResultSet rs = ps.executeQuery()) {
            while (rs.next()) {
                User u = new User();
                u.setId(rs.getInt("id"));
                u.setName(rs.getString("name"));
                u.setEmail(rs.getString("email"));
                list.add(u);
            }
        }
        return list;
    }
}

Misol: DAO yordamida barcha foydalanuvchilarni olish

9. JOIN — bog‘langan jadvaldan ma’lumot olish

`JOIN` operatori orqali ikki yoki undan ortiq jadvaldan ma’lumot olish mumkin.

String sql = "SELECT u.name, o.amount FROM users u JOIN orders o ON u.id = o.user_id";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
    System.out.println(rs.getString("name") + ": " + rs.getDouble("amount"));
}

Misol: Foydalanuvchilar va ularning buyurtmalarini chiqarish

10. Transaction — birdamlikda bajariladigan amallar

Bir nechta SQL buyrug‘ini xatolik bo‘lmasa bajarish va aks holda bekor qilish uchun `transaction` ishlatiladi.

try {
    conn.setAutoCommit(false);

    PreparedStatement ps1 = conn.prepareStatement("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
    ps1.executeUpdate();

    PreparedStatement ps2 = conn.prepareStatement("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
    ps2.executeUpdate();

    conn.commit(); // Hammasi muvaffaqiyatli bajarildi
} catch (Exception e) {
    conn.rollback(); // Xatolik bo‘lsa, hammasini bekor qilish
    e.printStackTrace();
}

Misol: Pul o‘tkazmasi jarayoni

11. MySQL Indexing — Jadvalni tezroq qidirish

`INDEX` yordamida MySQL jadvalidagi ma’lumotlarni tezroq qidirish mumkin.

CREATE INDEX idx_name ON users(name);

Misol: `name` ustuniga indeks yaratish

12. MySQL View — Ko‘rinmalar

`VIEW` yordamida bir nechta jadvalni birlashtirib, oddiyroq so‘rovlar yaratish mumkin.

CREATE VIEW user_orders AS
SELECT u.name, o.amount
FROM users u
JOIN orders o ON u.id = o.user_id;

Misol: `users` va `orders` jadvalidan ma’lumot olish uchun ko‘rinma yaratish

13. MySQL Stored Procedure — Saqlangan protsedura

`Stored Procedure` yordamida bir nechta SQL buyruqlarini bir joyda bajarish mumkin.

DELIMITER $$

CREATE PROCEDURE GetUserOrders(IN userId INT)
BEGIN
    SELECT u.name, o.amount
    FROM users u
    JOIN orders o ON u.id = o.user_id
    WHERE u.id = userId;
END $$

DELIMITER ;

Misol: `GetUserOrders` protsedurasini yaratish

14. Java Connection Pooling (HikariCP) — Ulanishlar pooli

HikariCP — bu Java uchun yuqori samarali va tezkor ulanishlarni ta’minlaydigan kutubxona.

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
config.setUsername("root");
config.setPassword("password");

HikariDataSource dataSource = new HikariDataSource(config);
Connection conn = dataSource.getConnection();

// SQL so'rovlarini bajarish

conn.close();

Misol: HikariCP yordamida ma'lumotlar bazasiga ulanishni boshqarish

15. ORM (Hibernate) — Ma’lumotlar bazasi bilan obyektga yo’naltirilgan ulanish

Hibernate — bu Java uchun ORM (Object-Relational Mapping) kutubxonasi bo‘lib, SQL ni avtomatik tarzda Java obyektlariga aylantiradi.

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;
    private String email;

    // getter/setter
}

SessionFactory factory = new Configuration()
    .configure("hibernate.cfg.xml")
    .addAnnotatedClass(User.class)
    .buildSessionFactory();

Session session = factory.getCurrentSession();
session.beginTransaction();

User user = session.get(User.class, 1);
System.out.println(user.getName());

session.getTransaction().commit();

Misol: Hibernate yordamida foydalanuvchi ma’lumotlarini olish