如何使用Spring JdbcTemplate截断表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Spring JdbcTemplate截断表?相关的知识,希望对你有一定的参考价值。

我试图用Spring截断一个表:

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

得到错误:

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

有任何想法吗?

答案

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

另一答案

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

另一答案

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

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

另一答案

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

另一答案

导致错误的根本原因是您的SQL语句对于您正在与之通信的数据库无效。你可以告诉,因为异常是一个SQLException(即不是来自Spring),所以你的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");

通过截断表可以正常工作

以上是关于如何使用Spring JdbcTemplate截断表?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Framework 中的 JdbcTemplate 类执行 INSERT 语句

如何使用 Spring 的 JdbcTemplate 重用相同的连接?

如何使用 spring 的 jdbcTemplate 在 SQL 查询中指定参数

如何使用 Spring 的 JDBCTemplate 有效地执行 IN() SQL 查询?

如何使用 Spring 的 JdbcTemplate 连接一个简单的 MySql 数据库?

如何执行 IN() 和 WHERE=?使用 Spring 的 JDBCTemplate 进行 SQL 查询