0

方法中 Dao refresh() 的 Javadoc 指出:

抛出:SQLException - 如果出现任何 SQL 问题,或者如果在表中找不到数据项,或者如果找到超过 1 个具有数据 ID 的项。

然而,类com.j256.ormlite.stmt.mapped.MappedRefresh有另一个 Javadoc 定义,并一直返回结果代码以进行刷新并返回给用户。

/**
 * Execute our refresh query statement and then update all of the fields in data with the fields from the result.
 * 
 * @return 1 if we found the object in the table by id or 0 if not.
 */
public int executeRefresh(DatabaseConnection databaseConnection, T data, ObjectCache objectCache)
        throws SQLException {
    @SuppressWarnings("unchecked")
    ID id = (ID) idField.extractJavaFieldValue(data);
    // we don't care about the cache here
    T result = super.execute(databaseConnection, id, null);
    if (result == null) {
        return 0;
    }
    // copy each field from the result into the passed in object
    for (FieldType fieldType : resultsFieldTypes) {
        if (fieldType != idField) {
            fieldType.assignField(data, fieldType.extractJavaFieldValue(result), false, objectCache);
        }
    }
    return 1;
}

这是一个错误还是只是 Dao.refresh 的 Javadoc 错误?

我在看 OrmLite 4.41。

4

1 回答 1

0

考虑到它仅供开发人员使用,内部方法通常没有完美的 Javadocs。此外,我倾向于不记录抛出的每个异常。

在这种情况下,MappedRefresh.executeRefresh(...)方法文档看起来相当不错,只是它没有记录异常。如果您查看super.execute(...)调用 的行MappedQueryForId.execute(...),您可以看到它具有以下测试/抛出:

} else if (result == DatabaseConnection.MORE_THAN_ONE) {
    logger.error("{} using '{}' and {} args, got >1 results", label, statement,
        args.length);
    logArgs(args);
    throw new SQLException(label + " got more than 1 result: " + statement);
}

fieldType.assignField(...)和其他方法也可以抛出SQLException各种数据或数据库问题。

所以Dao.refresh(...)javadocs是正确的。javadocs 也是正确的MappedRefresh.executeRefresh(...),但缺少有关异常的详细信息。

于 2012-08-20T16:10:16.353 回答