سؤال

أنا أعمل حاليًا في مشروع ترحيل ، لترحيل البيانات من DB القديم إلى المصنف الجديد (من فضلك لا تسأل لماذا أتجاوز طلب Java لهذا ، هذا ما يتطلبه العميل).

كان هناك بعض الرمز الأولي الذي أقوم بتحديثه الآن. أحد الأشياء التي أغيرها هو استخدام الربيع JdbcTemplate بدلاً من ذلك ، رمز لوحة الغلاية الذي كان هناك.

لسوء الحظ ، لم أجد طريقة بعد تنفيذ الاستعلامات الجسدية على أ JdbcTemplate, ، التناظرية للرمز القديم:

Statement statement = getConnection().createStatement(
    ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
statement.setFetchDirection(ResultSet.FETCH_FORWARD);
statement.setFetchSize(1000);
return statement.executeQuery();

ال getConnection() فقط أعد أ Connection كائن ، تم إنشاؤه في رمز JDBC عادي (ليس جزءًا من أ SessionFactory أو تنفيذ إطار).

أود بعد ذلك حلقة على مجموعة النتائج ، ورسم الخرائط للصفوف واحدة في كل مرة. هل يعرف أي شخص ما إذا كانت هناك طريقة سهلة لتحقيق نفس الوظيفة مع JdbcTemplate?

تيا

هل كانت مفيدة؟

المحلول

أعتقد أن الخيار الطبيعي لمثل هذا التطبيق دفعة الربيع (اقرأ المثير للإعجاب صفحة الميزات)

فيما يلي الأقسام التي يجب أن تكون ذات صلة بك:

itemReaders و itemWriters> قاعدة البيانات
وعلى وجه الخصوص JdbcPagingItemReader

نصائح أخرى

هل تقصد sth. مثله؟

SimpleJdbcTemplate template = new SimpleJdbcTemplate(dataSource);

List<String> result = template.query("SELECT name FROM people WHERE id > ?",
    new RowMapper<String>() {

        public String mapRow(ResultSet rs, int rowNum) throws SQLException {
            return rs.getString("name");
        }

    }, 666
);

أو هذا:

template.getJdbcOperations().query("SELECT name FROM people WHERE id > ?",
        new Object[] { 666 },
        new RowCallbackHandler() {

            public void processRow(ResultSet rs) throws SQLException {
                System.out.println(String.format(
                    "Got '%s'", rs.getString("name")));
            }

        }
);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top