2015-06-18 4 views
0

Есть ли способ, используя JDBI, получить информацию о том, какие таблицы содержатся в схеме?Перечислить таблицы базы данных с помощью JDBI

У меня есть две базы данных и B, и мне нужно, чтобы иметь возможность

  1. запроса и получить список таблиц из него;
  2. запрос B и убедитесь, что эти же таблицы существуют и имеют те же определения (меня не интересуют данные в таблицах).

Я могу сделать это с помощью mysqldump из командной строки: извлекать CREATE TABLE заявления каждой базы данных и сравнить их. Но теперь мне нужно сделать это как часть теста в контексте Dropwizard/JDBI.

Документация немного разрежена, но я не могу найти что-либо подходящее, чтобы позволить мне это сделать. Я мог бы быть в состоянии

handle.execute("show tables"); 

и т.д., но это кажется немного низкий уровень, и я надеялся, что будет лучше.

Или мне нужно прибегнуть к JDBC?

ответ

1

JDBC имеет несколько независимых поставщиков баз данных.

Из соединения вы можете получить DatabaseMetaData и выполнить запрос по выражению (null = any).

DatabaseMetaData meta = connection.getMetaData(); 
ResultSet rs = meta.getColumns(...); 

Остерегайтесь: имена могут быть чувствительны к регистру здесь и тому подобное.

1

Я просто столкнулся с этим сам. JDBI не предоставляет API высокого уровня, чтобы делать то, что вы просите, поэтому вам необходимо использовать API-интерфейсы JDBC. Тем не менее, на всякий случай, если вы не знаете, 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 
Смежные вопросы