Мы настраиваем мультитенантное приложение с одним сервером базы данных ms sqlserver, имеющим несколько баз данных, по одной на сайт.
c3p0 0.9.5.5
используется для пула соединений.
Мы делаем вызов setCatalog()
для установки базы данных для использования. В примере программы мы используем простой запрос «выберите из test_table». Имя таблицы, имена столбцов не имеют каких-либо кавычек.
Однако после второго вызова setCatalog()
мы начинаем получать ошибку такой формы:
com.microsoft.sqlserver.jdbc.SQLServerException: The prepared statement handle 1 is not valid in this context. Please verify that current database, user default schema, and ANSI_NULLS and QUOTED_IDENTIFIER set options are not changed since the handle is prepared.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:258)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1535)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:467)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:409)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7151)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2478)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:219)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:199)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:331)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:1471)
Однако с тот же тестовый запрос без c3p0 (прямое получение соединения), мы никогда не сталкиваемся с этой проблемой. Что мы делаем не так, или есть известная проблема в c3p0 для этого?