1

TeradataへのJDBC接続を使用しようとしています。Linuxでコンパイルするときに、tdgssconfig.jarファイルとterajdbc4.jarファイルをロードし、javacを使用してクラスパスに追加しました。しかし、コンパイルしようとすると、ClassnotFoundExceptionが発生します。

しばらくの間Javaを使用していませんが、ネットを調べたところ、動作するはずです。

単純なコード:

import java.sql.*;
class TDtest {
    public static void main(String[] args) {    
        System.out.println(classpath);

        Class.forName("com.teradata.jdbc.TeraDriver");
    }
}

* .jarsは間違いなくそこにあります:

[user1@box java]# ls -l /home/user1/test/java/libs/*
-rwxrwxrwx 1 user1 user1 2405 Oct 26 12:00 /home/user1/test/java/libs/tdgssconfig.jar
-rwxrwxrwx 1 user1 user1 873860 Oct 26 12:00 /home/user1/test/java/libs/terajdbc4.jar

詳細なエラーログ-クラスパスが私には正しいようです:

javac -verbose -cp ".:/home/user1/test/java/libs/tdgssconfig.jar:/home/user1/test/java/libs/terajdbc4.jar" TDtest.java
[parsing started TDtest.java]
[parsing completed 21ms]
[search path for source files: .,/home/user1/test/java/libs/tdgssconfig.jar,/home/user1/test/java/libs/terajdbc4.jar]
[search path for class files: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/resources.jar,/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/rt.jar,/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/sunrsasign.jar,/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/jsse.jar,/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/jce.jar,/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/charsets.jar,/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/classes,/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/ext/dnsns.jar,/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/ext/sunpkcs11.jar,/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/ext/localedata.jar,/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/ext/gnome-java-bridge.jar,/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/ext/sunjce_provider.jar,.,/home/user1/test/java/libs/tdgssconfig.jar,/home/user1/test/java/libs/terajdbc4.jar]
[loading java/lang/Object.class(java/lang:Object.class)]
[loading java/lang/String.class(java/lang:String.class)]
[checking TDtest]
[loading java/lang/Class.class(java/lang:Class.class)]
[loading java/lang/Error.class(java/lang:Error.class)]
[loading java/lang/ClassNotFoundException.class(java/lang:ClassNotFoundException.class)]
[loading java/lang/Exception.class(java/lang:Exception.class)]
[loading java/lang/Throwable.class(java/lang:Throwable.class)]
[loading java/lang/RuntimeException.class(java/lang:RuntimeException.class)]
TDtest.java:4: unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown
        Class.forName("com.teradata.jdbc.TeraDriver");

jdbc jarのjarを解除してみましたが、間違いなくcom / teradata / jdbc/TeraDriver.classが含まれています。

私は途方に暮れています。私が間違っていることについて何か考えはありますか?

4

5 に答える 5

2

com.teradata.jdbc.TeraDriverコンパイラは、jar ファイルからクラスを探しているのではなく、Class.forName()ステートメントに反応しています。

チェックされた例外であるClass.forName()スローとして、それを処理する必要があります。ClassNotFoundException

例外を「try/catch」ブロックで囲むか、例外をスローしてコンパイルすることができます。

 class TDtest  {
   public static void main(String[] args) {    
      System.out.println(classpath);

      try {
         Class.forName("com.teradata.jdbc.TeraDriver");
      } catch (ClassNotFoundException e) {
         e.printStackTrace();
         // more error handling..
      }
   }
}
于 2012-10-26T18:06:43.647 に答える
0

これを試して

 try {
    Class.forName("com.teradata.jdbc.TeraDriver").newInstance();

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

     }
于 2012-10-26T18:16:55.207 に答える
0

問題はクラスパスに関するものではありません。Class.forName 行を try/catch ブロックでラップし、チェック済みの例外 ClassNotFoundException をキャッチしたいだけです。

于 2012-10-26T18:04:21.930 に答える