是否有办法使用JDBI获取有关模式中包含哪些表的信息?
我有两个数据库 A 和 B ,我需要能够
我可以使用命令行中的mysqldump
执行此操作:从每个数据库中检索CREATE TABLE
语句并进行比较。但现在我需要在Dropwizard / JDBI上下文中进行测试。
文档有点稀疏,但我找不到任何合适的东西让我这样做。我或许可以
handle.execute("show tables");
等等,但这似乎有点低,我希望有更好的方法。
或者我需要求助于JDBC吗?
答案 0 :(得分:1)
JDBC有几个独立于数据库提供程序的机制。
从连接中你可以获得DatabaseMetaData,然后对它进行逐个查询(null = any)。
DatabaseMetaData meta = connection.getMetaData();
ResultSet rs = meta.getColumns(...);
注意:此处的名称可能区分大小写等。
答案 1 :(得分:1)
我自己就碰到了这个。 JDBI 没有提供高级API来执行您要求的操作,因此您需要使用 JDBC API。也就是说,如果您不了解,JDBI提供对底层Connection
对象的访问作为JDBC的入口点:
DBI dbi = ...;
try (Handle h = dbi.open()) {
try (Connection c = h.getConnection()) {
try (ResultSet tables = c.getMetaData().getColumns(null, schema, "%", "%")) {
// loop over columns/tables here...
}
}
}
根据您的要求,您还可以查看Liquibase's diff功能,该功能可以满足您的需求:
liquibase.sh --driver=oracle.jdbc.OracleDriver \
--url=jdbc:oracle:thin:@testdb:1521:test \
--username=bob \
--password=bob \
diff \
--referenceUrl=jdbc:oracle:thin:@localhost/XE \
--referenceUsername=bob \
--referencePassword=bob