معلمات JDBC في البند: نهج فعال
عند التعامل مع استعلام جملة IN، مثل SELECT * FROM MYTABLE WHERE MYCOL في ( ?) ، فإن تحديد المعلمات للوسائط يضمن الأمان والكفاءة. على الرغم من أن JDBC لا تقدم حلاً مباشرًا، إلا أن بعض برامج التشغيل قد تدعم PreparationStatement#setArray().طرق المساعدة للمعلمات
في غياب الدعم المباشر، يمكنك يمكن الاستفادة من الأساليب المساعدة لإنشاء عناصر نائبة لجملة IN وتعيين القيم ديناميكيًا.preparePlaceHolders(int length)
ضع في اعتبارك طريقة الوصول إلى البيانات التالية:
سلسلة نهائية ثابتة خاصة SQL_FIND = "حدد المعرف والاسم والقيمة من الكيان WHERE id IN (%s)";
القائمة العامة تجد (مجموعة
private static final String SQL_FIND = "SELECT id, name, value FROM entity WHERE id IN (%s)";
public List find(Set ids) throws SQLException {
List entities = new ArrayList();
String sql = String.format(SQL_FIND, preparePlaceHolders(ids.size()));
try (
Connection connection = dataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql);
) {
setValues(statement, ids.toArray());
try (ResultSet resultSet = statement.executeQuery()) {
while (resultSet.next()) {
entities.add(map(resultSet));
}
}
}
return entities;
}
قد تحد قواعد البيانات من عدد القيم المسموح بها في جملة IN.
يضمن هذا النهج إمكانية النقل عبر قواعد بيانات مختلفة عن طريق عزل إنشاء عبارة SQL عن إعداد القيمة.تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3