具有InterBase JDBC驱动程序的NoClassDefFoundError sun/io/ByteToCharConverter

mjn*_*mjn 8 java interbase jdbc java-8

使用InterClient 7.5.1和8.1.5,在Java 8中创建新的JDBC连接失败

java.lang.NoClassDefFoundError: sun/io/ByteToCharConverter
Run Code Online (Sandbox Code Playgroud)

InterClient JDBC库似乎引用或使用此类.Java 7没有出现错误.有没有办法解决此错误?


此代码重现了Java 8上的问题:

package com.example.so25365952;

import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main {
    interbase.interclient.Connection conn; 

    public static void main(String[] args) {
        try {
            Class.forName("interbase.interclient.Driver");           
            DriverManager.getConnection("jdbc:interbase://localhost/data/mydb.gdb", "sysdba", "password123");           
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

线程"main"中的异常java.lang.NoClassDefFoundError:interbase.interclient.Connection.connect中的interbase.interclient.Connection.connect(未知源)中的sun/io/ByteToCharConverter.(interknown.interclient.Driver.connect中的未知源)(未知来源)来自java.sql.DriverManager.getConnection(DriverManager.java:664)的java.sql.DriverManager.getConnection(DriverManager.java:247)at com.example.so25365952.Main.main(Main.java:14) by:java.lang.ClassNotFoundException:位于java.net.URLClassLoader $ 1.run(URLClassLoader.java:372)的sun.io.ByteToCharConverter,位于java.security的java.net.URLClassLoader $ 1.run(URLClassLoader.java:361).位于java..L.Tisc.Launcher的java.lang.ClassLoader.loadClass(ClassLoader.java:424)java.net.URLClassLoader.findClass(URLClassLoader.java:360)的AccessController.doPrivileged(Native Method)$ AppClassLoader.loadClass(Launcher. java:308)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)... 6更多

Kay*_*man 6

sun.*和sunw.*包是内部的,不应该用于这个原因.好像InterClient的某个人搞砸了.我建议你用错误报告联系他们,这样他们就会知道为将来的版本修复这个问题.

如果您不能等待将来的版本,并且愿意打破一些许可证(当然我不推荐).您可以通过从此处复制代码并将其添加到bootstrap类路径来创建自己的sun.io.ByteToCharConverter -Xbootclasspath,但这将是最后的手段.


小智 5

使用db2jcc4.jar这是最新版本.如果你改变主意使用Java8,你需要使用它.我有similirar问题,这个更改帮助我修复错误.