请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

提示owner_id不能为空

junit提示如下

com.imooc.o2o.exceptions.ShopOperationException: modifyShop error:addShop error:
### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'owner_id' cannot be null
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: INSERT INTO   tb_shop(owner_id, area_id, shop_category_id,   shop_name, shop_desc, shop_addr,   phone, shop_img, priority,   create_time, last_edit_time, enable_status,   advice)   VALUES   (?,?,?,?,   ?,?,?,?,?,   ?,?, ?,?)
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'owner_id' cannot be null
; SQL []; Column 'owner_id' cannot be null; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'owner_id' cannot be null

这是什么原因呢老师

正在回答 回答被采纳积分+3

4回答

qq_一缕阳光_31 2018-02-16 21:45:29

同样的问题  6-4课程的时候 仍然没有看到有获取owner_id的值呀 但是提示 为空

0 回复 有任何疑惑可以回复我~
翔仔 2018-01-11 03:03:34

同学好,错误非常明显啊,同学以后遇到这种问题需要根据错误仔细判断一下。。

这里说的是Column 'owner_id' cannot be null

就说列owner_id的值不能为空

调用INSERT INTO   tb_shop(owner_id, area_id, shop_category_id,   shop_name, shop_desc, shop_addr,   phone, shop_img, priority,   create_time, last_edit_time, enable_status,   advice)   VALUES   (?,?,?,?,   ?,?,?,?,?,   ?,?, ?,?) 即创建tb_shop的时候由于咱们tb_shop这张表里owner_id这个字段必须为非空,即店铺不能没有创建者的信息(不然都不知道店家是谁),因此做了这个限制不传递这个值就会报错。至于为什么没有这个值肯定是没传进来,这个同学调试就知道了 :)

0 回复 有任何疑惑可以回复我~
  • 提问者 苦做舟 #1
    老师您的select语句里面没有获取owner的值啊
    <select id="queryByShopId" resultMap="shopMap" parameterType="Long">
    		SELECT
    		s.shop_id,
    		s.shop_name,
    		s.shop_desc,
    		s.shop_addr,
    		s.phone,
    		s.shop_img,
    		s.priority,
    		s.create_time,
    		s.last_edit_time,
    		s.enable_status,
    		s.advice,
    		a.area_id,
    		a.area_name,
    		sc.shop_category_id,
    		sc.shop_category_name
    		FROM
    		tb_shop s,
    		tb_area a,
    		tb_shop_category sc
    		WHERE
    		s.area_id=a.area_id
    		AND
    		s.shop_category_id = sc.shop_category_id
    		AND
    		s.shop_id = #{shopId}
    	</select>
    所以导致owner_id为空
    回复 有任何疑惑可以回复我~ 2018-01-11 17:05:10
  • 提问者 苦做舟 #2
    还有就是执行了判断是否要更新图片的if语句之后,更新店铺信息就不执行了
    回复 有任何疑惑可以回复我~ 2018-01-11 17:34:36
  • 翔仔 回复 提问者 苦做舟 #3
    这个真需要调试呢,翔仔这边只能提供思路,还需要靠同学解决,其实调试一步步下去就能找到答案了,是否要更新图片的时候验证为什么没过,同学需要好好看看,并且有的时候视频后面也会说的,可以先学下去
    回复 有任何疑惑可以回复我~ 2018-01-11 17:37:13
提问者 苦做舟 2018-01-11 02:35:45

测试方法如下

@Test
	public void testModifyShop() throws ShopOperationException,FileNotFoundException{
		Shop shop = new Shop();
		shop.setShopId(1L);
		shop.setShopName("修改后的店铺名");
		File shopImg = new File("D:\\image\\dabai.jpg");
		InputStream is = new FileInputStream(shopImg);
		ShopExecution shopExecution = shopService.modifyShop(shop, is, "dabai.jpg");
		System.out.println("新的图片地址为:" + shopExecution.getShop().getShopImg());
	}


0 回复 有任何疑惑可以回复我~
提问者 苦做舟 2018-01-11 02:32:38

这是我的modifyShop方法

@Override
	public ShopExecution modifyShop(Shop shop, InputStream shopImgInputStrem, String fileName)
			throws ShopOperationException {
		if(shop == null|| shop.getShopId() == null) {
			return new ShopExecution(ShopStateEnum.NULL_SHOP);
		}else {
			try {
				//1.判断是否需要处理图片
				if(shopImgInputStrem != null && fileName!= null && !"".equals(fileName)) {
					Shop tempShop = shopDao.qureyByShopId(shop.getShopId());
					if(tempShop.getShopImg() != null) {
						ImageUtil.deleteFileOrPath(tempShop.getShopImg());
					}
					addShop(shop, shopImgInputStrem, fileName);
				}
				//2.更新店铺信息
				shop.setLastEditTime(new Date());
				int effectedNum = shopDao.updateShop(shop);
				if(effectedNum <= 0) {
					return new ShopExecution(ShopStateEnum.INNER_ERROR);
				}else {
					shop = shopDao.qureyByShopId(shop.getShopId());
					return new ShopExecution(ShopStateEnum.SUCCESS,shop);
				}
			} catch (Exception e) {
				throw new ShopOperationException("modifyShop error:" + e.getMessage());
			}
			
		}
	}

这是我的update和insert的xml文件

<insert id="insertShop" useGeneratedKeys="true" keyColumn="shop_id"
		keyProperty="shopId">
		INSERT INTO
		tb_shop(owner_id, area_id, shop_category_id,
		shop_name, shop_desc, shop_addr,
		phone, shop_img, priority,
		create_time, last_edit_time, enable_status,
		advice)
		VALUES
		(#{owner.userId},#{area.areaId},#{shopCategory.shopCategoryId},#{shopName},
		#{shopDesc},#{shopAddr},#{phone},#{shopImg},#{priority},
		#{createTime},#{lastEditTime}, #{enableStatus},#{advice})
	</insert>
	<update id="updateShop" parameterType="com.imooc.o2o.entity.Shop">
		update tb_shop
		<set>
			<if test="shopName != null">shop_name=#{shopName},</if>
			<if test="shopDesc != null">shop_desc=#{shopDesc},</if>
			<if test="shopAddr != null">shop_addr=#{shopAddr},</if>
			<if test="phone != null">phone=#{phone},</if>
			<if test="shopImg != null">shop_img=#{shopImg},</if>
			<if test="priority != null">priority=#{priority},</if>
			<if test="lastEditTime != null">last_edit_time=#{lastEditTime},</if>
			<if test="enableStatus != null">enable_status=#{enableStatus},</if>
			<if test="advice != null">advice=#{advice},</if>
			<if test="area != null">area_id=#{area.areaId},</if>
			<if test="shopCategory != null">shop_category_id=#{shopCategory.shopCategoryId}</if>
		</set>
		where shop_id=#{shopId}
	</update>


0 回复 有任何疑惑可以回复我~
  • 翔仔 #1
    同学好,insertshop之前还没有shop这条信息吧,那肯定也不会在insert前调用queryByShopId这个方法呀,这个方法只是为了展示店铺详情去做修改的,所以不需要有owner_id很正常啊,因为shop修改不涉及owner_id 
    而com.imooc.o2o.exceptions.ShopOperationException: modifyShop error:addShop error:
    ### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'owner_id' cannot be null
    ### The error may involve defaultParameterMap
    ### The error occurred while setting parameters
    ### SQL: INSERT INTO   tb_shop(owner_id, area_id, shop_category_id,   shop_name, shop_desc, shop_addr,   phone, shop_img, priority,   create_time, last_edit_time, enable_status,   advice)   VALUES   (?,?,?,?,   ?,?,?,?,?,   ?,?, ?,?)
    ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'owner_id' cannot be null
    ; SQL []; Column 'owner_id' cannot be null; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'owner_id' cannot be null 这个错误明显是发生在insert shop的 和queryByShopId这个方法没啥联系呢 :)
    回复 有任何疑惑可以回复我~ 2018-01-11 17:13:52
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信