2012-10-26 4 views
1

Teradata에 대한 JDBC 연결로 작업하려고합니다. Linux에서 컴파일 할 때 tdgssconfig.jar 및 terajdbc4.jar 파일을로드하고 javac를 사용하여 classpath에 추가했습니다. 하지만 컴파일 할 때 ClassnotFoundException이 발생합니다.Teradata 및 JDBC 드라이버 - classnotfoundexception ...하지만 거기에 있습니까?

잠시 동안 Java로 작업하지는 못했지만 그물을 훑어 보았고 작동해야하는 것처럼 보입니다.

간단한 코드 :

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

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

이 * 및 .jar 확실히있다 :

[[email protected] 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"); 

I 'jar'jdb 'jar'ing 시도하고 그들 com/teradata/jdbc/TeraDriver.class 확실히 있습니다.

나는 손실에 처해있다. 내가 뭘 잘못하고 있는거야?

답변

2

컴파일러가 jar 파일에서 com.teradata.jdbc.TeraDriver 클래스를 찾지 못하면 Class.forName() 문에 응답합니다.

Class.forName()checked exceptionClassNotFoundException을 던집니다.이를 처리해야합니다.

당신은`시도/캐치 '블록에서 예외를 둘러싸고하거나 예외를 던질 수 중

컴파일 :

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.. 
     } 
    } 
} 
+0

감사합니다. 내가 java를한지 오래되었습니다. – rfusca

0

문제는 클래스 경로에 관한 것이 아닙니다. try/catch 블록으로 Class.forName 행을 래핑하고 검사 된 예외를 catch하려는 경우 ClassNotFoundException

0

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

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

    } 
0

을 시도 나는이

Exception in thread "main" java.lang.ClassNotFoundException: 
com.ncr.teradata.TeraDriver 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:191) 
at com.ebay.quality.bp.Z_Query_Teradata.main(Z_Query_Teradata.java:15) 
있어

Dependency Hierarchy 탭에서 pom.xml 파일을 검사했을 때 종속성 옆에 테스트가 있다는 것을 알았습니다.

<dependency> 
    <groupId>com.thirdparty.teradata</groupId> 
    <artifactId>terajdbc4</artifactId> 
    <version>14.10.00.17</version> 
    <scope>test</scope> 
</dependency> 

테스트 범위로 라인을 제거했는데 작동했습니다.