4

我正在尝试用 Spring 截断一个表:

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

得到错误:

引起:org.springframework.jdbc.BadSqlGrammarException: StatementCallback; 错误的 SQL 语法 [TRUNCATE TABLE RESULT_ACCOUNT];嵌套异常是 java.sql.SQLException: Unexpected token: TRUNCATE in statement [TRUNCATE]

有任何想法吗?

4

5 回答 5

5

这里的问题是您不能在现有事务中执行任何 DDL(例如截断)。原因是 DDL 执行自动提交,它与事务概念(即:回滚)无关。所以我将方法设置为NOT_SUPPORTED,我很好。

于 2010-05-25T15:22:23.170 回答
1

我发现 SQLExceptions 并不总是直接指向问题。我会尝试直接在数据库上运行截断查询,看看它是否有效。(您很可能会从数据库本身获得更好的调试信息。)这可能是违反外键约束、需要级联丢弃调用等。

于 2010-05-24T20:25:03.003 回答
0

这里数据库允许截断.. JDBC 模板或 Jdbc 驱动程序不允许截断操作

于 2015-02-06T18:00:37.303 回答
0

您确定要执行此命令的数据库支持该TRUNCATE TABLE命令吗?因为这个错误信息和异常类型听起来确实不像。

您可能想查看嵌套异常和堆栈跟踪的其余部分,以确定此消息来自何处。

于 2010-05-24T20:24:39.643 回答
-1

错误的根本原因是您的 SQL 语句对于您正在与之交谈的数据库无效。您可以判断,因为异常是 SQLException(即不是来自 Spring),因此您的 RDBMS 本质上是在说“我不知道“TRUNCAT TABLE FOO”的意思。

您将需要阅读您的数据库系统手册以了解如何截断您的表。尽管许多主要数据库(无论如何都是最新版本)似乎支持TRUNCATE TABLE语句,但听起来您的可能不支持。

虽然效率较低,但您也可以尝试查询表的名称在DELETE FROM FOO哪里。FOO

于 2010-05-24T20:28:04.230 回答