Сохранять пакетные операторы jdbc после исключения - PullRequest
0 голосов
/ 10 февраля 2012

Я вставляю данные из java в базу данных postgresql.Я использую драйвер jdbc postgresql для подключения.Я создаю пакет заявлений и отправляю для вставки за один раз.Но если соединение потеряно, то Java снова пытается соединиться с базой данных, используя пул соединений.Я попытался выполнить пакет снова, но запись не была вставлена.

PreparedStatement pstmt = connection.prepareStatement(INSERT_RECORD_TABLE_SQL);

while (iterator.hasNext()) {

pstmt.setLong(1, toLong(fields[0]));

pstmt.setLong(2, toLong(fields[1]));

....

pstmt.addBatch();

}

try{

pstmt.executeBatch();

} catch (Exception e) {

  Thread.sleep(60000);

  pstmt.executeBatch();

}

Мой вопрос заключается в том, могу ли я сохранить пакет операторов, которые могут быть выполнены в случае возникновения исключения?1006 *

Саурабх Гупта

1 Ответ

2 голосов
/ 10 февраля 2012

Это плохая вещь, чтобы поймать общее исключение.

Это плохо - спать одну минуту или любое другое «человеческое» значение времени.нужно повторно выполнить тот же код в блоке catch, как будто ничего не произошло, но вы обрабатываете исключение!И вы должны поймать новое возможное исключение в блоке catch.

Лучше:

try
{

   int[] updateCounts = pstmt.executeBatch();

} 
catch (BatchUpdateException be) 
{
    // if one of the commands sent to the database fails to execute properly 
    // or attempts to return a result set
    handleException(be);
    return;
}
catch (SQLException se) 
{
    //if a database access error occurs, this method is called on a closed Statement 
    //or the driver does not support batch statements
    handleException(se);
    return;
}

Вам нужна транзакция?То есть, если произошла ошибка, следует ли выполнить откат до состояния, в котором база данных находилась до начала, или можно повторить попытку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...