l'appel de derby (java db) "show tables" à partir de jdbc
J'ai besoin d'énumérer les tables dans un Derby (aka Java DB) de la base de données à l'aide de JDBC dans un programme Java. Tout ce que je suis au courant pour le faire, c'est la commande SHOW TABLES.
J'ai d'abord essayé avec quelque chose de semblable à ce...
String strConnectionURL = "jdbc:derby:/path/to/derby/database;create=false";
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection(strConnectionURL);
Statement statement = connection.createStatement();
boolean boResult = statement.execute("SHOW TABLES");
if (boResult) {
System.out.println("yay!");
}
...mais qui lève une exception:
java.sql.SQLSyntaxErrorException: Syntax error: Encountered "SHOW" at line 1, column 1.
Donc ensuite, j'ai pensé que peut-être j'avais besoin d'utiliser un CallableStatement j'ai donc essayé cette...
String strConnectionURL = "jdbc:derby:/path/to/derby/db;create=false";
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection(strConnectionURL);
CallableStatement statement = connection.prepareCall("SHOW TABLES");
boolean boResult = statement.execute();
if (boResult) {
System.out.println("yippee!");
}
...mais ça en jette la même exception:
java.sql.SQLSyntaxErrorException: Syntax error: Encountered "SHOW" at line 1, column 1.
Donc, quelqu'un peut-il m'aider à énumérer les tables de mon Derby (Java DB) de la base de données à partir de JDBC?
MODIFIER: je suis à la recherche autour de et de départ pour obtenir un sentiment cela peut être un général JDBC question. En d'autres termes, on pourrait/serait énumérer tous un db de tables avec le DatabaseMetaData de l'objet qui peut être récupéré à partir de l'objet de Connexion. La recherche dans ce (et hâte de réponses)...
EDIT 2: j'ai trouvé un pur JDBC solution, mais je suis toujours heureux d'entendre d'autres solutions...
String strConnectionURL = "jdbc:derby:/path/to/db;create=false";
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection(strConnectionURL);
DatabaseMetaData dbmd = connection.getMetaData();
ResultSet resultSet = dbmd.getTables(null, null, null, null);
while (resultSet.next()) {
String strTableName = resultSet.getString("TABLE_NAME");
System.out.println("TABLE_NAME is " + strTableName);
}
OriginalL'auteur John Fitzpatrick | 2011-09-14
Vous devez vous connecter pour publier un commentaire.
Afficher les Tables est une commande ij, pas une base SQL, donc vous ne pouvez pas exécuter directement. Comme vous l'avez noté dans votre "EDIT 2", vous pouvez utiliser le DatabaseMetaData pour ce faire. Deux autres manières de le faire: vous pouvez sélectionner l'une des catalogues système (voir http://db.apache.org/derby/docs/10.8/ref/rrefsistabs24269.html) , ou vous pouvez utiliser le "ij.runScript" méthode à exécuter les ij outil à partir de l'intérieur de votre programme, et de passer le "show tables" de commande (voir http://db.apache.org/derby/docs/10.8/publishedapi/jdbc3/org/apache/derby/tools/ij.html)
SELECT * FROM sys.systables
m'a donné ce dont j'avais besoin.OriginalL'auteur Bryan Pendleton
Comme Bryan suggéré ij.runScript - le code devrait ressembler à ceci:
assumming
conn
est un ouvert derby ConnexionMais l'inconvénient est que vous obtenez seulement la sortie de chaîne. Pas un jeu de résultats que vous obtenez à partir de:
ou si vous souhaitez qu'un utilisateur table des noms que vous pouvez utiliser SQL suivante:
OriginalL'auteur Vit Bernatik
Très semblable à la sortie de
SHOW TABLES;
peut être produit à l'aide de jdbc conforme de la requête:
Il vous montre également la probablement utile des informations de SCHÉMA pour chaque entrée de la TABLE. Sauter
TABLEAU TAPEZ='T'
si vous aussi vous souhaitez voir le système de tables de votre base de données que l'utilisateur a déjà mentionné.
OriginalL'auteur armin