Наши приложения работают с MySQL, MS SQL Server и Oracle DB.
В нашей конфигурации C3P0 используется опция preferredTestQuery
для проверки возможности подключения. Вот наша конфигурация Spring
<b:bean id="phoenixDataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<b:property name="driverClass" value="${database.driver}"/>
<b:property name="jdbcUrl" value="${database.connectionURL}"/>
<b:property name="user" value="${database.user}"/>
<b:property name="password" value="${database.password}"/>
<b:property name="initialPoolSize"><b:value>${database.initialPoolSize:10}</b:value></b:property>
<b:property name="minPoolSize"><b:value>${database.minPoolSize:1}</b:value></b:property>
<b:property name="maxPoolSize"><b:value>${database.maxPoolSize:25}</b:value></b:property>
<b:property name="acquireRetryAttempts"><b:value>${database.acquireRetryAttempts:10}</b:value></b:property>
<b:property name="acquireIncrement"><b:value>${database.acquireIncrement:5}</b:value></b:property>
<b:property name="idleConnectionTestPeriod"><b:value>${database.idleConnectionTestPeriod:60}</b:value></b:property>
<b:property name="maxIdleTime"><b:value>${database.maxIdleTime:10800}</b:value></b:property>
<b:property name="maxConnectionAge"><b:value>${database.maxConnectionAge:14400}</b:value></b:property>
<b:property name="preferredTestQuery"><b:value>${database.preferredTestQuery:SELECT 1}</b:value></b:property>
<b:property name="testConnectionOnCheckin"><b:value>${database.testConnectionOnCheckin:false}</b:value></b:property>
<b:property name="testConnectionOnCheckout"><b:value>${database.testConnectionOnCheckout:false}</b:value></b:property>
</b:bean>
SELECT 1
не является допустимым запросом для Oracle, но тогда SELECT 1 FROM DUAL
не является допустимым запросом для SQL Server, если мы не создаем объект DUAL
.
Очень простой вопрос: есть ли какой-либо запрос SELECT или просто безвредный, который можно повсеместно использовать на всех платформах для проверки возможности подключения?
Я могу переопределить базу данных .preferredTestQuery в файле свойств для инсталляций Oracle, но мне все еще интересно, существует ли жизнеспособное универсальное решение.
[Изменить] Проверка соединения выполняется C3P0 независимо от моего кода. Когда запрос завершается с ошибкой (если включено ведение журнала отладки), он записывает ошибку в журналы. Ни один мой код не использует этот запрос, он является частью конфигурации C3P0, потому что объект сам проверяет установление соединения или нет (как я понимаю). Тогда я не могу этого сделать. В настоящее время было возможно переопределить этот запрос для установок Oracle только с помощью конфигураций.
И, кстати, даже если бы я мог тестировать реализацию диалекта через код, вопрос можно было бы перефразировать как "Чтобы проверить подключение, могу ли я запустить универсальный запрос или сделать должен запускать безобидный запрос, специфичный для СУБД?" или что-то в этом роде