bladex物联平台,产品模型创建数据库字段,类型有误

Blade 未结 2 241
82101697
82101697 2024-10-11 16:39

一、该问题的重现步骤是什么?

1. 编辑产品物模型

2. 字段的数据类型选择--bool布尔类型

3.发布上线,tdengine时序数据库创建基础表

4.基础表创建的对应的字段属性值不是布尔类型是TINYINT类型

5.导致插入时报错desc: syntax error near '' (invalid numeric data)


二、你期待的结果是什么?实际看到的又是什么?

1、创建物模型型,上布上线,数据类型要与数据库的一致


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

bladex-links,版本最新代码,操作系统windows

四、请提供详细的错误堆栈信息,这很重要。

image.png

image.pngimage.png

image.png



五、若有更多详细信息,请在下面提供。


image.png

2条回答
  •  admin
    admin (楼主)
    2024-10-11 19:07

    bool型是固定的0和1的值,不能传true和false。所以是转换成的tinyint字段。

    你现在是传0或者1报错,还是传了true false报错的?

    作者追问:2024-10-11 19:07

    我传的true,false;但是生成sql不会转换成01,需要在sql生成时候自己转换吗?导致我插入语句为true/false,执行语句报错

    回答: 2024-10-11 19:07

    需要直接传0和1,而且物模型创建的时候就已经给bool类型声明好0和1了。有些特殊设备是传不了字符只能传数字的。如果还要做一层转换,那么服务器性能又会降一大截。那种每秒几万几十万并发,服务器去一个一个判断处理是扛不住的。

    作者追问:2024-10-11 19:07

    image.png

    image.png


    1、明白,那我只能自己转换一下了,因为设备传过来参数就是true/false;

    2、设备传文件路径,生成sql的时候变成单斜杠,我单独拿生成的sql语句去数据库执行会报错。因为单斜杠的问题;这个需要怎么处理?

    回答: 2024-10-11 19:07

    这个后续还得看看有没有什么比较好的优化方案。

    双斜杠的问题在json序列化的时候都会发生,不管是fastjson还是jackson。在JSON中,反斜杠(\)是一个特殊字符,用于转义其他特殊字符。当你在JSON字符串中看到 \\ 时,它表示字面量上的一个反斜杠。因此,当你将JSON反序列化回Java对象时,这些转义的反斜杠会被转换成单个反斜杠。 在你提供的JSON示例中,file_path 字段包含一个Windows风格的文件路径,其中使用了反斜杠作为目录分隔符。在JSON字符串中,每个反斜杠都被写作 \\,以确保在解析JSON时不会被误认为是转义字符的开始。 当你将这个JSON反序列化为Java对象时,JSON解析器会自动将 \\ 转换为单个反斜杠 \。这意味着在Java对象中,file_path 字段将正确地包含单个反斜杠,就像你在文件系统中看到的那样。

    作者追问:2024-10-11 19:07

    1、我用的tdengine时序数据库,物模型bool类型,设备上传过来的是true/false,我应该在哪个代码块做转换,识别成true/false得就转成0/1

    回答: 2024-10-11 19:07

    还是从类型映射上处理,得建立一个新的bool类型,和01型分开。这样映射到新的tf型就会绑定到td到Bool字段,这样后续来数据就会自动转了。

    我们后续得去测试一下如果绑定给Bool字段,但是传递01,td会不会自动转,如果不会自动转,那就需要创建一个新的bool物模型字段。

    还有就是为什么我们不默认用Bool,因为真实场景远比想象的复杂,除了true和false外,还有有一种unknown,这样的话Bool字段直接不支持了。但是数字类型可以是0、1、2、3这样。如果一定只能传递true和false,但是又有unknown的情况,我们一般是创建一个枚举字段来处理的。

    回答: 2024-10-11 19:07

    关于这个路径的问题,我们本地测试了下,是不会报错的。

    双斜杠通过json序列化后会自动变成单斜杠,这个是统一的标准,再java里双斜杠的第一个斜杠是转义符,这是没有问题的。

    你具体报错的日志提供一下看看呢。

    CleanShot20241012175732@2x.png

    作者追问:2024-10-11 19:07

    image.png


    增加斜杠:执行成功


    image.png

    作者追问:2024-10-11 19:07

    image.png


    1、你这个不像是tdengine时序库吧,时序库是links,  你执行的是taos

    回答: 2024-10-11 19:07

    最后一个不要带斜杠,taos就是tdengine,官网:https://www.taosdata.com/。

    现在bool映射应该改成Bool了,你看下dev分支更新下。

    作者追问:2024-10-11 19:07

    已经看到更新,感谢支持,斜杠问题我代码在生成sql拼接的时候再转义一下好了。谢谢

提交回复