0

テスト DB を 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 に変更すると、正しく機能します。ただし、HSQLDB では INTEGER 型は精度と位取りをサポートしていません。

この問題を解決する方法はありますか?

更新しました:

    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")
4

1 に答える 1

0

HSQLDB の現在のバージョン (2.3.4) は NUMERIC(x,0) をサポートし、さらに NUMERIC(x,0) として定義された列で Java 整数値を持つ PreparedStatement setInt()、setBigDecimal()、および setObject() をサポートします。したがって、エラーメッセージは不可能に見えます

これを回避するには、次の方法があります。

  1. ;sql.syntax_mysHSQLDB 接続 URL に追加しINTEGER(n)、MySQL タイプを使用します
  2. ;sql.syntax_oraHSQLDB接続URLに追加し、NUMBER(n)どちらがOracleタイプであるかを使用します
  3. あるいはcreateIt("e_type", 1.0, "name", "Employee")、ActiveJDBC によって受け入れられる場合は、または createIt("e_type", "1", "name", "Employee") を使用します
  4. ActiveJDBC に HSQLDB のサポートを追加するよう依頼してください。これは彼らにとって非常に簡単なはずです。
于 2016-12-09T13:29:00.707 に答える