مقدمة: لماذا يحتاج مطور Java إلى معرفة PostgreSQL و MongoDB؟
نادرًا ما يخلو تطوير Java الحديث من التفاعل مع قواعد البيانات. النظامان الأكثر شيوعًا — PostgreSQL العلائقية و MongoDB الموجهة للوثائق — يغطيان 90% من مهام تطبيقات المؤسسات. PostgreSQL مثالي للهياكل الصارمة والأنظمة المعاملاتية، بينما MongoDB مناسب للهياكل المرنة للبيانات والأحمال العالية للكتابة.
في هذه المقالة، سنستعرض أمثلة عملية للاتصال بكلا قاعدتي البيانات من Java، وسننفذ عمليات CRUD الأساسية ونقارن بين النهجين. ستكون المادة مفيدة لكل من المبتدئين والمطورين ذوي الخبرة الذين يرغبون في تحديث معارفهم.
1. PostgreSQL في Java: كلاسيكيات قواعد البيانات العلائقية
1.1. الاتصال والإعداد
للعمل مع PostgreSQL في Java، يُستخدم برنامج التشغيل org.postgresql:postgresql. أضف التبعية في pom.xml (Maven):
<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.7.1</version></dependency>الاتصال عبر JDBC يبدو كالتالي:
String url = "jdbc:postgresql://localhost:5432/mydb";String user = "postgres";String password = "secret";
try (Connection conn = DriverManager.getConnection(url, user, password)) { System.out.println("تم إنشاء الاتصال بـ PostgreSQL!");} catch (SQLException e) { e.printStackTrace();}1.2. عمليات CRUD عمليًا
لننشئ جدول users وننفذ العمليات الأساسية:
// إنشاء الجدولString createSQL = """ CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, name VARCHAR(100), email VARCHAR(100) UNIQUE, age INTEGER )""";
try (Statement stmt = conn.createStatement()) { stmt.execute(createSQL); System.out.println("تم إنشاء الجدول");}
// INSERTString insertSQL = "INSERT INTO users (name, email, age) VALUES (?, ?, ?)";try (PreparedStatement pstmt = conn.prepareStatement(insertSQL)) { pstmt.setString(1, "إيفان بيتروف"); pstmt.setString(2, "ivan@example.com"); pstmt.setInt(3, 30); pstmt.executeUpdate();}
// SELECTString selectSQL = "SELECT * FROM users WHERE age > ?";try (PreparedStatement pstmt = conn.prepareStatement(selectSQL)) { pstmt.setInt(1, 25); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { System.out.printf("ID: %d, Name: %s, Email: %s%n", rs.getInt("id"), rs.getString("name"), rs.getString("email")); }}هام: استخدم دائمًا PreparedStatement للحماية من حقن SQL.
2. MongoDB في Java: مرونة النموذج الوثائقي
2.1. الاتصال عبر MongoDB Sync Driver
أضف في pom.xml:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>4.11.1</version></dependency>الاتصال بـ MongoDB المحلي:
import com.mongodb.client.MongoClients;import com.mongodb.client.MongoClient;import com.mongodb.client.MongoDatabase;
MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");MongoDatabase database = mongoClient.getDatabase("mydb");System.out.println("تم إنشاء الاتصال بـ MongoDB");2.2. عمليات CRUD مع المستندات
نعمل مع مجموعة users:
import com.mongodb.client.MongoCollection;import org.bson.Document;import static com.mongodb.client.model.Filters.*;
MongoCollection<Document> collection = database.getCollection("users");
// CREATE — إدراج مستندDocument user = new Document("name", "آنا سمي