المفاتيح المولَّدة والتنفيذ الدفعي (Batching)
في هذا الدرس 4 موضوعات
هذا الدرس مخطط له. يعرض المخطط أدناه الموضوعات التي سيغطيها، ولم يُنشر الدرس الكامل بعد.
نص الدروس والتمارين باللغة الإنجليزية، بينما تبقى واجهة الموقع وعناوين الدروس بالعربية.
في هذا الدرس
insert many rows quickly and read the ids the database created.
الموضوعات المخطط لها
- The database often generates the id (identity column). Ask for it with
RETURN_GENERATED_KEYS. - Each
executeUpdateis one network round trip. - A batch collects many statements (
addBatch) and sends them together (executeBatch). - Group batches (for example every 500 rows) so memory stays small.
- Turn off auto-commit and commit once per chunk for more speed.
تفاصيل المخطط المبدئي
عرض عملي
c.setAutoCommit(false);
try (PreparedStatement ps = c.prepareStatement(
"insert into product(name, price) values (?, ?)", Statement.RETURN_GENERATED_KEYS)) {
for (Product p : products) {
ps.setString(1, p.name());
ps.setBigDecimal(2, p.price());
ps.addBatch();
}
ps.executeBatch();
try (ResultSet keys = ps.getGeneratedKeys()) { while (keys.next()) { /* keys.getLong(1) */ } }
}
c.commit();اختبر فهمك
Why is a batch faster than a loop of single inserts?
أظهر الإجابة
Fewer network round trips.
التطبيق
طبّق هذا الدرس بمختبر الوحدة وتمارينها واختبارها.
تعليم الدرس كمكتمل اختياري ويمكنك التراجع عنه في أي وقت. يبقى تقدمك محفوظًا في هذا المتصفح.