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
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
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
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
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
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
`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
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
`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
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
`INDEX` yordamida MySQL jadvalidagi ma’lumotlarni tezroq qidirish mumkin.
CREATE INDEX idx_name ON users(name);
Misol: `name` ustuniga indeks yaratish
`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
`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
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
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