Работает ли CachedRowSet со всеми реализациями ResultSet? - PullRequest
0 голосов
/ 12 июня 2009

Я пытаюсь реализовать решение для подкачки базы данных (требуется только пересылка), используя CachedRowSet для вывода на страницу AS400JDBCResultSet, содержащего результаты моего запроса.

Я пытался использовать

CachedRowSet cachedRowSet = new CachedRowSetImpl();
cachedRowSet.setMaxRows(10);
cachedRowSet.setPageSize(10);
cachedRowSet.populate(resultSet);

, но полный набор результатов (65 записей) возвращается на первой странице (то есть, вызывая cachedRowSet.next()). Я также попробовал

CachedRowSet cachedRowSet = new CachedRowSetImpl();
cachedRowSet.setPageSize(10);
cachedRowSet.setMaxRows(0);
cachedRowSet.setUsername("username");
cachedRowSet.setPassword("password");
cachedRowSet.setUrl("jdbc:as400://dev;naming=system;libraries=*LIBL;prompt=false;");
cachedRowSet.setCommand(query);
cachedRowSet.execute(connection);

, но я получаю следующее исключение при execute() вызове

Exception in thread "main" java.lang.AbstractMethodError: java/sql/DatabaseMetaData.locatorsUpdateCopy()Z
    at com.sun.rowset.CachedRowSetImpl.initMetaData(CachedRowSetImpl.java:712)
    at com.sun.rowset.CachedRowSetImpl.populate(CachedRowSetImpl.java:617)
    at com.sun.rowset.internal.CachedRowSetReader.readData(CachedRowSetReader.java:190)
    at com.sun.rowset.CachedRowSetImpl.execute(CachedRowSetImpl.java:756)

Я пробовал как на IBM, так и на Sun JRE.

Есть идеи? Эта функция просто не поддерживается моим драйвером JDBC?

Обновление: Также происходит с драйвером MySQL - поэтому я должен делать что-то еще не так, верно?

Обновление (2): Заставили его работать на Java 5.0 и 6.0 для MySql Driver, но только на 6.0 для моего AS400JDBCDriver - оба с использованием метода 2, описанного выше. Кажется, в любом случае довольно медленно.

Ответы [ 2 ]

0 голосов
/ 24 июня 2009

Способ вызова драйверов изменился с более новыми версиями Java. В старой школе была дополнительная плита, но она все еще работает с Java 6.

Connection c = null;
try {
        Class.forName(driverString);
    } catch (ClassNotFoundException e) {
        //TODO
    }
c = DriverManager.getConnection(url, username, password);
0 голосов
/ 12 июня 2009

Похоже, ваш драйвер может быть не совместим с JDBC 3.0, то есть, когда наборы строк были введены в API. AbstractMethodError поддерживает это.

Проверьте документацию к драйверу, чтобы узнать, какую версию JDBC он поддерживает.

...