com.exasol.jdbc.EXAResultSet无法转换为com.mysql.cj.jdbc.result.ResultSetImpl java.lang.ClassCastException

问题描述 投票:0回答:1

我正在尝试通过使用jdbc DatabaseMetadata和ResultSet进行查询来构建DatabaseTable(我的自定义对象)对象。

下面的代码在我对MySQL数据库运行时可以很好地工作,但是在对Exasol数据库进行尝试时,它会异常失败。

 private DatabaseTableColumnMetadata getTableAndColumnNames(DatabaseMetaData metaData)
        throws SQLException {
        ResultSet tables = metaData.getTables(null,null,"%",null);
        while (tables.next()){
            if (tables.getString("TABLE_TYPE").equalsIgnoreCase("TABLE")
                && ((ResultSetImpl) tables).getConnection().getCatalog()
                .equals(tables.getString("TABLE_CAT"))) {

                     DatabaseTable table = DatabaseTable.builder().name(tables.getString("TABLE_NAME")).schema(tables.getString("TYPE_SCHEM")).build();
             }
        }
}

抛出异常如下

com.exasol.jdbc.EXAResultSet cannot be cast to com.mysql.cj.jdbc.result.ResultSetImpl","message":"com.exasol.jdbc.EXAResultSet cannot be cast to com.mysql.cj.jdbc.result.ResultSetImpl","name":"java.lang.ClassCastException

抛出异常的行是它试图将tables对象强制转换为ResultSetImpl的行。

我在项目exajdbc.jar和mysql-connector.jar中都有两个jars

请帮助解决此问题的任何线索或提示。

mysql jdbc exasol
1个回答
0
投票

我不确定你为什么写这个表达式:

     ((ResultSetImpl) tables).getConnection().getCatalog()

在此表达式中,您将tables强制转换为特定于MySQL的结果集实现类,以使您可以访问其getConnection()方法。尝试使用此代码从Exasol数据库读取数据时遇到错误,也许并不奇怪,因为在这种情况下tables将是Exasol特定的结果集实现类。

当然,此结果集与传递到您的方法中的DatabaseMetaData对象来自同一数据库连接吗?我希望getConnection()对象的DatabaseMetaData方法返回相同的连接。

尝试用以下内容替换上面的表达式:

     metaData.getConnection().getCatalog()
© www.soinside.com 2019 - 2024. All rights reserved.