我正在尝试创建一个访问 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/