スプリングjdbctemplateでテーブルを切り捨てる方法は?
-
04-10-2019 - |
質問
私は春でテーブルを切り捨てようとしています:
jdbcTemplate.execute("TRUNCATE TABLE " + table);
エラーを取得します:
原因:org.springframework.jdbc.badsqlgrammarexception:StatementCallback;悪いSQL文法[Truncate Table result_account];ネストされた例外はjava.sql.sqlexception:予期しないトークン:声明で切り捨てられます[truncate
何か案は?
解決
ここで問題は、既存のトランザクション内でDDL(切り捨てなど)を実行できないことでした。 DDLがトランザクションの概念(つまり、ロールバック)でジャイブしない自動コミットを行う理由です。そこで、方法を設定します NOT_SUPPORTED
そして、私は良かったです。
他のヒント
SQLExceptionsは常に問題を直接指しているとは限らないことがわかりました。データベースでTruncateクエリを直接実行して、それが機能するかどうかを確認してみます。 (データベース自体からはるかに優れたデバッグ情報を得る可能性が最も高くなります。)それは、外部の重要な制約違反、カスケードドロップコールの必要性などです。
このコマンドを実行しているデータベースがサポートしていることを確認してください。 TRUNCATE TABLE
指図?なぜなら このエラーメッセージと例外タイプ 確かにそうではないように聞こえます。
ネストされた例外とスタックトレースの残りの部分を見て、このメッセージがどこから来たのかを確実に確認することをお勧めします。
ここで、データベースはTruncateを許可します。JDBCテンプレートまたはJDBCドライバーが操作を切り捨てないことを許可しません
エラーの根本的な原因は、SQLステートメントが話しているデータベースに対して無効であることです。例外はsqlexception(すなわち春からではない)であるため、RDBMSは本質的に「「Truncat Table foo」が意味することを本質的に言っています。
テーブルを切り捨てる方法を見つけるには、データベースシステムのマニュアルを読む必要があります。多くの主要なデータベース(とにかく最近のバージョン)はサポートしているように見えますが TRUNCATE TABLE
声明、それはあなたのものではないように聞こえます。
効率が低いですが、クエリを試すこともできます DELETE FROM FOO
どこ FOO
テーブルの名前です。
int k =-1;
int k = getJdbcTemplate().update("truncate table Tablename");
if(k == 0)
System.out.println("Truncated");
else
System.out.println("Not Truncated");
テーブルを切り捨てることで正常に動作します