dポイントプレゼントキャンペーン実施中!

Oracle 10g standardへのJDBC接続にてDatabaseMetaData.getTablesメソッドが上手く機能しません。
以下のコードにてOracleに接続してテーブル一覧をコンソールに表示したいのですがgetTables()メソッドで返されるResultSetの中身が無い(レコードが0行)ようです。
プログラム内に記述した接続情報(URL、スキーマ、カタログ、ユーザー、パスワード)でNaviCatから当該Oracleに接続すると問題なくテーブルなどが表示される事は確認済みです。
また同じプログラムで別に用意したOracle 10g Expressを接続先として設定すると問題なくコンソールにテーブル名一覧が表示されます。
プログラムに使用しているドライバはOracle 10g Expressの中に同梱されていたojdbc14.jarです。
これでは standard 版へは正常にメソッドが機能しないケースがあるのでしょうか?

どうぞ宜しくお願いします。

import java.sql.*;

public class OracleConTest {

public static void main(String[] args) {

try{
// ドライバクラスをロード
Class.forName("oracle.jdbc.driver.OracleDriver");
// データベースへ接続
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:XXXX", "XXXXUSR", "XXXXPWD");
// ステートメントオブジェクトを生成
DatabaseMetaData meta = con.getMetaData();
ResultSet rs = meta.getTables( "XXXX", "XXXX", null, new String[] {"TABLE"});


while (rs.next()) {
String tableName = rs.getString("TABLE_NAME");
System.out.println(tableName);
}

rs.close();

}catch( Exception e){
e.printStackTrace();
}
}
}

A 回答 (2件)

試しにカタログ名やら、スキーマ名やらを検索の限定に使用しなかったらどうなりますか?



ResultSet rs = meta.getTables(null, null, "%", null);

参考URL:http://www.oracle.com/technology/sample_code/tec …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
カタログ、スキーマ名を指定しないとテーブル名一覧が表示されました。
これはOracle側の権限の問題か何かでしょうか?

やりたい事は達成出来ましたが、
カタログ、スキーマを指定してもテーブル名が取れるケースもあるので理由が気になります。

いずれにしても助かりました。ありがとうございます。

お礼日時:2010/06/08 14:16

確認する環境がないので


気づいた点だけ挙げさせてもらうわ。

利用するドライバは
JDK1.4 > ojdbc14.jar
JDK1.5 > ojdbc5.jar
JDK1.6 > ojdbc6.jar
ないものは公式サイトからダウンロードすること。

oracle.jdbc.driver.OracleDriver
ではなく
oracle.jdbc.OracleDriver
を使うこと。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

新しいOracleは

oracle.jdbc.OracleDriver

を使用した方が良いんですね。
勉強になりました。

問題自体は以下のようにカタログ、スキーマを指定しなかったら解決しました。
先に試しておけば良かったです。
("%"を null にするのは試したんですが。。)

ResultSet rs = meta.getTables(null, null, "%", new String[] {"TABLE"});


ありがとうございました。

お礼日時:2010/06/08 14:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!