成功解决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 中设置参数和最后可以添加英文分号外的任何英文分号!!!

相关文章
|
2月前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
38 0
java基础(13)String类
|
20天前
|
Java 测试技术 开发者
Java零基础-indexOf(String str)详解!
【10月更文挑战第14天】Java零基础教学篇,手把手实践教学!
108 65
|
13天前
|
存储 算法 Java
Java零基础-charAt(int index)详解
【10月更文挑战第20天】Java零基础教学篇,手把手实践教学!
34 4
|
18天前
|
存储 算法 Java
Java零基础-charAt(int index)详解
【10月更文挑战第16天】Java零基础教学篇,手把手实践教学!
11 1
|
21天前
|
Java 测试技术 开发者
Java零基础-indexOf(String str)详解!
【10月更文挑战第13天】Java零基础教学篇,手把手实践教学!
36 1
|
25天前
|
安全 Java 测试技术
Java零基础-StringBuffer 类详解
【10月更文挑战第9天】Java零基础教学篇,手把手实践教学!
23 2
|
1月前
|
IDE Java 开发工具
Java“未封闭的 String 表达式”怎么解决
要解决Java中的“未封闭的 String 表示”问题,需检查并修正字符串字面量,确保每个字符串被正确地用双引号括起来。若字符串跨越多行,可使用字符串连接操作符(+)或引入文本块(JDK 13 及以上版本)。这能帮助避免语法错误,并使代码更整洁易读。
|
1月前
|
存储 安全 Java
【一步一步了解Java系列】:认识String类
【一步一步了解Java系列】:认识String类
24 2
|
2月前
|
安全 Java
Java StringBuffer 和 StringBuilder 类详解
在 Java 中,`StringBuffer` 和 `StringBuilder` 用于操作可变字符串,支持拼接、插入、删除等功能。两者的主要区别在于线程安全性和性能:`StringBuffer` 线程安全但较慢,适用于多线程环境;`StringBuilder` 非线程安全但更快,适合单线程环境。选择合适的类取决于具体的应用场景和性能需求。通常,在不需要线程安全的情况下,推荐使用 `StringBuilder` 以获得更好的性能。
|
2月前
|
Java 索引
Java String 类详解
Java 中的 `String` 类用于表示不可变的字符序列,是 Java 标准库 `java.lang` 包的一部分。字符串对象一旦创建,其内容不可更改,修改会生成新对象。

热门文章

最新文章