2015-07-02 3 views
-1

Я пытаюсь преобразовать хранимую процедуру MySQL в Java-код. Это довольно простой SQL. Он создает три временных таблицы, а затем выбирает их на основе. Тем не менее, у меня возникают проблемы с SQLWarnings, связанными с вырезанием данных при создании последней таблицы temp.Как подавить JDBC SQLWarnings?

Я не ищу объяснения самих предупреждений. Я получал те же предупреждения во время выполнения хранимой процедуры (из-за неправильно отформатированных полей datetime), только там это не вызывало у меня проблем. В java-версии после того, как Statement.executeUpdate() выбрасывает SQLWarning, временная таблица, которую я пыталась создать, не существует.

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

Мой код выглядит примерно так:

sqlStatement = "create temporary table mytemptable as (select ...) ;"; 
try { 
    stmt.executeUpdate(sqlStatement); 
    // Throws SQLWarning about Data Truncation 
} catch (SQLWarning sqlW) { 
    logInfo("SQLWarning Caught: " + sqlW.getMessage()); 
} 
stmt.executeQuery("select * from mytemptable "); 
// Throws SQLException because mytemptable doesn't exist 
+0

Пробовал это? http://dev.mysql.com/doc/mysqltest/2.0/en/writing-tests-warning-supp.html –

+0

Может быть, плохая формулировка с моей стороны, но, как я уже сказал в своем посте, я не хочу притворяться, что предупреждений не существует. Я хотел бы получить предупреждения, но я не хочу, чтобы они прерывали выполнение моего кода, бросая SQLException. – user1538516

+0

Итак, в этом случае вся таблица tmp не была создана. Поэтому просто игнорировать предупреждение не поможет. Можете ли вы попробовать: CREATE TEMPORARY TABLE mytemptable AS SELECT * FROM {yourtable} WHERE 0 = 1; И второе заявление: INSERT IGNORE INTO mytemptable SELECT * FROM {yourtable}; Это снова не вернет предупреждение ..... Он будет поддерживать ваш код –

ответ

0

Для меня это немного странно, но эквивалент этого работал: создать временную таблицу mytemptable игнорировать выберите ...;

Таким образом, исключение не генерируется jdbc, но вы все равно можете вызвать getWarnings() для объекта Statement, чтобы получить список предупреждений, которые были проигнорированы.

Спасибо Norbert van Nobelen за то, что помогли мне разобраться в комментариях OP.

Смежные вопросы