最近从别人手里接过一个功能点,table的Id(long),居然是当前时间的毫秒数值与playerId做String拼接组成的,playerId是另一个Entity的Id(long)。
在测试阶段一直都没问题,但是上线之后就出问题了。
String newId = String.valueOf(playerId)+String.valueOf(System.currentTimeMillis());
日期的long值+playerId之后,存储类型为string。
上面的string值,在Long.parseLong(value)的时候,出现了NumberFormatException。
那么,现在,我们来看看原因到底是为何。
long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)。
当前时间的毫秒数值:1316223521431;
已经很长了一旦playerId达到7位数,那么,结果不言而喻!!!
Exception in thread "main" java.lang.NumberFormatException: For input string: "25430051316162482222"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Long.parseLong(Long.java:422)
at java.lang.Long.parseLong(Long.java:468)
at org.test.core.AppMain.main(AppMain.java:88)