Je souhaite créer une vue dans Derby RDBMS lorsque ma WebApp démarre (ApplicationListener.contextInitialized) si elle n'existe pas encore. En ce moment, il n'y a pas de transaction, donc je dois utiliser JDBC & SQL. Mes essais avec DatabaseMetaData.getTables() n'ont pas réussi. Il renvoie toujours un ensemble de résultats vide mais je peux voir dans l'onglet Services dans NetBeans qu'il existe définitivement (et la table demandée aussi). Le code:Comment créer une vue de base de données manquante dans Derby?
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();
}
La connexion créée par la ressource DataSource injectée dans le gestionnaire d'événements de contexte de l'application:
@Resource(name="jdbc/x")
DataSource ds;
...
try
{
Connection conn = ds.getConnection();
if (isDBViewExists(conn, ...))
...
}
finally
{
conn.close();
}
Tous les noms passés sont en MAJUSCULES (catalogue, schéma, vue/tableau). Le conn_ n'est pas nul. Quelle est ma faute?