从表元数据中读取“0.-127”时,Empire db code-gen 双重解析失败

Posted

技术标签:

【中文标题】从表元数据中读取“0.-127”时,Empire db code-gen 双重解析失败【英文标题】:empire db code-gen double parse failure in reading "0.-127" from table meta data 【发布时间】:2015-11-15 02:20:55 【问题描述】:

我正在尝试在 Oracle 中的项目表上使用 Empire db code-gen 进行逆向工程。

对于主键列 (ID),返回的元数据具有无效值(COLUMN_SIZE0,对于字段 DECIMAL_DIGITS-127),这是 Exception 的原因:For input string: "0.-127"

谁能启发我为什么DECIMAL_DIGITS 是-127。

Exception in thread "main" java.lang.NumberFormatException: For input string: "0.-127"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241)
    at java.lang.Double.parseDouble(Double.java:540)
    at org.apache.empire.db.codegen.CodeGenParser.addColumn(CodeGenParser.java:368)
    at org.apache.empire.db.codegen.CodeGenParser.populateTable(CodeGenParser.java:300)
    at org.apache.empire.db.codegen.CodeGenParser.populateDatabase(CodeGenParser.java:168)
    at org.apache.empire.db.codegen.CodeGenParser.loadDbModel(CodeGenParser.java:96)
    at org.apache.empire.db.codegen.CodeGenerator.generate(CodeGenerator.java:57)
    at org.apache.empire.db.codegen.CodeGenerator.generate(CodeGenerator.java:72)
    at org.apache.empire.db.codegen.CodeGenerator.main(CodeGenerator.java:45)

我使用 mvn generate-sources 调用 CodeGenerator

PS: ojdbc6 和 ojdbc14 jar 都试过了,还是不行。

【问题讨论】:

请加empire-db标签,我不行 【参考方案1】:

这似乎与此处报告的问题有关:DatabaseMetaData.getColumns() returns unexpected values in COLUMN_SIZE and DECIMAL_DIGITS for INTEGER columns(-127 来自“int decimalDig = rs.getInt("DECIMAL_DIGITS");")

使用“-Doracle.jdbc.J2EE13Compliant=true”选项运行 JVM 似乎可以解决这个问题。可以试试吗?

【讨论】:

试过mvn generate-sources -Doracle.jdbc.J2EE13Compliant=true没有用,MAVEN_OPTS="-Doracle.jdbc.J2EE13Compliant=true"也没有,然后mvngenerate-sources,如果我在设置JVM选项时做错了,请告诉我。【参考方案2】:

看起来这是 Oracle JDBC 中的一个错误:

https://community.oracle.com/thread/3677876

如果 rs.getInt("DECIMAL_DIGITS") 为 -127,您可以更改 CodeGenParser.java 中的第 368 行。

【讨论】:

以上是关于从表元数据中读取“0.-127”时,Empire db code-gen 双重解析失败的主要内容,如果未能解决你的问题,请参考以下文章

如何使用最新的 AVRO 模式文件更新配置单元表元数据

MySQL 临时表复制表元数据

MySQL 临时表复制表元数据

MySQL 临时表复制表元数据

当使用 32 位版本的 MySQL 的 .net 连接器连接到 64 位版本的 MySQL 时,我得到“等待表元数据锁定”

“无法获取表元数据”“从 NDBCLUSTER 收到错误 157‘未知错误代码’”