在eclipse中通过jdbc连接DB2数据库

Posted

技术标签:

【中文标题】在eclipse中通过jdbc连接DB2数据库【英文标题】:Connect to DB2 database in eclipse via jdbc 【发布时间】:2014-07-11 04:43:17 【问题描述】:

我正在尝试通过 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

项目属性一定有问题,但我真的不知道去哪里找。

【问题讨论】:

您的用户名或密码是否偶然包含非 ASCII 字符? 您使用的是什么 JRE?似乎未找到 sun.io.UnknownCharacterException,这可能特定于 Sun/Oracle JRE。您是否尝试过其他方法,例如实例化 com.ibm.db2.jcc.DB2SimpleDataSource 实例? 我没有让它与 com.ibm.db2.jcc.DB2SimpleDataSource 一起使用。您能否提供适合我的案例的示例代码?我正在使用 JRE 1.4 顺便说一句。 【参考方案1】:

将 DB2 jar 更改为 db2jcc4-9.7.jar 后,它可以正常工作,没有任何问题。

我使用的JDK版本是1.8.0_131

【讨论】:

【参考方案2】:

您使用什么版本的驱动程序?我在 Java 1.8 和驱动程序版本 2(名为 db2jcc.jar)中遇到了同样的问题。使用驱动程序版本 4(名为 db2jcc4.jar)它可以完美运行。请确保,当使用例如tomcat,只有正确的驱动程序才能持久保存在 lib 目录中。如果两个驱动程序都是持久的,它将严格使用旧的(版本 2)。

【讨论】:

我必须切换到 DB2JCC4 版本 4.19.26 才能使其与 AIX+Java8 一起使用。从 IBM 获得:www-01.ibm.com/support/docview.wss?uid=swg21363866 我从 db2jcc-1.3.1.jar 切换到 db2jcc-1.4.2.jar 来解决 Java 8 的这个问题。【参考方案3】:

我遇到了同样的错误。我使用 java 8 运行它,我切换到 Java 7 并且它工作正常。

【讨论】:

【参考方案4】:

尝试使用来自驱动程序的直接连接,具有相同的类路径和用户。这样可以确保你的环境配置正确,问题出在Java。

http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2.luw.apdv.java.doc/src/tpc/imjcc_rjv00004.html

java com.ibm.db2.jcc.DB2Jcc -url jdbc:db2://mysys.myloc.svl.ibm.com:446/MYDB -user db2user -password db2pass -tracin

您甚至可以在 Eclipse 中配置这一行,方法是在“运行...”对话框中传递参数,并使用与运行应用程序相同的类路径。

【讨论】:

以上是关于在eclipse中通过jdbc连接DB2数据库的主要内容,如果未能解决你的问题,请参考以下文章

与 DB2 for i 的 JDBC 连接 - 只有单一模式的表可用

无法创建到 Test Container for DB2 的 JDBC 连接

jsp用jdbc连接db2数据库的方法

java使用jdbc连接数据库步骤

如何在 ibm worklight 中通过 sql 适配器从 db2 检索或显示 html 页面上的数据?安卓混合应用开发

与 DB2 的 JDBC 连接?