【问题标题】:class file format limit(s) exceeded超出类文件格式限制
【发布时间】:2013-11-28 09:58:34
【问题描述】:

我有一个很长的 sql,它的大小超过 150000 字节。我尝试在 derby 编辑器中运行它。 当我想运行时,editör 会抛出这个错误

Java 超出类文件格式限制:method1:e1 代码长度 (158045 > 65535) 在生成的类中

有没有办法增加这个限制?

ps:我不想将代码分成几部分。而且我不想使用临时表。

【问题讨论】:

  • 哪个版本的德比?
  • 我正在使用 derby-10.9.1.0.jar

标签: java sql derby


【解决方案1】:

多年来,这一直是德比郡的问题。例如,请参阅DERBY-176DERBY-732DERBY-766DERBY-1714(还有更多类似的)。

在我熟悉的所有情况下,都可以重写应用程序发出的 SQL 以将其减少到 JVM 可以处理的限制(这更像是 Java 限制而不是 Derby 限制)。

你能分享产生这个问题的 SQL 吗?也许社区可以建议一种更好的方法来构建不会生成如此大量字节码的 SQL。

【讨论】:

  • 谢谢布莱恩。我无法分享真正的 sql,因为它超过 6000 行。它太长了,因为它是一个商业智能评分 SQL。并确保它是有效的,并且没有办法减少它的长度。
【解决方案2】:

很遗憾,无法提高此限制。请参阅relevant part of the JVM spec

我建议不要将 SQL 硬编码到类中,而是从文本文件中读取它,或者作为类路径上的资源,或者在文件系统上的已知位置中。

如果 Derby 编辑器本身正在生成该类,则您可能无法将 Derby 编辑器用于此特定查询。重新考虑查询可能是明智的。我原以为可能有更好的方法来编写查询。在那个长度上它不是很容易维护!

【讨论】:

  • 感谢 aetheria。真正的 SQL 太长了,因为它是 Business Intellingece Scoring SQL。并确保它是有效的,没有办法减少它的长度。它不像其他人那样“蛮力 SQL”。
【解决方案3】:

没有办法增加这个限制。所以我用 SQLite 代替 德比。

它也是一个内存数据库。它的默认代码限制超过 1000000 字节。您还可以在编译时更改超过 1000000000 字节的代码限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2015-07-30
    • 1970-01-01
    相关资源
    最近更新 更多