Как заставить драйвер JDBC работать в Java 5 & 6? - PullRequest
4 голосов
/ 06 августа 2009

Java 6 поставляется с JDBC 4, который не имеет обратной совместимости с JDBC, поставляемым с предыдущими версиями Java.

У нас есть драйвер JDBC, который должен поддерживать как Java 5, так и Java 6. Если я реализую новые интерфейсы в драйвере, он не будет работать в Java 5, потому что интерфейсы также используют новые классы. Итак, у нас есть 2 версии драйвера. Есть ли способ иметь одну банку для Java 5 и 6?

1 Ответ

8 голосов
/ 07 августа 2009

Если вы реализуете драйвер JDBC 3.0 и ваши клиенты запускают его на Java 6, они получат ошибки, если вызовут какой-либо из новых методов JDBC 4.0. Это редко, так как эти новые методы используются не очень часто, но если вы хотите быть защищенным от ошибок, нижеприведенное решение (которое является хаком) должно помочь:

  1. скомпилируйте с Java 5 (если вы скомпилируете с Java 6 и запустите в Java 5, вы получите ошибку несоответствия версий)
  2. Реализуйте свой обычный драйвер JDBC 3.0, но также включите реализации для новых методов JDBC 4.0 (примечание: это приведет к ошибкам компиляции, поскольку java 5 не определяет типы, такие как java.sql.NClob)
  3. создать точную копию новых интерфейсов JDBC 4.0 (например, java.sql.NClob) в отдельном проекте (так что теперь есть 2 проекта: оригинальный и этот)
  4. скомпилируйте оба проекта вместе и сделайте отдельный jar для каждого проекта:
    • ваша реализация драйвера JDBC (сохраните этот jar)
    • новые интерфейсы JDBC 4.0 (откажитесь от этой банки)

Мы можем отказаться от JAR-интерфейса JDBC 4.0, потому что:

  • в Java 6 эти новые интерфейсы JDBC 4.0 определены
  • в Java 5 интерфейсы JDBC 3.0 не определяют новые методы (например, Connection.createNClob ()), поэтому ваши пользователи не будут вызывать их

Единственная потенциальная проблема может быть с загрузчиком классов Java 5. Он может потерпеть неудачу, если не может найти новые интерфейсы JDBC 4.0 (например, java.sql.NClob). Я не думаю, что это произойдет в Sun JVM, если вы не вызовете метод, который возвращает один из этих новых интерфейсов, так что вы должны быть хорошими. Если я ошибаюсь и это проблема, просто поместите отброшенный jar (тот, который определил новые интерфейсы JDBC 4.0) в вашем classpath при работе в Java 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...