2010-05-24 8 views
4

Je suis en train de tronquer une table avec le printemps:Comment tronquer une table avec Spring JdbcTemplate?

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

Obtenez l'erreur:

Caused by: org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [TRUNCATE TABLE RESULT_ACCOUNT]; nested exception is java.sql.SQLException: Unexpected token: TRUNCATE in statement [TRUNCATE]

Toutes les idées?

Répondre

5

Problème ici était que vous ne pouvez pas faire de DDL (comme tronquer) dans une transaction existante. à DDL fait une validation automatique qui ne jive pas avec les concepts transactionnels (c'est-à-dire: rollback). Donc, j'ai mis la méthode à NOT_SUPPORTED et j'étais bon.

+0

Comment avez-vous défini la méthode 'NON_SUPPORTED'? –

0

Etes-vous sûr que la base de données à laquelle vous exécutez cette commande prend en charge la commande TRUNCATE TABLE? Parce que this error message and exception type sonne certainement comme il ne le fait pas.

Vous pouvez jeter un oeil à l'exception imbriquée et au reste de votre pile pour voir d'où vient ce message.

1

J'ai constaté que les SQLExceptions ne pointent pas toujours directement sur un problème. J'essaierais d'exécuter la requête truncate directement sur la base de données et de voir si cela fonctionne. (Vous obtiendrez de meilleures informations de débogage de la base de données elle-même.) Il peut s'agir d'une violation de contrainte de clé étrangère, d'un appel de suppression de cascade, etc.

+0

Oui, il fonctionne lorsqu'il est exécuté directement sur la base de données. ?? –

0

La cause de l'erreur est que votre SQL La déclaration n'est pas valide pour la base de données à laquelle vous parlez. Vous pouvez le dire parce que l'exception est une SQLException (c'est-à-dire pas de Spring), donc votre RDBMS dit essentiellement "Je ne sais pas que" TRUNCAT TABLE FOO "signifie

Vous aurez besoin de lire le manuel de votre système de base de données pour savoir comment tronquer votre table. Bien que de nombreuses bases de données majeures (les versions récentes de toute façon) semblent soutenir TRUNCATE TABLE déclarations, il semble que le vôtre ne peut pas.

Bien que moins efficace, vous pouvez aussi essayer la requête DELETE FROM FOOFOO est le nom

+0

La commande fonctionne quand elle est exécutée sur la base de données. –

0

Voici la base de données permet troncature .. modèle JDBC ou le pilote JDBC ne permet pas les opérations de truncate

Questions connexes