2012-10-26 41 views
1

尝试使用到Teradata的JDBC连接。我在Linux中编译时加载了tdgssconfig.jar和terajdbc4.jar文件,并使用javac将它们添加到类路径中。但在编译时我仍然遇到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"); 

我已经尝试了解Jdbc jar的jar,他们肯定有com/teradata/jdbc/TeraDriver.class。

我不知所措。任何想法我做错了什么?

回答

2

编译器没有从你的jar文件中寻找类com.teradata.jdbc.TeraDriver,它是对Class.forName()语句作出反应。

由于Class.forName()抛出ClassNotFoundException这是一个checked exception,您将需要处理它。

你既可以围绕异常的'的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.. 
     } 
    } 
} 
+0

非常感谢!自从我完成java之后,它已经很久了。 – rfusca

0

问题不在于你的类路径。只是你想要用try/catch块封装你的Class.forName行并且捕获检查到的异常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> 

我删除了行与测试范围,它的工作。