我尝试通过JDBC连接到Eclipse(Juno版本)的IBM DB2数据库。 我已将驱动程序(外部jar文件)添加到我的项目中并且驱动程序已正确加载...
public static void main(String[] args) throws SQLException, ClassNotFoundException {
Class.forName("com.ibm.db2.jcc.DB2Driver");
System.out.println("Driver loaded");
Connection dbConn = DriverManager.getConnection("jdbc:db2://***.**.***.*:50000/BWUEBDB", "username", "password");
System.out.println("Connected");
}
我也知道连接数据(数据库路径,用户名,密码)是正确的。 但是我得到了一个java.lang.NoClassDefFoundError:
Exception in thread "main" java.lang.NoClassDefFoundError: sun/io/UnknownCharacterException
at com.ibm.db2.jcc.b.a.<init>(a.java:238)
at com.ibm.db2.jcc.b.b.a(b.java:1624)
at com.ibm.db2.jcc.c.p.a(p.java:350)
at com.ibm.db2.jcc.c.p.<init>(p.java:404)
at com.ibm.db2.jcc.b.b.<init>(b.java:256)
at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:163)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at AppTest.main(AppTest.java:17)
Caused by: java.lang.ClassNotFoundException: sun.io.UnknownCharacterException
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 9 more
项目属性一定有问题,但我真的不知道在哪里寻找。
答案 0 :(得分:6)
我得到了同样的错误。我使用java 8运行它,我切换到Java 7并且它工作。
答案 1 :(得分:6)
您使用的是什么版本的驱动程序?我遇到了Java 1.8和驱动程序版本2(名为db2jcc.jar)的相同问题。使用驱动程序版本4(名为db2jcc4.jar),它可以完美运行。当使用例如, tomcat,只有正确的驱动程序在lib目录中是持久的。如果两个驱动程序都是持久的,它将严格使用旧驱动程序(版本2)。
答案 2 :(得分:2)
尝试使用来自驱动程序的直接连接,具有相同的类路径和用户。通过这种方式,您可以确保正确配置环境,问题来自Java。
java com.ibm.db2.jcc.DB2Jcc -url jdbc:db2://mysys.myloc.svl.ibm.com:446/MYDB -user db2user -password db2pass -tracin
您甚至可以在Eclipse中配置此行,方法是在&#34;运行...&#34;中传递参数。对话框,并在运行应用程序时使用相同的类路径。
答案 3 :(得分:0)
将DB2 jar更改为db2jcc4-9.7.jar
后,它可以正常工作。
我使用的JDK版本是1.8.0_131