java - 使用 Java ODBC 创建连接会导致 java.sql.SQLException : Invalid Cursor Type exception

标签 java sql jdbc odbc

我正在尝试创建一个访问 ODBC 数据源的 Java 程序。使用以下代码...

Connection conn;

try {
    Driver d = (Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
    DriverManager.registerDriver(d);
    String URL = "jdbc:odbc:AR System ODBC Data Source";
    conn = DriverManager.getConnection(URL);
} catch (SQLException | InstantiationException | IllegalAccessException | ClassNotFoundException e) {
    Logger.error(this, e);
} 

Statement s = null;
ResultSet rs = null;

try {
    s = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
    rs = s.executeQuery("select count(*) as rows from table");

    if (rs.next()) {
        System.out.print("Count of all rows is " + rs.getInt("rows"));
    }
} catch (SQLException e) { 
     e.printStackTrace();
} finally {
    DBUtils.safelyClose(s, rs);
}

...我得到以下异常:

java.sql.SQLException: The result set type is not supported.
   at sun.jdbc.odbc.JdbcOdbcStatement.initialize(Unknown Source)
   at sun.jdbc.odbc.JdbcOdbcConnection.createStatement(Unknown Source)
   at sun.jdbc.odbc.JdbcOdbcConnection.createStatement(Unknown Source)
   at com.csc.remedyarchiver.data.input.ODBCConnection.main(ODBCConnection.java:38)

最初,当我试图自己解决这个问题时,我使用的是空参数 createStatement() 调用,但这导致了上述异常(因此我使用 TYPE_FORWARD_ONLY 结果集类型但结果仍然相同) :

还有什么我可以尝试的吗?或者这需要不同的方法吗?

最佳答案

来自用于检索数据集的 Oracle 文档:

Note: Not all databases and JDBC drivers support all ResultSet types. The method DatabaseMetaData.supportsResultSetType returns true if the specified ResultSet type is supported and false otherwise.

https://docs.oracle.com/javase/tutorial/jdbc/basics/retrieving.html

因此,首先,您可能需要检查您的连接是否支持您尝试使用的结果集。

connection.getMetaData().supportsResultSetType(ResultSet.TYPE_FORWARD_ONLY)
connection.getMetaData().supportsResultSetType(ResultSet.CONCUR_READ_ONLY)

对于我的配置,上述方法都返回 true。因此,您发布的代码在我的环境中有效。我敢打赌,其中一个(或两个)将为您返回 false,我猜这是您的数据库本身或您使用的 Oracle JDBC 驱动程序版本的问题。您可能想确保您使用的是最新的 OJDBC 驱动程序,您可以从这里获得:

http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html

如果您已确认您使用的是最新的驱动程序,我将验证您正在使用的数据库版本及其支持的结果集。

关于java - 使用 Java ODBC 创建连接会导致 java.sql.SQLException : Invalid Cursor Type exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26339155/

相关文章:

sql - 如何从批处理文件执行 postgres 的 sql 查询?

php - 使行在 MySQL 中处于非事件状态

java - Android:使用 JDBC 连接 MySql

java - 如何在需要引用过滤器bean的grails中注册spring bean

java - Eclipse - 默认情况下使重写方法和类最终

java - Android Mediaplayer Streaming - 现在工作但没有

java - JPA 多对多

SQL:如何获取表的每个最大值?

mysql - eclipse中使用JDBC连接MySQL

java - 无法使用 sqljdbc4.jar 连接到 MSSQL Server 2012