ResultSet.next () занимает слишком много времени для нескольких записей

1

Я использую OJDBC(v7) для подключения к Oracle(11g), в Java. В некоторых случаях на некоторых больших таблицах Resultset не может получить данные в соответствующее время.

Например, выходные записи всего 2, но в Resultset.next() java зависает и слишком долго ждет!

Примечание1 . Проблема не в настройке FetchSize(), RsultSet.TypeX, а не в пулах соединений, таких как c3p0 ,.... Я тестировал все эти.

Примечание2: Также, когда я запускаю запрос непосредственно в navicat, результат отображается отлично!

Получение метода подключения:

public Connection getDBConnection() throws DBConnectionException {
        Connection conn = null;

        String connectionUrl;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection("jdbc:oracle:thin:user/[email protected]:1521:DBNAME");

        } catch (Exception e) {
            e.printStackTrace();
            throw new DBConnectionException();
        }

        return conn;
    }

соединение с частью БД:

    ...
    conn = connectionManager.getDBConnection();
    conn.setAutoCommit(false);
    String query = "{call ...(...)}";
    CallableStatement stmt = conn.prepareCall(query,ResultSet.TYPE_FORWARD_ONLY,
                    ResultSet.CONCUR_READ_ONLY);
    stmt.setFetchSize(10000); 
    .
    .
    .
    stmt.registerOutParameter(x, OracleTypes.CURSOR);
    stmt.execute();
    Resultset rs = (ResultSet) stmt.getObject(x);

    while (rs.next()) {    /** Problem occurs here **/
        ...
    }

ЗАЧЕМ?!

  • 0
    вы фактически commit() транзакцию вручную после создания запроса SP?
  • 0
    @ Мохаммед, да, я делаю.
Показать ещё 1 комментарий
Теги:
resultset
ojdbc

1 ответ

0

использовать в блоке try catch:

if ((cnn==null)||cnn.isClosed()){
    cnn=DB.getDBConnection(); //e.g. DB is instance of class where getDBConnection() resides
}

Затем вызовите запросы. Я верю, что где-то в вашем коде либо вы закрываете соединение, либо соединение становится нулевым, почему вы столкнулись с этой проблемой.

ура

Ещё вопросы

Сообщество Overcoder
Наверх
Меню