骤跌 2023-09-08 11:16 采纳率: 75%
浏览 7
已结题

关于#java#的问题:代码实际运行出现了如下问题:以下两行代码报错——表示price的值为空此前price处是直接goods.getPrice来获取的,系统还未获取到值(相关搜索:数据库)

编写java商品系统简单的购物车功能板块:
1.maven框架使用mybatis的mapper代理开发。
2.数据库表jsu_1存放的商品信息
3.jsu_1_shopcar存放购物车的商品信息,
4.代码逻辑:将须下单商品通过方法拿出来,下单处理后,将商品变化的数量更新jsu_1的数据,同时将下单的商品数量信息存入jsu_1_shopcar表。
代码实际运行出现了如下问题:
以下两行代码报错——表示price的值为空
此前price处是直接goods.getPrice来获取的,问题出现后我以为是代码运行快啦,系统还未获取到值,直接运行完了,但我修改代码后,问题始终存在。

shopcar shopcar = new shopcar(name,price,number);
 mapper.addshopcar(shopcar);

以下是改板块的实现代码:

public class Buy extends BasePurchase {
    @Override
    public void buy(){
        try {
            System.out.println("输入商品名及须下单数量:");
            Scanner scanner = new Scanner(System.in);
            String name = scanner.nextLine();
            int number = scanner.nextInt();
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            jsu_1Mapper mapper = sqlSession.getMapper(jsu_1Mapper.class);
            goods goods = mapper.selectByname(name);
            if(goods!=null){
                String price = goods.getPrice();
                if (price != null) {
                    int Number = goods.getNumber();
                    if (goods.getNumber()>=number){
                        shopcar shopcar = new shopcar(name,price,number);
                        mapper.addshopcar(shopcar);
                        goods goods1 =new goods("","",Number-number);
                        mapper.update(goods1);
                        System.out.println("下单成功");
                    }else {
                        System.out.println("库存不足");
                    }
                } else {
                    System.out.println("商品价格为空");
                }
            }else{
                System.out.println("商品不存在");
            }
            sqlSession.commit();
            sqlSession.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以下是报错信息:


```java
Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'price' cannot be null
### The error may exist in mapper\jsu_1Mapper.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: INSERT INTO jsu.jsu_1_shopcar(name,price,number)VALUES(?,?,?);
### Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'price' cannot be null
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:199)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184)
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
    at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:152)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85)
    at com.sun.proxy.$Proxy4.addshopcar(Unknown Source)
    at implementation.shop.Buy.buy(Buy.java:36)
    at page.ShopPage.shoppage(ShopPage.java:36)
    at implementation.manage.UserEnter.userenter(UserEnter.java:37)
    at page.Sign_in.sign_in(Sign_in.java:21)
    at Main.main(Main.java:4)
Caused by: java.sql.SQLIntegrityConstraintViolationException: Column 'price' cannot be null
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:118)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916)
    at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354)
    at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47)
    at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)
    at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
    at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
    at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)
    ... 10 more

求路人指点迷津

  • 写回答

2条回答 默认 最新

  • 格子先生Lab 2023-09-08 11:44
    关注

    确定price是否有值,字段是否对应

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月16日
  • 已采纳回答 9月8日
  • 创建了问题 9月8日

悬赏问题

  • ¥15 如何构建全国统一的物流管理平台?
  • ¥100 ijkplayer使用AndroidStudio/CMake编译,如何支持 rtsp 直播流?
  • ¥20 和学习数据的传参方式,选择正确的传参方式有关
  • ¥15 这是网络安全里面的poem code
  • ¥15 用js遍历数据并对非空元素添加css样式
  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)
  • ¥50 python写segy数据出错
  • ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了
  • ¥30 3D多模态医疗数据集-视觉问答
  • ¥20 设计一个二极管稳压值检测电路