如何使用Spring JdbcTemplate截断表?

时间:2010-05-24 20:16:30

标签: oracle spring truncate jdbctemplate

我正在尝试使用Spring截断表:

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

获取错误:

  

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

有什么想法吗?

6 个答案:

答案 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");

通过截断表格可以很好地工作