博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring进行TestNG测试中无法插入、删除数据库数据(access)的解决
阅读量:6692 次
发布时间:2019-06-25

本文共 2118 字,大约阅读时间需要 7 分钟。

我的Spring项目在Eclipse上使用TestNG进行DAO的测试,也就是增删改查的过程中,发现可以正常从access数据库查询数据,但是无法正常插入和删除数据。console中没有报错,直接进入数据库看,确实没有修改的痕迹。可以正常查询说明JdbcTemplate的操作本身没有问题,但是不能修改数据库。

这是为什么?
遇到这个问题说明自己基础知识差。
我当时的思路是这样的:
可以查询但是不能删除和新增,说明我的sql语句没有提交(commit)。
这种思路源于直接使用java语言特性编写JDBC代码的经验,因为你需要在POJO中手动显式的调用下面的语句

setAutoCommit(false);commit();

我当时的想法是,我的sql语句没有被手动提交或者自动提交,因此没有生效

这个想法是愚蠢的,因为,你并没有直接写POJO,你使用的是Spring提供的JdbcTemplate,你根本不用担心“提交”这个问题,因为Spring封装的JdbcTemplate让这个问题对你透明了。

然后我觉得,一定和“事务”有关。

很可能是我写的代码,使用了Spring的“事务”,但是事务本身没有被提交。
这样想,就接近了问题的起因了。

我们捋顺一下:

1.access数据库本身是不存在“事务”支持的(不同于Mysql的Innodb引擎)
2.Spring代码的事务支持

我查看自己的Spring配置文件,确实添加了事务管理器,如下:

我们的Spring配置文件中,配置了一个dbcp管理的access数据库的数据源,而且,为这个数据源配置了JdbcTemplate和事务管理器。

那么我们为什么要进行这种配置呢?

因为我们想使用Spring的JdbcTemplate访问access数据库,那么为什么要配置事务管理器呢?

哈哈,这就是问题的实质了,原因是我们写完代码以后要使用TestNG进行测试。让我们重新看一看测试代码:

package com.infotech.access.dao;import java.util.ArrayList;import java.util.Date;import java.util.List;import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests;import org.testng.annotations.*;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import com.infotech.access.domain.CheckedList;import static org.testng.Assert.*;@ContextConfiguration("classpath*:/ruku-context.xml")public class CheckedlistDaoTest extends **AbstractTransactionalTestNGSpringContextTests**{        private CheckedlistDao cld;        @Autowired    public void setCheckedlistDao(CheckedlistDao cldlocal){        this.cld = cldlocal;    }        @Test    public void testAcess() {       }}

上面就是TestNG的测试代码,测试代码中首先导入Spring配置文件ruku-congtext.xml,然后让这个测试类extends AbstractTransactionalTestNGSpringContextTests

也就是让我们的测试类拥有事务。
这篇博文介绍了TestNG中有关于事务的内容。
继承AbstractTransactionalTestNGSpringContextTests类,test方法中的测试数据不会真的提交数据库,他将在test方法执行完毕后进行回滚。如果你希望控制测试代码的事务提交,可以通过一些annotation来完成。
如下代码:

@Rollback(false)@Test    public void testAcess() {       }

在你的TestNG测试类中将测试方法标注如上所示的annotation,测试事务就提交了,就可以进行数据的插入和删除了哦

转载地址:http://oajoo.baihongyu.com/

你可能感兴趣的文章
Firefox 46解决安全问题,改善性能
查看>>
Gilt如何将微服务部署到AWS环境,介绍ION-Roller
查看>>
携程对AIOps场景和算法的探索与实践
查看>>
JavaOne 2016——首日亮点
查看>>
用WinForm/WPF代码来为.NET Core 3.0功能投票
查看>>
BAT集体升级云事业部,这背后都藏着哪些“小心思”?
查看>>
Clojure 1.7引入Transducers,提高跨平台支持度
查看>>
QCon北京2015精彩内容前瞻:邀请100余位一线专家,涵盖大数据、云计算、移动等20余个专题...
查看>>
京东私有云建设:挑战与应对之道
查看>>
入门解读:小白也能看懂的容器和虚拟机介绍
查看>>
微软宣布在Azure API管理中预览OpenAPI规范V3
查看>>
Studio 3T:MongoDB SQL探究
查看>>
学习Kubernetes 和容器技术体系的最佳方法
查看>>
红帽收购混合云管理提供商NooBaa,混合云爆发节点临近!
查看>>
Go 1.12发布:改进了运行时性能以及模块支持
查看>>
重提敏捷已死
查看>>
深入理解JUnit 5的扩展模型
查看>>
PostgreSQL中的大容量空间探索时间序列数据存储
查看>>
AWS发布Lambda@Edge,支持在CloudFront CND的边缘服务器上执行Node.js函数
查看>>
Wia为物联网提供云基础设施
查看>>