如何使用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 查询?