有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

UCanAccess加载数据库时出现java HSQLDB“精度或缩放超出范围”错误

我正在用java编写连接不同access数据库的工具。我有一个特殊的场景,抛出以下异常-5592:UCAExc:::4.0.4 precision or scale out of range

该异常列在HSQLDB异常下: 5592=42592 precision or scale out of range(所以我知道是谁生成的) 根据this answerthis other answer和这里的定义,精度和比例都指双精度的特征

只有当我使用ucanaccess连接到一个旧的mdb(pre access 2003)时才会发生异常,而该mdb是一个前端数据库,带有链接到mdb的表。但是,ucanaccess可以直接连接到旧的mdb,而不会出现任何问题

如果我在Access中使用前端来修改数据库,它工作得很好,所以我假设MS至少在Access中解决了这个问题

我的猜测是,我的ucanaccess连接正试图将数据库视为一个更现代的数据库,被前端门面所愚弄。但为什么会出现这种例外

最小完全可验证示例: 这里有一个minimal example to replicate the issue包含有问题的mdb,是一个gzip tarball,其中包括以下jar、涉及的数据库和一个有用的自述文件

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());
    }

我一直在努力浏览数据库元数据,但仍然不知道为什么有问题的mdb会生成异常


共 (0) 个答案