4

Springでテーブルを切り捨てようとしています:

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

エラーを取得します:

原因:org.springframework.jdbc.BadSqlGrammarException:StatementCallback; 不正なSQL文法[TRUNCATETABLERESULT_ACCOUNT]; ネストされた例外はjava.sql.SQLExceptionです:予期しないトークン:ステートメント[TRUNCATE]のTRUNCATE

何か案は?

4

5 に答える 5

5

ここでの問題は、既存のトランザクション内でDDL(切り捨てなど)を実行できないことでした。DDLがトランザクションの概念(つまり、ロールバック)に適合しない自動コミットを実行する理由。だから私は方法をに設定しNOT_SUPPORTED、私は良かった。

于 2010-05-25T15:22:23.170 に答える
1

SQLExceptionsが常に問題を直接指しているとは限らないことがわかりました。データベースで直接切り捨てクエリを実行して、機能するかどうかを確認します。(データベース自体からはるかに優れたデバッグ情報を取得できる可能性があります。)これは、外部キー制約違反、カスケードドロップ呼び出しの必要性などである可能性があります。

于 2010-05-24T20:25:03.003 に答える
0

このコマンドを実行しているデータベースがコマンドをサポートしていることを確認しますTRUNCATE TABLEか?このエラーメッセージと例外タイプは確かにそうではないように聞こえるので。

ネストされた例外と残りのスタックトレースを調べて、このメッセージの送信元を確認することをお勧めします。

于 2010-05-24T20:24:39.643 に答える
0

ここで、データベースは切り捨てを許可します..JDBCテンプレートまたはJdbcドライバーは切り捨て操作を許可しません

于 2015-02-06T18:00:37.303 に答える
-1

エラーの根本的な原因は、話しているデータベースに対してSQLステートメントが無効であるということです。例外はSQLException(つまりSpringからではない)であるためわかります。したがって、RDBMSは基本的に「「TRUNCATTABLEFOO」が意味することを知りません。

テーブルを切り捨てる方法については、データベースシステムのマニュアルを読む必要があります。多くの主要なデータベース(とにかく最近のバージョン)はTRUNCATE TABLEステートメントをサポートしているように見えますが、あなたのデータベースはサポートしていないようです。

効率は劣りますが、テーブルの名前がDELETE FROM FOOどこにあるかというクエリを試すこともできます。FOO

于 2010-05-24T20:28:04.230 に答える