0

特定の文字列がデータベース (すべてのテーブル) に存在する場所を見つけようとしています。次のコードがあります。

 DatabaseMetaData md = con.getMetaData();
           ResultSet rs = md.getTables(null, null, "%", null);
           while (rs.next()) {
                stm = con.createStatement();
                String sql;
                sql = "SELECT * FROM "+rs.getString(3)+"WHERE F01 = '0000000000998'";
                rs2 = stm.executeQuery(sql);
                while(rs2.next()){                   
                System.out.println(rs.getString(3));
             }                    
           }          

問題は、F01 が存在しない一部のテーブルにあるため、例外がスローされます。列を指定しなくても、テーブル全体を検索できる方法はありますか?

4

2 に答える 2

1

使用しているデータベース。

このディスカッション投稿を見てください。チェックを呼び出す前に列が存在することを確認する方法について良いアイデアが得られるかもしれません http://www.coderanch.com/t/299298/JDBC/databases/Oracle-describe-table-jdbc

オラクルの場合、これらのクエリを確認できます

Lower(table_name) = 'product' の場合、user_tab_columns から COLUMN_NAME、DATA_LENGTH、DATA_TYPE を選択します。

したがって、あなたの呼び出しは次のようになります

user_tab_columns where upper(column_name) = 'F01' から table_name を選択し、次に SELECT * FROM "+rs.getString(1)+"WHERE F01 = '0000000000998'

ご覧のとおり、私は LOWER と UPPER を使用しています。SQL はステートメントで大文字と小文字を区別しませんが、条件付きチェックが行われる値は大文字と小文字を区別しますが、それらを必ず含める必要があります。

于 2013-11-08T20:02:31.697 に答える