使用Java ODBC创建连接会导致java.sql.SQLException:无效的游标类型异常

Ocr*_*oke 7 java sql odbc jdbc

我正在尝试创建一个访问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);
}
Run Code Online (Sandbox Code Playgroud)

...我得到以下例外:

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)
Run Code Online (Sandbox Code Playgroud)

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

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

小智 0

“从表中选择 count(*) 作为行”。首先尝试将别名从“rows”替换为“Result”或其他内容。Rows 是 Oracle 中的保留关键字之一。我认为 select 除了错误 ora 00923 之外没有返回任何结果