Frage

Ich versuche, eine Tabelle mit Frühling zu kürzen:

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

Erhalten Sie den Fehler:

Verursacht durch: org.springframework.jdbc.BadSqlGrammarException: StatementCallback; schlechte SQL-Grammatik [TRUNCATE TABLE RESULT_ACCOUNT]; verschachtelte Ausnahme ist java.sql.SQLException: Unerwarteter token: TRUNCATE in Aussage [TRUNCATE]

Irgendwelche Ideen?

War es hilfreich?

Lösung

Ausgabe hier war man jede DDL nicht tun kann (wie truncate) innerhalb einer bestehenden Transaktion. Grund ist, dass DDL tut ein Auto begehen, die nicht jive mit Transaktionskonzepte (zB: Rollback). Also habe ich die Methode NOT_SUPPORTED gesetzt und ich war gut.

Andere Tipps

Ich habe festgestellt, dass die SQLExceptions nicht immer direkt auf ein Problem hinweisen. Ich würde versuchen, die truncate Abfrage direkt auf der Datenbank ausgeführt wird und sehen, ob es funktioniert. (Sie erhalten viel besser Debug-Informationen aus der Datenbank selbst höchstwahrscheinlich.) Es könnte ein Fremdschlüssel Verletzung sein, die Notwendigkeit einer Kaskade Drop-Call, usw.

Sind Sie sicher, dass die Datenbank, die Sie die Ausführung des Befehls gegen Stützen der TRUNCATE TABLE Befehl? Da diese Fehlermeldung und Ausnahme Typ sicherlich klingt wie es funktioniert nicht.

Sie können einen Blick auf die verschachtelte Ausnahme und den Rest Ihres stacktrace nehmen wollen, um sicher zu sehen, wo diese Nachricht kommt.

Hier ist die Datenbank ermöglicht Kürzen .. JDBC-Vorlage oder der JDBC-Treiber erlaubt es nicht, truncate Operationen

Die Ursache des Fehlers ist, dass Ihre SQL-Anweisung für die Datenbank ungültig ist, dass Sie zu sprechen. Sie sagen können, weil die Ausnahme eine SQLException ist (das heißt nicht von Spring), so dass es Ihre RDBMS im Wesentlichen sagen: „Ich weiß es nicht, dass‚TRUNCAT TABLE FOO‘bedeutet.

Sie müssen Ihr Datenbanksystem Anleitung lesen, um herauszufinden, wie Sie Ihren Tisch zu verkürzen. Obwohl viele großen Datenbanken (neuere Versionen sowieso) zu Unterstützung TRUNCATE TABLE Aussagen erscheinen, es klingt wie Sie vielleicht nicht.

Obwohl weniger effizient, können Sie auch die Abfrage DELETE FROM FOO versuchen, wo FOO der Name Ihrer Tabelle ist.

int k =-1;
int k =  getJdbcTemplate().update("truncate table Tablename");
if(k == 0)
System.out.println("Truncated");
else
System.out.println("Not Truncated");

funktioniert gut von der Tabelle Kürzen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top