Próbuję utworzyć program Java, który uzyskuje dostęp do źródła danych ODBC. Korzystanie poniższy kod ...Tworzenie połączenia z językiem Java ODBC skutkuje wyjątkiem java.sql.SQLException: Niepoprawny typ kursora
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);
}
... pojawia się następujący wyjątek:
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)
Początkowo, kiedy próbuje rozwiązać to na własną rękę, używałem pusty createStatement argumentów(), ale to prowadzi do powyższego wyjątku (dlatego użyłem TYPE_FORWARD_ONLY zestawu wyników, ale wciąż ten sam wynik):
Czy jest coś jeszcze, co mogę spróbować z tym czy to wymaga innego podejścia?
sprawdź, czy zmieniać, czy podczas, gdy dokładnie.nie mówi podczas (rs.next()) { System.out.print ("Liczba wszystkich wierszy wynosi" + rs.getInt ("wiersze")); } –
@PiumiWandana - To nie działało w przypadku wyjątku Invalid Cursor Type. – Ocracoke
Spróbuj dodać parametr 'ResultSet.CLOSE_CURSORS_OVER_COMMIT' w' createStatement() ', aby sprawdzić, czy pomaga –