"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني تحديد معلمات جملة IN في JDBC بشكل فعال؟

كيف يمكنني تحديد معلمات جملة IN في JDBC بشكل فعال؟

تم النشر بتاريخ 2024-11-02
تصفح:209

How can I parameterize an IN clause in JDBC effectively?

معلمات JDBC في البند: نهج فعال

عند التعامل مع استعلام جملة IN، مثل SELECT * FROM MYTABLE WHERE MYCOL في ( ?) ، فإن تحديد المعلمات للوسائط يضمن الأمان والكفاءة. على الرغم من أن JDBC لا تقدم حلاً مباشرًا، إلا أن بعض برامج التشغيل قد تدعم PreparationStatement#setArray().

طرق المساعدة للمعلمات

في غياب الدعم المباشر، يمكنك يمكن الاستفادة من الأساليب المساعدة لإنشاء عناصر نائبة لجملة IN وتعيين القيم ديناميكيًا.

preparePlaceHolders(int length)
    : إنشاء قائمة مفصولة بفواصل من العناصر النائبة ذات الطول المحدد.
  • setValues(PreparedStatement PreparationStatement, Object...values)
  • : تعيين القيم في حلقة باستخدام PreparationStatement#setObject().
  • مثال التنفيذ

ضع في اعتبارك طريقة الوصول إلى البيانات التالية:

سلسلة نهائية ثابتة خاصة SQL_FIND = "حدد المعرف والاسم والقيمة من الكيان WHERE id IN (%s)"; القائمة العامة تجد (مجموعة معرفات) تطرح SQLException { List الكيانات = new ArrayList(); String sql = String.format(SQL_FIND, PreparPlaceHolders(ids.size())); يحاول ( اتصال الاتصال = dataSource.getConnection(); بيان PreparedStatement = Connection.prepareStatement(sql); ) { setValues(statement, ids.toArray()); حاول (ResultSet resultSet = البيان.executeQuery()) { بينما (resultSet.next()) { الكيانات.add(map(resultSet)); } } } كيانات العودة؛

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