2017-10-10 2 views
2

J'ai une liste appelée tList, qui contient les noms de tables d'un database. Les tableaux de cette liste peuvent exister ou non. Je veux récupérer des données de chaque table si elle est présente. Je le fais comme ça.Vérifier si une table est présente dans la base de données

for(String t:tList){ 
    sql=Select * from t 
} 

Mais dans ce scénario si table n'est pas présent, je reçois exception cette table n'est pas présent et mon programme obtient fin. Comment gérer cela afin que je puisse récupérer des données seulement et seulement si cette table est présente

Dans un autre scénario si la table est présente mais elle est vide que aussi j'obtiens l'erreur. S'il vous plaît aider dans ces deux scénarios

+1

Eh bien ... vous pouvez attraper l'exception .... Et une table vide ne doit pas vous donner une erreur. – Henry

+0

Est-ce oracle? Ou quelle base de données? – user7294900

+0

base de données sybase – zaib7777

Répondre

1

Avez-vous essayé DatabaseMetaData.getTables() Exemple:

DatabaseMetaData md = connection.getMetaData(); 
ResultSet rs = md.getTables(null, null, t, null); //t is your tableName (defined in loop of your question) 
while (rs.next()) { 
    System.out.println(rs.getString(3)); 
} 

Modifier

Pour répondre à votre question de table vide:

//your query 
    sql=Select * from t 
    Statement stmt = yourDBConnection.createStatement(); 
    ResultSet rs = stmt.executeQuery(sql); 
    if (!rs .isBeforeFirst()) {  
    System.out.println("Table is empty"); 
    } 
+0

essayé mais je pense que c'est pour obtenir toutes les tables de la base de données et je pense que dans ce cas, je vais avoir le même problème – zaib7777

+0

Je vais essayer encore une fois mais avec elle je veux vérifier si la table est vide ou non. S'il est vide, je veux que mon programme fonctionne. Puis-je gérer cela avec l'instruction ci-dessus – zaib7777

+0

La table vide est différente de votre question 'Je veux récupérer les données de chaque table si elle est présente.' La table vide vous donnera un ensemble de résultats vide, et .next() sera faux . – Optional

2

Je pense que la manière plus appropriée est d'obtenir des données est java.sql.DataBaseMetaData. Un objet java.sql.Connection est capable de fournir des informations décrivant ses tables, sa grammaire SQL supportée, ses procédures stockées, les capacités de cette connexion, et ainsi de suite. Cette information est obtenue avec la méthode getMetaData.

Référez: https://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html https://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html