在HSQLDB中保存记录时出现ClassCastException

时间:2016-12-09 11:38:28

标签: java hsqldb activejdbc

我正在尝试将测试数据库从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")

1 个答案:

答案 0 :(得分:0)

当前版本的HSQLDB(2.3.4)支持NUMERIC(x,0),并且还支持PreparedStatement setInt(),setBigDecimal()和setObject()以及定义为NUMERIC(x,0)的列上的Java Integer值)。因此错误消息看起来不可能

这些可以解决这个问题:

  1. ;sql.syntax_mys添加到您的HSQLDB连接URL并使用INTEGER(n)这是一种MySQL类型
  2. ;sql.syntax_ora添加到您的HSQLDB连接网址并使用NUMBER(n)这是Oracle类型
  3. 或者使用createIt("e_type", 1.0, "name", "Employee")或createIt(" e_type"," 1"," name"," Employee")if它被ActiveJDBC接受
  4. 要求ActiveJDBC添加对HSQLDB的支持。这对他们来说应该很容易。