java.sql.SQLException: 找不到适合 jdbc:odbc:Driver={Microsoft Text Driver (*.txt; *.csv)} 的驱动程序;DBQ=D:\Users\

java.sql.SQLException: No suitable driver found for jdbc:odbc:Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=D:\Users\

我需要有关 ODBC 的帮助 - JDBC CSV 接口,32 位 Java 1.7.0_72

我收到了这个代码

    private void connectToCSV(String file) {
    try {
        debug.println(path + file +" "+this.file);
        if (this.file == null){
            this.file = file;

            gfdiConnection = DriverManager.getConnection("jdbc:odbc:Driver={"+ driverCSV + "};DBQ=" + path );

        }
        if (this.file != file){

        this.file = file;
        gfdiConnection = DriverManager.getConnection("jdbc:odbc:DRIVER={" + driverCSV + "};DBQ=" + path);
        }
    } catch (SQLException e) {
        debug.println("Error while trying to connect to CSV");
        e.printStackTrace();
    } 
}

但我没收到 运行。

java.sql.SQLException: No suitable driver found for jdbc:odbc:Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=D:\Input\

我找到了

的建议
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
gfdiConnection = DriverManager.getConnection("jdbc:odbc:Driver={"+ driverCSV + "};DBQ=" + path );

但这在这里不起作用。

java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver

我还用

检查了驱动程序名称
 C:\Windows\SysWOW64\odbcad32.exe 

所以驱动程序有什么问题?

ODBC 需要安装一个用于提供连接的 activeX 控件,这意味着直接与 ODBC 接口的程序只需要确保系统上安装了这些驱动程序。 JDBC 相反,要求库(通常称为连接器的 jar 文件)位于提供该连接的类路径中。

您正在做的是尝试建立一个 ODBC 连接 通过 一个 JDBC 连接,这意味着您可能需要 both 要安装的 activeX 控件以及类路径中的 JDBC 连接器。连接器的名称是正确的,但它也必须在类路径中。

您需要做的是找到提供 jdbc-odbc 桥的 jar 文件,并确保它在您的程序启动时位于您的类路径中。您可能还有其他问题,但至少如果您没有看到 ClassNotFoundException,那么您已经解决了缺少 jdbc 驱动程序的问题。

您最终应该考虑在 Java 中使用 ODBC 的替代解决方案。

检查 java 构建路径中是否有相应的 JAR 以防止项目出错

我手动添加了 rt.jar 来构建路径,现在 "sun.jdbc.odbc.JdbcOdbcDriver" 不再有错误,但是我得到了一个 NullpointerException

Exception in thread "Thread-1" java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.initialize(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at database.GfDIConnect.connectToCSV(CSVConnect.java:85)
at database.GfDIConnect.queryCSV(CSVConnect.java:147)
at database.GfDIConnect.gfdiBTRSTToPostgreSQL(CSVConnect.java:297)
at view.MainRefactor.run(MainRefactor.java:2434)
at java.lang.Thread.run(Unknown Source)

CSVConnect.java:85 是

gfdiConnection = DriverManager.getConnection("jdbc:odbc:Driver={"+ driverCSV + "};DBQ=" + path );

这个解决方案是不是又快又脏?

编辑

我找到原因了,在 1.8 JRE 上仍然存在构建路径库 - JRE System Library,更改为 1.7 后可以正常工作

System.getProperty("java.version") 报告“1.8.0_66”,因此应用程序实际上是 运行 在 Java 8 下,它已删除 JDBC-ODBC 桥.