从表元数据中读取“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_SIZE
为 0
,对于字段 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 双重解析失败的主要内容,如果未能解决你的问题,请参考以下文章
当使用 32 位版本的 MySQL 的 .net 连接器连接到 64 位版本的 MySQL 时,我得到“等待表元数据锁定”