HSQLDB「精度又は範囲のスケールアウト」エラーUCanAccess負荷データベース

LeedMx:

私は、異なるアクセスデータベースに接続するjavaツールを書いています。私は次の例外をスローする特定のシナリオを持っています-5592:UCAExc:::4.0.4 precision or scale out of range

例外は、HSQLDBの例外の下に表示されています5592=42592 precision or scale out of range(私はそれを生成し、誰を知っているので)とに応じて、この答えはこの他の答えは、ここで定義、両方の精度とスケールは、二重の特性を参照してください。

私はMDBにリンクされたテーブルとフロントエンドのデータベースtrhough古いMDB(プリアクセス2003)に接続するためにucanaccessを使用する場合にのみ、例外が発生します。しかし、ucanaccessはいかなる問題なく直接古いMDBに接続することができます。

私は、データベースを変更するAccessでフロントエンドを使用する場合、私はMSは、少なくともアクセス中に問題を回避働いていたと仮定して、それは、罰金に動作します。

私の推測では、私のucanaccess接続は、より現代的なものとしてデータベースを扱うしようとしているフロントエンドのファサードにだまされているということです。しかし、なぜこの例外?

最小の完全な検証可能例:ここで問題に再現する最小限の例、怒らMDBを含むが、以下のjarファイル、関連するデータベースと便利readmeファイルが含まれてgzipでのtarballです。

public static void main(String[] args) {
String query= "SELECT nombre FROM encemp where cveemp=1";
    try {
        Connection frontEndToAccdb = DriverManager.getConnection("jdbc:ucanaccess://FrontEndPointingToAccdb.accdb");            
        PreparedStatement statement = frontEndToAccdb.prepareStatement(query);
        ResultSet resultSet = statement.executeQuery();
        if (resultSet.next()) System.out.println("Querying Accdb BackEnd through front end OK");            
        Connection directConnectionToMdb = DriverManager.getConnection("jdbc:ucanaccess://X:/BackendOld.mdb");
        statement = directConnectionToMdb.prepareStatement(query);
        resultSet = statement.executeQuery();
        if (resultSet.next()) System.out.println("Querying mdb BackEnd directly OK");            
        //This is the one that will generate the exception
        Connection frontEndToMdb = DriverManager.getConnection("jdbc:ucanaccess://FrontEndPointingToMdb.accdb");
        statement = frontEndToMdb.prepareStatement(query);
        resultSet = statement.executeQuery();
        if (resultSet.next()) System.out.println("Querying mdb BackEnd through front end OK");
    } catch (SQLException ex) {
        System.out.printf("%s:%s\n", ex.getErrorCode(),ex.getMessage());
    }

私はDatabaseMetaDataのをナビゲート苦労して怒らMDBが例外を生成している理由はまだ見当もつかないしてきました。

ゴード・トンプソン:

結局のところ、この特定の問題は、すべてのDECIMAL番号、または数値列とは何の関係もありません。それはUCanAccessのバグが原因で発生しJackcessのバグ Access_97テキストフィールドの幅は、その実際の幅の半分として誤報告されます。

Jackcessがそれほど問題のデータベースは、TEXT(1)のように定義されたカラムを持つテーブルを有するgetLengthInUnitsゼロ(なぜなら整数除算の)報告します。UCanAccessはとHSQLDBのバッキングデータベースにテーブルを作成しよう

CREATE  CACHED TABLE DETCAD(SERIE VARCHAR(0), ...

そしてVARCHAR(0)、「範囲外の精度またはスケール」例外がトリガされます。

jackcess-2.2.2.jarは、問題が修正されます。あなたはそのUCanAccess 4.0.4に同梱jackcess-2.1.11.jarファイルを置き換えるためにそれを使用することができます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=223804&siteId=1