web-dev-qa-db-fra.com

H2: comment savoir si la table existe?

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!

23
user1768830

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));
47
qiGuar
    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;
                }
            }
        }
0
MikaAll

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

0
Rohit Goyla

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.

0
Kayaman