如何使用Spring JdbcTemplate截断表?

问题描述 投票:4回答:6

我试图用Spring截断一个表:

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

得到错误:

引起:org.springframework.jdbc.BadSqlGrammarException:StatementCallback;错误的SQL语法[TRUNCATE TABLE RESULT_ACCOUNT];嵌套异常是java.sql.SQLException:意外的标记:语句中的TRUNCATE [TRUNCATE]

有任何想法吗?

oracle spring truncate jdbctemplate
6个回答
5
投票

这里的问题是您不能在现有事务中执行任何DDL(例如truncate)。原因是DDL执行自动提交而不与事务概念(即:回滚)一起生成。所以我把方法设置为NOT_SUPPORTED,我很好。


1
投票

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


0
投票

您确定要执行此命令的数据库是否支持TRUNCATE TABLE命令?因为this error message and exception type肯定听起来不像。

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


0
投票

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


-1
投票

导致错误的根本原因是您的SQL语句对于您正在与之通信的数据库无效。你可以告诉,因为异常是一个SQLException(即不是来自Spring),所以你的RDBMS基本上说“我不知道”TRUNCAT TABLE FOO“的意思。

您需要阅读数据库系统的手册,以了解如何截断表格。虽然许多主要数据库(最近的版本)似乎支持TRUNCATE TABLE声明,但听起来你可能不会。

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


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

通过截断表可以正常工作

© www.soinside.com 2019 - 2024. All rights reserved.