成功解决java.lang.StringIndexOutOfBoundsException: String index out of range: -2147483648

简介: 成功解决java.lang.StringIndexOutOfBoundsException: String index out of range: -2147483648

前言

最近一个小伙伴出现一个从未见过的一个异常,不知道如何解决,于是找我帮忙,看到问题我也是有点懵,怎么会出现这个问题呢,于是找他要了sql脚本,开始找问题的原因。。。

问题描述

出现了如下异常:

ERROR yarn.Client: Application diagnostics message: User class threw exception: java.lang.StringIndexOutOfBoundsException: String index out of range: -2147483648
        at java.lang.String.charAt(String.java:658)
        at com.alibaba.druid.sql.parser.Lexer.charAt(Lexer.java:161)
        at com.alibaba.druid.sql.parser.Lexer.scanChar(Lexer.java:273)
        at com.alibaba.druid.sql.parser.Lexer.scanHiveComment(Lexer.java:2130)
        at com.alibaba.druid.sql.dialect.hive.parser.HiveLexer.scanComment(HiveLexer.java:83)
        at com.alibaba.druid.sql.parser.Lexer.nextToken(Lexer.java:1173)
        at com.alibaba.druid.sql.dialect.hive.parser.HiveExprParser.<init>(HiveExprParser.java:54)
        at com.alibaba.druid.sql.dialect.hive.parser.HiveStatementParser.<init>(HiveStatementParser.java:39)
        at com.alibaba.druid.sql.parser.SQLParserUtils.createSQLStatementParser(SQLParserUtils.java:131)
        at com.alibaba.druid.sql.SQLUtils.parseStatements(SQLUtils.java:563)
        at com.alibaba.druid.sql.SQLUtils.parseStatements(SQLUtils.java:587)
        at com.quantex.utils.HiveSqlUtils.getCreateTableName(HiveSqlUtils.java:128)
        at com.quantex.utils.HiveSqlUtils.executeHive(HiveSqlUtils.java:43)
        at com.quantex.MainRun.main(MainRun.java:63)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:665)

解决方案

在排查问题过程中,执行 SQL 脚本没有问题,但是一加上文件头部的注释部分就报错,那么问题就是出在这个注释部分,一般来说注释怎么会出现问题呢,最后发现注释中有英文分号; ,于是去掉注释中的英文分号,任务可以正常执行!

终于发现问题所在,spark sql 中除了在设置参数和最后可以添加英文分号外,其他任何地方添加都会执行异常!

解决方法:去掉 sql 中设置参数和最后可以添加英文分号外的任何英文分号!!!

相关文章
|
1天前
|
存储 Java API
Java基础之String类
Java的String类是引用类型,用于创建和操作字符串。字符串对象在`java.lang`包中,不可变。创建方式包括字面量和`new`关键字。字符串池存储字符串常量,避免重复。比较字符串用`equals()`(区分大小写)和`equalsIgnoreCase()`(不区分大小写)。`length()`返回长度,`concat()`或`+`拼接,`substring()`截取,`indexOf()`和`lastIndexOf()`查找,`replace()`替换,`split()`分割。这些是常用的字符串API。
6 0
|
1天前
|
Java
Java基础之String类
Java基础之String类
8 0
|
4天前
|
存储 缓存 安全
java源码之String详解
java源码之String详解
11 0
|
4天前
|
Java 数据处理 Apache
探讨Java中判断String类型为空和null的方法
探讨Java中判断String类型为空和null的方法
11 1
|
4天前
|
存储 SQL 关系型数据库
【BUG记录】Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\xA6' for column 'name' at row 1
在MySQL中遇到`Incorrect string value`错误通常是因为尝试插入的字符串包含不被数据库字符集支持的字符,如表情符号。错误根源是MySQL默认的utf8不支持4字节的UTF-8字符(如Emoji)。
15 1
|
5天前
|
Java UED
Java中String强转int:一种常见的错误和解决方法
在Java中将非数字字符串转换为整数会导致`NumberFormatException`。要解决这个问题,可以使用`try-catch`捕获异常,正则表达式验证数字格式,或利用异常信息提供错误提示。例如,`Integer.parseInt()`会因遇到非数字字符如`&quot;123abc&quot;`而抛出异常,但通过异常处理或正则`\\d+`可确保安全转换。记得在编程时避免直接强转,以防止程序异常中断。
|
7天前
|
Java API 索引
java中String类常用API
java中String类常用API
|
8天前
|
索引
String index out of range错误与解决方法
String index out of range错误与解决方法
|
15天前
Failed to bind properties under ‘logging.level‘ to java.util.Map java.lang.String, java.lang.String
Failed to bind properties under ‘logging.level‘ to java.util.Map java.lang.String, java.lang.String
8 0
|
17小时前
|
安全 Java
Java基础之StringBuffer
Java中的`StringBuffer`是线程安全的可变字符串,适用于多线程环境,其方法同步导致较慢。`StringBuilder`在Java 5引入,非线程安全但更快,适合单线程操作。两者均提供append、insert、delete等方法。在不需要线程安全时,选择`StringBuilder`以提升效率。
7 1