2017-10-03 6 views
0

からいくつかの特定のテーブルには、私は、データベースに多くのテーブルを持っていますが、私はいくつかの特定のテーブルデータベース

からデータを取得したい、次のように私はこれをやっているの取得:

DatabaseMetaData md = conn.getMetaData(); 
ResultSet rs = md.getTables(null, null, "%", null); 
while (rs.next()) { 
    System.out.println(rs.getString(3)); 
} 

が、これから私はすべて取得していますデータベースに存在するテーブル。しかし、私は特定のパターンでいくつかのテーブルだけを退職させたい。 パターンは

a_employee_raw 
a_employee2_raw 

b_employee_raw 
b_employee2_raw 

はまた、これらのテーブルにデータが含まれているかいないかどうかを確認したい、このようなものです。提案してください。

+0

あなたのアプリケーションでフィルタリングを行うのはオプションではありませんか?何故なの? – AKSW

+0

データベースとして1000個のテーブルが含まれているため、特定のテーブルを取得したい。すべてを取得してからフィルタリングに時間がかかる – user8646082

答えて

1

the documentation of DatabaseMetaData.getTablesをチェックしましたか?それは言う:

tableNamePattern - テーブル名パターン。それはデータベース

そしてDatabaseMetaDataの導入テキストに格納されたテーブル名 と一致している必要があり、それは言う:

一部DatabaseMetaData方法がString パターンの引数を取ります。これらの引数はすべて、fooPatternなどの名前を持ちます。 のパターン文字列の中で、 "%"は、0以上の任意の部分文字列に一致することを意味します。 文字で、 "_"は任意の1文字に一致します。検索パターンに一致するメタデータ のみが返されます。検索パターン 引数がnullに設定されている場合、その引数の条件は検索から削除されます。

つまり、LIKEのように動作します。第二と第三_は任意の文字にマッチしますので、これは、少し広い一致する可能性

md.getTables(null, null, "__EMPLOYEE%_RAW", null); 

:(メタデータでstoresUpperCaseIdentifiers()や友人をご確認ください)大文字で特定のデータベースに格納するテーブル名を仮定すると、あなたのようなものを使用することができますそしてリテラルアンダースコアだけでなく、%は数字以外のものと一致します。

小文字で、デフォルトでは、データベーステーブルを格納するには、(または引用された作成され、実際に小文字を保存されているこれらのテーブル場合)、あなたは使用する必要がある場合:

md.getTables(null, null, "__employee%_raw", null); 

注それは良いかもしれないことを使用しますリテラルアンダースコア(_

md.getTables(null, null, "_\\_EMPLOYEE%\\_RAW", null); 

より広い一致の問題に対処するために、以下が、私はすべてのJDBCドライバは、実際のパターンにSQLにLIKE -escapesをサポートしている場合はわかりません。