Я хотел бы создать представление в СУБД Derby при запуске моего веб-приложения (ApplicationListener.contextInitialized), если оно еще не существует. На данный момент транзакции нет, поэтому я должен использовать JDBC и SQL. Мои попытки с DatabaseMetaData.getTables() не увенчались успехом. Он всегда возвращает пустой набор результатов, но я вижу на вкладке «Службы» в NetBeans, что он определенно существует (а также запрошенная таблица). Код:
public isDBViewExists( Connection conn_, String catalogName_, String schemaName_, String viewName_ ) throws SQLException
{
conn_.setAutoCommit( false );
DatabaseMetaData metadata = conn_.getMetaData();
ResultSet rs = metadata.getTables( catalogName_, schemaName_, viewName_, new String[] { "VIEW" } );
return rs.next();
}
Соединение, созданное внедренным ресурсом DataSource в обработчике событий контекста приложения:
@Resource( name="jdbc/x" )
DataSource ds;
...
try
{
Connection conn = ds.getConnection();
if ( isDBViewExists( conn, ... ) )
...
}
finally
{
conn.close();
}
Все переданные имена указаны в верхнем регистре (каталог, схема, представление/таблица). conn_ не равно нулю. В чем я виновата?