Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Проблема с Derby: SQLTransactionRollbackException


Автор: Redhopter 12.3.2009, 12:16
Привет всем. Сейчас делаю проект с базой данных Derby поставляемой в Java 6 и возникла такая проблема.
Необходимо проверить, есть ли запись в таблице, если нет - то надо вставить, если есть - то обновить. Стандартная ситуация.
Операция с добавлением записи проходит на ура, а при обновлении вылетает java.sql.SQLTransactionRollbackException: A lock could not be obtained within the time requested. 
Приведу исходный код
Код

//объект Connection получаем от пула соединений.
Connection connection = pool.getConnection();
        try {
//Создаем PreparedStatement  для поиска записи
            PreparedStatement statement = connection.prepareStatement(FIND_KOFF, ResultSet.TYPE_SCROLL_SENSITIVE,
                                     ResultSet.CONCUR_UPDATABLE);
            statement.setString(1, o.getId());
            statement.setString(2, "" + year);
            statement.setString(3, "" + (month + 1));
            statement.execute();
            ResultSet set = statement.getResultSet();
//Проверяем, содержит ли ResultSet что-либо или пуст
            if (set.next()) {
//Перешли на запись и обновляем ее.
                set.updateString(1, value);
                set.updateRow();//в этой строчке валится SQLTransactionRollbackException
            } else {
//Записей нет, ниже код для добавления записи, который выполняется на ура.
                statement = connection.prepareStatement(INSERT_INCLUDE);
                statement.setString(1, o.getId());
                statement.setString(2,  "" + year);
                statement.setString(3, "" + (month + 1));
                statement.setString(4, value);
                statement.execute();
            }
            statement.close();
        } catch (SQLException ex) {
            logger.error("method setIncludeGroupProfit() ", ex);
            throw new AdvertException(AdvertException.FIND_EXCEPTION);
        }

Пожалуста, помогите решить проблему с обновлением.
Также пробывал создавать разные connection и все равно таже проблема. Разработку веду в Netbeans и заметил что при запуске программы не могу подключиться к базе данных. Может быть в этом тоже есть часть проблемы?

Автор: ivg 12.3.2009, 16:32
см. http://db.apache.org/derby/docs/10.4/ref/rrefsqlj41360.html#rrefsqlj41360__sqlj15384
проверяйте соответствие требований.
В PreparedStatement кроме setString() есть методы для установки значений и других типов.
Updatable ResultSet позволяет также вставку значений делать, см. ResultSet#moveToInsertRow();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)