Как обрезать таблицу с помощью Spring JdbcTemplate? - PullRequest
4 голосов
/ 25 мая 2010

Я пытаюсь обрезать таблицу с помощью Spring:

jdbcTemplate.execute("TRUNCATE TABLE " + table);

Получите ошибку:

Причина: org.springframework.jdbc.BadSqlGrammarException: StatementCallback; плохая грамматика SQL [TRUNCATE TABLE RESULT_ACCOUNT]; вложенное исключение java.sql.SQLException: неожиданный токен: TRUNCATE в заявлении [TRUNCATE]

Есть идеи?

Ответы [ 6 ]

5 голосов
/ 25 мая 2010

Проблема здесь заключалась в том, что вы не можете выполнить DDL (например, усечение) в рамках существующей транзакции. Причина в том, что DDL выполняет автоматическую фиксацию, которая не сочетается с концепциями транзакций (например, откат). Поэтому я установил метод на NOT_SUPPORTED, и я был хорош.

1 голос
/ 25 мая 2010

Я обнаружил, что исключения SQLE не всегда указывают непосредственно на проблему. Я бы попробовал запустить усеченный запрос непосредственно в базе данных и посмотреть, работает ли он. (Скорее всего, вы получите намного лучшую отладочную информацию из самой базы данных.) Это может быть нарушение ограничения внешнего ключа, необходимость вызова каскадного сброса и т. Д.

0 голосов
/ 15 февраля 2019
int k =-1;
int k =  getJdbcTemplate().update("truncate table Tablename");
if(k == 0)
System.out.println("Truncated");
else
System.out.println("Not Truncated");

Хорошо работает, обрезая таблицу

0 голосов
/ 06 февраля 2015

Здесь база данных разрешает усечение .. Шаблон JDBC или драйвер Jdbc не разрешают операции усечения

0 голосов
/ 25 мая 2010

Основная причина ошибки заключается в том, что ваш оператор SQL недопустим для базы данных, с которой вы разговариваете. Вы можете сказать, потому что это исключение SQLException (т.е. не из Spring), поэтому ваша СУБД, по сути, говорит: «Я не знаю, что означает« TRUNCAT TABLE FOO ».

Вам нужно будет прочитать руководство к вашей системе баз данных, чтобы узнать, как усечь вашу таблицу. Хотя многие крупные базы данных (последние версии в любом случае), по-видимому, поддерживают операторы TRUNCATE TABLE, похоже, что ваша не может.

Хотя это и менее эффективно, вы также можете попробовать запрос DELETE FROM FOO, где FOO - это имя вашей таблицы.

0 голосов
/ 25 мая 2010

Вы уверены, что база данных, для которой вы выполняете эту команду, поддерживает команду TRUNCATE TABLE? Потому что это сообщение об ошибке и тип исключения определенно звучит так, как будто это не так.

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

...