我正在尝试将测试数据库从Oracle迁移到HSQLDB。在Oracle中,我有NUMERIC(x,0)类型的字段。因为我知道与BigDecimal java类型相关联的NUMERIC类型。当我运行我的测试并尝试在DB中保存记录时,我有以下错误:
Caused by: java.sql.SQLException: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigDecimal java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigDecimal
如果我将类型从NUMERIC(x,0)更改为INTEGER,它的工作正常。但是INTEGER类型不支持HSQLDB中的精度和规模。
有没有办法解决这个问题?
更新:
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source)
at org.javalite.activejdbc.DB.execInsert(DB.java:521)
at org.javalite.activejdbc.Model.insert(Model.java:2096)
at org.javalite.activejdbc.Model.save(Model.java:2008)
at org.javalite.activejdbc.Model.saveIt(Model.java:1935)
at org.javalite.activejdbc.Model.createIt(Model.java:1625)
Caused by: java.sql.SQLException: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigDecimal java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigDecimal
... 41 more
我正在使用ActiveJDBC
public class Employee extends Model {...}
Employee e = (Employee) Employee.createIt("e_type", 1, "name", "Employee")
答案 0 :(得分:0)
当前版本的HSQLDB(2.3.4)支持NUMERIC(x,0),并且还支持PreparedStatement setInt(),setBigDecimal()和setObject()以及定义为NUMERIC(x,0)的列上的Java Integer值)。因此错误消息看起来不可能
这些可以解决这个问题:
;sql.syntax_mys
添加到您的HSQLDB连接URL并使用INTEGER(n)
这是一种MySQL类型;sql.syntax_ora
添加到您的HSQLDB连接网址并使用NUMBER(n)
这是Oracle类型createIt("e_type", 1.0, "name", "Employee")
或createIt(" e_type"," 1"," name"," Employee")if它被ActiveJDBC接受