精华内容
下载资源
问答
  • js long类型数值在前端获取错误问题

    千次阅读 2018-06-22 18:06:00
    今天遇到很奇葩的问题我在数据库的id是: 91848267993710592,然后前端访问response里面的id是: 91848267993710592最后到页面上id是: 91848267993710600这主要是因为js里面number类型的数值范围是2的53次方...

    今天遇到个很奇葩的问题

    我在数据库的id是: 91848267993710592,然后前端访问response里面的id是: 91848267993710592

    最后到页面上id是: 91848267993710600



    这个主要是因为js里面number类型的数值范围是2的53次方减1,因为我的id数值过大导致显示不正确的

    展开全文
  • Java读取Oracle中LONG类型数据

    千次阅读 2019-02-21 16:23:29
    我在读取某张表的时候,发现,其中的一个字段的类型LONG(长字符串类型,最大可存储2G的内容), 然后我通过mybatis,查询数据库,自动封装到JavaBean中,用String类型来接受,发现报错(Causedby:java.sql....

    刚刚在工作中遇到的一个问题,数据库是客户方的,我们不能更改。
    我在读取某张表的时候,发现,其中的一个字段的类型是LONG(长字符串类型,最大可存储2G的内容),

    然后我通过mybatis,查询数据库,自动封装到JavaBean中,用String类型来接受,发现报错(Caused by: java.sql.SQLException: 无效的列型: getCLOB not implemented for class oracle.jdbc.driver.T4CVarcharAccessor)
    方式一:然后就上百度查询原因,网上说Oracle中的LONG类型可以当作BLOB类型来处理,我试了,我的不行。

    方式二:继续查询,有网友说可以通过函数或者触发器来把LONG类型转换成VARCHAR2类型,我试了是可以的,


    但是之后我又遇到了一个问题,就是当LONG中的数据长度不大于 32767的时候,上面的方法是完全可以的,
    我的数据长度超过了这个大小,所以报错(ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小)

    方式三(推荐):把接收的字段的JDBCTYPE设置成LONGVARBINARY而不是LONGVARCHAR,
    这样就可以接收了。java 实体使用 String 类型接该字段,mybatis sql 中使用 resultMap 形式,sql resultMap 如下

    然后在写SQL的时候,需要把LONG字段写在最后一个位置
    select id,name,content from xxx;  其中content是LONG类型数据,,这样就可以了.

     

    展开全文
  • 文章目录1.引子2.具体问题(1)初试EL表达式取long型数值...在做项目中,发现了一个诡异的事情,后台的long数字不能正确地在前端页面显示。经过我的反复排查问题,总算是找到了问题原因所在,希望能帮助到大家,让...

    1.引子

           在做项目中,发现了一个诡异的事情,后台的long型数字不能正确地在前端页面显示。经过我的反复排查问题,总算是找到了问题原因所在,希望能帮助到大家,让大家少走弯路。

    2.解决问题

    (1)初试EL表达式取long型数值

           后台java代码设置属性

            BlogDetail currentBlog = pageModel.getDataArray().get(0);
            //request中设置属性,以供前端页面获取
            request.setAttribute("curBlog", currentBlog);
            int categoryId = currentBlog.getCategoryId();
            //打印博客的long型id
            Long blogId = currentBlog.getId();
            System.out.println("单篇博客id"+blogId);
    

           前端页面的html及js脚本

    	<button type="button" style="margin-left: 100px"
    					onclick="deleteBlog(${curBlog.id})"
    				class="layui-btn layui-btn-primary layui-btn-sm">
    						<i class="layui-icon"></i> 	</button>
    <script type="text/javascript">
    	function deleteBlog(id) {
    	alert(id);
    	return;
    	/**
    	if (!confirm("确定要删除这篇博客吗?")) {
    		return;
    	}
    	$.ajax({
    		type: "POST",
    		url: "<%=basePath%>blogDetailServlet?action=delete",
    		data: { "id": id },
    		success: function (result) {
    			if (result == 1) {
    				alert("当前博客删除成功");
    
    				if ($("#currPage").val() == 1){
    					location.href = "<%=basePath%>blogDetailServlet?action=showOne";
    				} else {
    					location.href = "<%=basePath%>blogDetailServlet?action=showOne&currentPage=${pager.currentPage-1}";
    				}
    			} else {
    				alert("当前博客删除失败");
    			}
    		}
    	}); */
    }
    </script>
    

           控制台打印出的博客id
    在这里插入图片描述
           前端页面弹出的提示窗口的博客id
    在这里插入图片描述
           可以明显看出两者的值不一样,后台实际设置的值是156231237764100358 ,而前端页面获取到的值是156231237764100350,前端将后台传过来的长整型数值的最后一位数视为’0’ 。

    (2)再探EL表达式取字符串格式long型数值

           起初我以为是long型数字太长不能在页面中显示,后来我又用字符串型的数字来测试,然而结果仍然很失望。
    后台java代码设置字符串格式的长整数字的属性

    		BlogDetail currentBlog = pageModel.getDataArray().get(0);
            request.setAttribute("curBlog", currentBlog);
            int categoryId = currentBlog.getCategoryId();
            //打印博客的long型id
            Long blogId = currentBlog.getId();
            System.out.println("单篇博客id"+blogId);
            //在requeset中设置字符串格式的长整数字
            request.setAttribute("blogId",blogId+"" );
    

            jsp页面代码

    <button type="button"	onclick="javascript:alert(${blogId})"	   		    class="layui-btn layui-btn-primary" > 
    <i class="layui-icon">长整数测试</i>
    	</button>
    

            新的弹窗
    在这里插入图片描述
            从前端页面的提示窗口来看,使用字符串形式的长整数字仍不能正常显示。如果前端一直不能正常显示长整型的数字,这将是一个巨的灾难,毕竟谁也不能保证一直不在前端使用大数字。

    (3)最后一试—给EL表达式加引号

            后来看到在超链接中同样使用EL表达式却能跳转到正确的页面。这引起了我的兴趣,我估计是用因为在超链接中用了引号的原因。在超链接的href属性的内容必须用引号包裹起来,而整个超链接使用了双引号,那么href 属性的内容(即链接地址)则只能用单引号了。而以上示例中调用Javascript脚本方法时,其中却只有一个外部的双引号,而无单引号。
    在这里插入图片描述
    在这里插入图片描述
            准备尝试在EL表达式两侧加上单引号

    <!--onclick事件的脚本方法,对EL表达式两侧加上单引号-->
    <button type="button"	onclick="javascript:alert('${blogId}')"	   		    class="layui-btn layui-btn-primary" > 
    <i class="layui-icon">长整数测试</i>
    	</button>
    

            前端页面显示出正确的long型数字
    在这里插入图片描述

    3.总结

           EL表达式很好用,但有的时候也得注意一些小细节。在获取比较小的数字或位数较短的数字时,可以不用引号将EL表达式包含起来,但在获取位数较长的long型数字时,要注意一定得使用引号(" "或’ ')将EL表达进包裹起来,防止获得尾数充零的的错误值。

    展开全文
  • 最近在写的一个项目后台 用到的实体类主键ID是用idworker生成的Long类型唯一id 由于之前一直用字符串id 所以突然发现Long类型数据通过JSON传到前端发生精度丢失 精度丢失 javascript 的 Number 类型最大长度是17位;...

    Springboot返回给前端的Long类型数据失去精度

    最近在写的一个项目后台 用到的实体类主键ID是用idworker生成的Long类型唯一id
    由于之前一直用字符串id 所以突然发现Long类型数据通过JSON传到前端发生精度丢失

    精度丢失

    javascript 的 Number 类型最大长度是17位;
    mysql 使用bigint 类型长度是20位;
    我用到的idworker生成的id是19位的 刚好最后两位会凑整 也就是精度给我整没了

    解决办法

    我在项目用到的是mybatis-plus
    下面列一些我的解决办法

    把字段解析成字符串

    用到了JsonFormat注解让对象属性在经过spring解析成JSON时直接转化成字符串
    在要转的字段上加

    	/**
    	 * 用户ID
    	 */
    	@TableId(value = "user_id", type = IdType.INPUT)
    	@JsonFormat(shape = JsonFormat.Shape.STRING)//转化成string传到前端
    	private Long userId;
    

    这种方法我觉的不太好用 兄弟们实体类多的话那得一个一个加好麻烦

    全局配置 把数字类型全部转化成字符串

    在application.yml配置文件里加

    spring:
      jackson:
        generator:
          write-numbers-as-strings: true
    

    这个方法我也不推荐 把所有数字都转成字符串了 分页之类要用到的integer啥的都不太方便

    Jackson全局转化long类型为String

    新建一个配置类
    具体代码如下

    @Configuration
    public class JacksonConfig {
    	/**
    	 * Jackson全局转化long类型为String,解决jackson序列化时传入前端Long类型缺失精度问题
    	 */
    	@Bean
    	public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
    		Jackson2ObjectMapperBuilderCustomizer cunstomizer = new Jackson2ObjectMapperBuilderCustomizer() {
    			@Override
    			public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
    //				jacksonObjectMapperBuilder.serializerByType(BigInteger.class, ToStringSerializer.instance);
    				jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance);
    //                jacksonObjectMapperBuilder.serializerByType(Long.TYPE, ToStringSerializer.instance);
    			}
    		};
    		return cunstomizer;
    	}
    }
    

    这个方式我很推荐 只拦截对应的类型 兄弟们可以用起来

    还有一些小细节想提一嘴
    Long.class对应的是long的包装类Long,Long.TYPE对应的是基本数据类型long类型
    如果你想拦截Long包装类类型的字段,不拦截基本数据类型long字段
    除了在这个配置类里拦截外,你还得看你实体类的get方法返回值类型是什么,
    因为Jackson转化是用get方法来获取值的,这里的拦截也是看get方法

    举个例子

    private Long userId;
    
    public long getUserId(){
    	return this.userId
    }
    

    这样你的这个字段就没有被拦截还是数字到前端
    因为你拦截的是Long类型 get方法返回的是long类型

    最后

    希望这篇博客可以给你带来帮助

    展开全文
  • 最近遇到一个 同步三方的数据 他们返回的数值类型是Long 但是需要展示给前端显示 我也就使用了Long类型 但是传到前端的时候 显示有问题 后来百度到问题是 JS解析 只能解析到16位 16位以后 就默认显示0 所以 前端暂时...
  • 问题描述 错误的ID,最后两位数都是0...拿postman测试接口没有问题,查到的是正确的数据,原来是因为Long类型数据传给前端可能精度丢失,js中的数据类型不能包含所有的java long值。 这问题真是在前后端连接的夹缝中
  • 一、前言 由于公司数据库表的id是利用雪花算法...前端通过ajax请求后端接口,返回json数据,然后将数据渲染到一个表格中。突然发现表格中id这一列出现了精度丢失的现象,这精度丢失是由前端引起的。 三、解决方案...
  • Long类型问题,postman调用正常,页面失去精度
  • long类型数据的截取

    2009-04-03 01:12:16
    最近做了一个按日期进行分区的分区表,根据数据字典的值进行相应操作的 存储过程,需要对user_tab_partitions 的high_value字段进行截取 去其中的日期值 并转换成date型 然后进行一些条件的判断。long...
  • oracle数据库中的类型LONG(这里的long,不是数字类型),Java中定义为了String字符串,后台获取的时候报错,说什么流关闭,搜了好多文章,大多数都解决不了,找的道路很漫长,既然最后解决了,那就更要记录一下。...
  • 今天看群里小伙伴问了一个非常有意思的问题: 使用 Map<String,Object> 对象接收前端传递的参数,在后端取参时,因为接口文档中明确该字段类型Long ,所以对接收的参数进行了强转,即 (Long)参数 ,但是却...
  • 后端(Java)数据获取正常,前端显示精度有误...搜索资料部分解决方案要求把Long类型转成String类型返回前端,这治标不治本。。。 利用JsonSerializer完成注解,完美解决Long类型精度问题 继承JsonSerializer类 ...
  • 我有一个设备信息实体类,设备id是 long 类型,映射到数据库中是一个设备表,主键id是 bigint 类型。id的生成策略是使用雪花算法。 使用postman调用接口,获取到的JSON是正常的 { "id": 1297873308628307970, ... ...
  • JavaScript 无法处理 Java 的长整型 Long 导致精度丢失,具体表现为主键最后两位永远为 0,解决思路: Long 转为 String 返回 方式1 : 通过注解方式 @Data @EqualsAndHashCode(callSuper = false) @...
  • JavaScript 无法处理 Java 的长整型 Long 导致精度丢失,具体表现为主键最后两位永远为 0,解决思路: Long 转为 String 返回 FastJson 处理方式 @Override public void configureMessageConverters(List<...
  • 解决办法很简单将Long类型的字段转为String类型返给前端即可,解决方法有3种可根据自己项目情况来选择: 方式1 在实体类种直接将Long类型的字段修改为String类型 方式2 在要返回的字段上添加@JsonSerialize(using = ...
  • 后端商品实体的id字段为Long,从ES中查出封装,以Json的形式返回给前端。结果发现前端展示的的id全为 1244864296175140900。通过在后端打印查出的数据发现实际id有:1244864296175140890、1244864296175140889等等。...
  • js接收数字最后几位数字变成了0

    千次阅读 2019-05-05 17:58:59
    遇到一个问题: js接收数字最后几位数字变成了0 从Java后台传一个数值到前端的js中,Java中输出为97761478957858935, 但在js中输出便成了97761478957858930 最后一位竟然都变成了0 原来是js数字最长为16位,...
  • 场景: 后端传了一个long型的用户id,浏览器中返回数据由于超过最大长度自动转换精度丢失,导致无法获取到正确到用户id。 postman中正常显示结果: 控制台打印结果: 原因: 由于JavaScript中Number类型的自身...
  • 前端获取long型数值精度丢失,后面几位都为0 问题重现: 小编使用mybatisPlus的雪花ID时,遇到了Long型id精度丢失问题 前端接口获取数据: 用postman请求的数据 解决方案: 1.在后台把long型改为String类型(推荐...
  • 从JDK源码角度看Long

    千次阅读 2017-09-19 10:06:48
    概况Java的Long类主要的作用就是对基本类型long进行封装,提供了一些处理long类型的方法,比如long到String类型的转换方法或String类型到long类型的转换方法,当然也包含与其他类型之间的转换方法。除此之外还有一些...
  • 最后,使用的来了,使用的人想知道这set里面有没有Long类型的1L 答案是否定的,因为传输过程中的类型早已丢失变成了Integer 在这过程中,BCD实际上都是传输者,他们不知道传输东西的类型,更不知道要干什么,...
  • 为了简化持久层的开发,减少或杜绝重复SQL的书写,提高开发效率和减少维护成本,本人基于MyBatis写了一个操作DB的中间件。为了规范操作,中间件提供了一个带泛型化参数的抽象类供以继承(BaseDBEntity),利用泛型的...
  • 一个HTTP交互中,Spring MVC(客户端和服务端)使用HttpMessageConverters协商内容转换。如果classpath下存在Jackson,你就已经获取到Jackson2ObjectMapperBuilder提供的默认转换器。创建的ObjectMapper(或用于...
  • int数据类型的位数为16位,short int数据类型的位数也是16位。而long int的位数为32位,可用来存储比较大的整数。  short int 和 long int可以缩写为short 和 long。   C语言中的整型数据类型int、short ...
  • JDK源码阅读之Long

    千次阅读 2019-09-06 14:32:58
    ;Long类型是java八大基本数据类型long的包装类,当数值使得Integer无法表示时我们都会想到Long类型,现在我们窥探一下它的源码吧~
  • Numbers支持四种不同的数值类型:整型、长整型(无限大小的整数最后一个大写或小写的L)、浮点型、 复数。类型转换:(当字典用,用到查阅)通用: 前提可以进行转换 python获取随机数 常用的数学方法
  • 一 要求随机生成一个字符串, 要求该字符串不在原来的字符串列表当中即可,再将生成的字符串添加到列表中, 生成新的字符串列表 public class Test { public static void main(String[] args) { List<String> ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 98,428
精华内容 39,371
关键字:

获取long类型最后一个数字