J'essaie d'écrire du code Java qui vérifie si une table H2 existe: si elle n'existe pas, elle exécute d'abord une requête CREATE TABLE
qui crée la table avant de continuer.
J'ai suivi les conseils donnés dans cette question de Google Groupes mais cela ne fonctionne tout simplement pas.
Si j'exécute la requête suivante:
SELECT COUNT(*) AS count FROM information_schema.tables WHERE table_name = 'Word_types'
Je récupère une seule ligne avec un champ COUNT
qui vaut 0; cela indique que les tables Word_types
n'existent pas. Mais quand je cours:
SELECT * FROM Word_types
Je récupère 0 jeux de résultats, mais l'interface/interface graphique SQL que j'utilise me montre tous les champs/colonnes de la table Word_types
. De plus, lorsque je descends dans la liste des tables disponibles de ma base de données (à l'aide de la même interface graphique), je vois que Word_types
existe.
Alors, quelle est la requête correcte à utiliser lorsque vous essayez de déterminer si une table H2 existe ou non? Utilisation de la v1.3.173. Merci d'avance!
Tout d'abord: cochez la case dans laquelle vous tapez les noms des tables. C'est très important. Word_types
et Word_TYPES
sont deux tables différentes.
Seconde: Si vous voulez vérifier si la table existe et si elle n'en crée pas une, je vous recommande d'utiliser l'exemple suivant:
CREATE TABLE IF NOT EXISTS TEST(ID INT PRIMARY KEY, NAME VARCHAR(255));
Connection con = getConnection();
Boolean tableExist = false;
PreparedStatement preparedStatement = con.prepareStatement("SHOW TABLES FROM INFORMATION_SCHEMA");
Boolean rq = preparedStatement.execute();
if(rq) {
ResultSet rs = preparedStatement.getResultSet();
while (rs.next()) {
if(rs.getString(rs.getRow()).equals("Word_TYPES")) {
isExist = true;
break;
}
}
}
Votre requête ci-dessus renverra le nombre d'enregistrements inexistant de votre table, pour cela vous devez lancer la requête suivante. Cette requête vous renverra toutes les tables de votre base de données et à partir de là, vous pourrez vérifier si vos "Word_types" existent ou non.
UTILISEZ VOTRENAME GO SELECT * FROM sys.Tables GO
répondez-moi si ça marche ou pas aussi
Si la deuxième requête ne renvoie pas d'exception ni ne renvoie de ligne, cela signifie simplement que la table existe mais qu'elle est vide.