文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mysql中tinyint(1)对应java中的boolean问题及解决方案(jdbc查询)

2023-08-23 05:54

关注

首先展示下我的问题,可以看见id为66,64,63对应的month_age分别为1,1,0,但是数据库中这三条记录对应的month_age应该是11,5,0
在这里插入图片描述
在这里插入图片描述
造成这个错误的原因是我们在设计数据库时,将month_age这个字段的类型设为tinyint(1),而tinyint(1)对应java中的boolean类型,0对应false,非0对应true
在这里插入图片描述
然后由于我代码是这样写的

public DataList getChildVisitAndExaminList(Integer personId, Integer... createAgencyId) throws SQLException {        ArrayList<Object> condition = new ArrayList<>();        condition.add(personId);        Connection connection = JDBCUtils.getConnection();        String sqlStr = "select id,month_age,visit_date,doctor_id,doctor,next_date,create_agency,create_agencyid from" +                " tbl_children_visit where is_delete != 1 and person_id = ?";        if (createAgencyId.length > 0) {            sqlStr += " and create_agencyid = ?";            condition.add(createAgencyId[0]);        }        sqlStr += " order by id desc";        PreparedStatement ps = connection.prepareStatement(sqlStr);        for (int i = 0; i < condition.size(); i++) {            ps.setObject(i + 1, condition.get(i));        }        ResultSet rs = ps.executeQuery();        ResultSetMetaData md = rs.getMetaData();        int columnCount = md.getColumnCount();        Map<String, Object> rowData = new HashMap<>();        List<ChildrenListRes> list = new ArrayList<>();        while (rs.next()) {           for (int i = 1; i <= columnCount; i++) {                if (md.getColumnLabel(i).equals("visit_date") || md.getColumnLabel(i).equals("next_date")) {                    rowData.put(md.getColumnLabel(i),TimeUtil.timeStamp2Date(rs.getObject(i,Long.class)));                } else {                    rowData.put(md.getColumnLabel(i), rs.getObject(i));                }            }            String jsonStr = JSONObject.toJSONString(rowData);            ChildrenListRes childrenListRes = JSONObject.parseObject(jsonStr, ChildrenListRes.class);            list.add(childrenListRes);        }        // 拼接photo        ChildrenDao.getChildrenPhotoPath(list);        JDBCUtils.release(connection, ps, rs);        return new DataList(list);    }

在这里插入图片描述

rs.getObject(i)由于定义的是object类型,他这里拿到false就会转成0,true就会转成1

解决方案:
法一:改数据库字段类型
将tinyint(1)改为tinyint(4),mysql的tinyint默认为tinyint(4)
关于tinyint与java中类型对应关系可参考此链接
法二:修改代码,多添加一个判断,如下(这种情况针对数据库字段里面没用bit类型)

在这里插入图片描述

由于数据库不能轻易改动,所以我选择了法二,下面看下查询结果,成功解决
在这里插入图片描述

来源地址:https://blog.csdn.net/qq_34252060/article/details/130255142

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯