jdbcTemplate问题

kischn 2013-11-30 02:17:26

@Override
public int save(final TestEntity testEntity){
KeyHolder keyHolder = new GeneratedKeyHolder();
this.getJdbcTemplate().update(new PreparedStatementCreator(){
@Override
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
//写sql语句
String sql = "insert into testEntity(name,passwd) values(?,?)";
//设置PreparedStatement并设置它要返回主键
PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
//设置要插入的值
ps.setString(1, testEntity.getName());
ps.setString(2, testEntity.getPasswd());
return ps;
}
}, keyHolder);
//返回主键
return keyHolder.getKey().intValue();
}

上面是刚学和jdbcTemplate保存对象返回主键的方法,可是我保存的时候的确返回了主键,但是没有保存对象 是什么情况?数据库里面没有任何数据,倒是主键在涨……

private static TestEntityService testEntityService;

@BeforeClass
public static void setUpBeforeClass() throws Exception {
ApplicationContext ctx = new FileSystemXmlApplicationContext("src/applicationContext.xml");
testEntityService = (TestEntityService)ctx.getBean("TestEntityService");
}

@Before
public void setUp() throws Exception {
}

@Test
public void saveTest(){
TestEntity test = new TestEntity();
test.setName("abc");
test.setPasswd(MD5Util.md5("123"));
System.out.println(testEntityService.save(test));
}
结果是能输出主键,但是数据库里面没有数据?
...全文
152 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kischn 2013-12-01
  • 打赏
  • 举报
回复
引用 8 楼 kischn 的回复:

@Test
	public void saveAndGet(){
		TestEntity test = new TestEntity();
		test.setName("abc");
		test.setPasswd(MD5Util.md5("123"));
		int n = 0;
		n = testEntityService.save(test);
		System.out.println("key:"+n);
		TestEntity test2 = null;
		test2 = testEntityService.get(4);
		System.out.println("name:"+test2.getName());
		test2 = testEntityService.get(n);
		System.out.println("name:"+test2.getName());
	}
我这样测试了一下,结果在下面: key:12 name:123 name:null 而且如果在DAO层加一个打印输出的话test2 = testEntityService.get(n);这个并没有去访问DAO层是什么情况?
测试错了,是访问了,但是拿不出数据来,因为数据没有保存。。
kischn 2013-12-01
  • 打赏
  • 举报
回复

@Test
	public void saveAndGet(){
		TestEntity test = new TestEntity();
		test.setName("abc");
		test.setPasswd(MD5Util.md5("123"));
		int n = 0;
		n = testEntityService.save(test);
		System.out.println("key:"+n);
		TestEntity test2 = null;
		test2 = testEntityService.get(4);
		System.out.println("name:"+test2.getName());
		test2 = testEntityService.get(n);
		System.out.println("name:"+test2.getName());
	}
我这样测试了一下,结果在下面: key:12 name:123 name:null 而且如果在DAO层加一个打印输出的话test2 = testEntityService.get(n);这个并没有去访问DAO层是什么情况?
kischn 2013-12-01
  • 打赏
  • 举报
回复
引用 5 楼 u012852259 的回复:
[quote=引用 4 楼 u012852259 的回复:] 你这个是@Test,貌似这个会在执行完之后恢复数据库环境。也就是最后数据库回滚。
@Test public void saveTest(){ }[/quote] 那我在一个Test里面先存再取一次试试~
ganshenml 2013-12-01
  • 打赏
  • 举报
回复
引用 5 楼 u012852259 的回复:
[quote=引用 4 楼 u012852259 的回复:] 你这个是@Test,貌似这个会在执行完之后恢复数据库环境。也就是最后数据库回滚。
@Test public void saveTest(){ }[/quote]单元测试会回滚?are you sure?
poooll 2013-12-01
  • 打赏
  • 举报
回复
引用 4 楼 u012852259 的回复:
你这个是@Test,貌似这个会在执行完之后恢复数据库环境。也就是最后数据库回滚。
@Test public void saveTest(){ }
poooll 2013-12-01
  • 打赏
  • 举报
回复
你这个是@Test,貌似这个会在执行完之后恢复数据库环境。也就是最后数据库回滚。
kischn 2013-12-01
  • 打赏
  • 举报
回复
引用 1 楼 jackwumengfeng 的回复:
莫非这个与事务有关?
前几天身体出了点事,刚回来,我也觉得和事务有关,不知道在类上加一个@Transactional对不对,反正加了也没有保存……
kischn 2013-12-01
  • 打赏
  • 举报
回复
前几天身体出了点事,刚回来,我也觉得和事务有关,不知道在类上加一个@Transactional对不对,反正加了也没有保存……
南猿北蛰 2013-11-30
  • 打赏
  • 举报
回复
莫非这个与事务有关?

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧