我正在尝试使用Spring截断表:
jdbcTemplate.execute("TRUNCATE TABLE " + table);
获取错误:
引起:org.springframework.jdbc.BadSqlGrammarException: StatementCallback;糟糕的SQL语法 [TRUNCATE TABLE RESULT_ACCOUNT]; 嵌套异常是 java.sql.SQLException:意外 token:语句中的TRUNCATE [TRUNCATE]
有什么想法吗?
答案 0 :(得分:5)
这里的问题是您不能在现有事务中执行任何DDL(例如truncate)。原因是DDL执行自动提交而不与事务概念(即:回滚)一起生成。所以我把方法设置为NOT_SUPPORTED
,我很好。
答案 1 :(得分:1)
我发现SQLExceptions并不总是直接指向问题。我尝试直接在数据库上运行截断查询,看看它是否有效。 (您最有可能从数据库本身获得更好的调试信息。)可能是外键约束违规,需要级联掉线调用等。
答案 2 :(得分:0)
您确定要执行此命令的数据库是否支持TRUNCATE TABLE
命令?因为this error message and exception type肯定听起来不像。
您可能需要查看嵌套异常和堆栈跟踪的其余部分,以确定此消息的来源。
答案 3 :(得分:0)
这里数据库允许Truncate .. JDBC模板或Jdbc驱动程序不允许截断操作
答案 4 :(得分:-1)
错误的根本原因是您的SQL语句对于您正在与之交谈的数据库无效。你可以告诉,因为异常是一个SQLException(即不是来自Spring),所以你的RDBMS本质上说“我不知道”TRUNCAT TABLE FOO“的意思。
您需要阅读数据库系统手册,了解如何截断表格。尽管许多主要数据库(最近的版本)似乎都支持TRUNCATE TABLE
语句,但听起来你可能不会这样。
虽然效率较低,但您也可以尝试查询DELETE FROM FOO
,其中FOO
是您表格的名称。
答案 5 :(得分:-1)
int k =-1;
int k = getJdbcTemplate().update("truncate table Tablename");
if(k == 0)
System.out.println("Truncated");
else
System.out.println("Not Truncated");
通过截断表格可以很好地工作