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

相关文章
|
6月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
394 5
|
8月前
|
存储 SQL 缓存
Java字符串处理:String、StringBuilder与StringBuffer
本文深入解析Java中String、StringBuilder和StringBuffer的核心区别与使用场景。涵盖字符串不可变性、常量池、intern方法、可变字符串构建器的扩容机制及线程安全实现。通过性能测试对比三者差异,并提供最佳实践与高频面试问题解析,助你掌握Java字符串处理精髓。
|
9月前
|
自然语言处理 Java Apache
在Java中将String字符串转换为算术表达式并计算
具体的实现逻辑需要填写在 `Tokenizer`和 `ExpressionParser`类中,这里只提供了大概的框架。在实际实现时 `Tokenizer`应该提供分词逻辑,把输入的字符串转换成Token序列。而 `ExpressionParser`应当通过递归下降的方式依次解析
462 14
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
226 0
java基础(13)String类
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
348 11
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、&quot;+&quot;操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
376 9
|
Java 测试技术 开发者
Java零基础-indexOf(String str)详解!
【10月更文挑战第14天】Java零基础教学篇,手把手实践教学!
413 65
|
存储 JavaScript Java
Java 中的 String Pool 简介
本文介绍了 Java 中 String 对象及其存储机制 String Pool 的基本概念,包括字符串引用、构造方法中的内存分配、字符串文字与对象的区别、手工引用、垃圾清理、性能优化,以及 Java 9 中的压缩字符串特性。文章详细解析了 String 对象的初始化、内存使用及优化方法,帮助开发者更好地理解和使用 Java 中的字符串。
248 2
Java 中的 String Pool 简介
|
缓存 安全 Java
java 为什么 String 在 java 中是不可变的?
本文探讨了Java中String为何设计为不可变类型,从字符串池的高效利用、哈希码缓存、支持其他对象的安全使用、增强安全性以及线程安全等方面阐述了不可变性的优势。文中还通过具体代码示例解释了这些优点的实际应用。
477 1
java 为什么 String 在 java 中是不可变的?
下一篇
开通oss服务