CREATE TABLE success_killed( `seckill_id` BIGINT NOT NULL COMMENT '秒杀商品ID', `user_phone` BIGINT NOT NULL COMMENT '用户手机号', `state` TINYINT NOT NULL DEFAULT -1 COMMENT '状态标识:-1:无效 0:成功 1:已付款 2:已发货', `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (seckill_id,user_phone),/*联合主键*/ KEY idx_create_time(create_time) )ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='秒杀成功明细表';
create_time要设置默认值
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'。
检查你创建表success_killed时,有没有设置create_time默认值。
解决了
定义数据库的时候编码格式有问题 应该是UTF8
或者是因为你的编译工具字符格式与数据库不一致
#(seckillId),#(userPhone)
改成
#{seckillId},#{userPhone}
配置spring和junit整合没有。junit要加载springIOC容器。
@RunWith(SpringJUnit4ClassRunner.class)
// 告诉junit spring配置文件
@ContextConfiguration({"classpath:spring/spring-dao.xml"})
嗯,问题还是我自己解决的。。贴个源码地址,有相同问题同学可以参考参考https://github.com/superggb/seckill
junit没有报错吗
原因是create_time字段没有给默认值,因此在插入时,数据库默认为:00000000,全0数值,mysql认为其为无效取值;
解决方式:在数据库链接地址后添加?zeroDateTimeBehavior=convertToNull
数据库连接出问题的话,记得把jdbc.properties中的username="root"改成user="root"。因为spring 中在取${username}中默认会取到你目前电脑的用户名,而不是数据库用户名,所以只需要将username改为user,然后取${user}就没问题了
update返回0表示你update失败,通常情况下update都要有where条件的,肯定是where条件不符合导致的,所以应该从where条件入手去看问题
我猜:where条件中有中文而且jdbc.jdbcUrl中没有设置useUnicode=true&characterEncoding=utf8
仅仅是我的猜测,因为我在这里碰到过坑
当时我也是update,传入的where条件中有中文,并且没有写utf-8那些参数,所以实际传入到数据库的条件变成了乱码,自然where不匹配,所以失败了
把地址改成本地的IP试一下吧
请你看看
是不是名字写错了,比如大小写
给代码发一下,看看是不是配置文件写错了。或者用debug测测,看看哪个环节出问题了
BindingException 绑定错误,检查mapper文件名和dao文件名,还有xml里传的实体类型是否正确。
固定格式, 参考官方文档
为什么你的jdbc.properties中要在每个配置项前都加上jdbc.呢??
这一部分还没说到spring的配置,所以没有,只有mybatis的配置
如在测试queryByIdWithSeckill()方法的时候遇到了:
Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp错误,
那是因为:SuccessKilled表在创建的时候,有create_time字段(属性为timestamp),但并没有给该字段设定默认值。后插入数据时,create_time字段的值就变成了:0000-00-00 00:00:00.
"0000-00-00 00:00:00" 在MySQL中是作为一个特殊值存在的,但 java.sql.Date 将其视为不合法的值,格式不正确。
解决办法:
方法一:jdbc的url后面,追加上参数:
?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
方法二:给timestamp字段加上默认值
如以当前时间作为默认值,这样就不会是"0000-00-00 00:00:00"了。
这个也不是问题啊
其实效果都是一样的
只不过@Autowired是由spring框架实现的,而@Resource是Java自带的
org.springframework.beans.factory.annotation.Autowired; javax.annotation.Resource;
将AndroidManifest.xml里的android:minSdkVersion调低点
classpath指的是编译后的class目录,src/main/java 和src/main/resource编译后都会直接到class目录(可以查看target目录中的class来印证这一点),在这个是在build path里面配置的; 改为<property name="mapperLocations" value="classpath:mapper/*.xml"/>就行了
我也是这个问题 请问最后如何解决的