使用ResultSet的first()方法时出现“功能不受支持”错误

时间:2019-06-27 11:58:03

标签: java ucanaccess

我有一个Access数据库,我想检查查询是否返回了某些内容。为此,我有以下方法:

public boolean checkIfIdExists(int id){
    PreparedStatement st = null;
    ResultSet rs = null;
    boolean found = false;
    try {
        st = conn.prepareStatement("Select * from contacts where Id = " + id);
        rs = st.executeQuery();
        if (rs.first() == true) {
            found = true;
        }
    } catch (SQLException ex) {
        Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, ex);
    }
    return found;
}

但是我收到此错误:

SEVERE: null
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.4 característica no soportada
    at net.ucanaccess.jdbc.UcanaccessResultSet.first(UcanaccessResultSet.java:168)
    at mod.Conexion.checkIfIdExists(Conexion.java:82)
    at mod.ContactImporter.metodo(ContactImporter.java:70)
    at mod.Mod.main(Mod.java:18)
Caused by: java.sql.SQLFeatureNotSupportedException: característica no soportada
    at org.hsqldb.jdbc.JDBCUtil.notSupported(Unknown Source)
    at org.hsqldb.jdbc.JDBCResultSet.checkNotForwardOnly(Unknown Source)
    at org.hsqldb.jdbc.JDBCResultSet.first(Unknown Source)
    at net.ucanaccess.jdbc.UcanaccessResultSet.first(UcanaccessResultSet.java:166)
    ... 3 more

在英语中,该错误表示“功能不受支持”。我曾尝试调查错误,但未找到任何内容。如果此方法不起作用,如何检查ResultSet是否为空?

谢谢

1 个答案:

答案 0 :(得分:4)

问题不是数据库不支持first

问题是此结果集不支持它。 HSQLDB JDBCResultSet::first的代码如下:

public boolean first() throws SQLException {
    checkClosed();
    checkNotForwardOnly();
    if (isOnInsertRow || isRowUpdated) {
        throw Util.sqlExceptionSQL(ErrorCode.X_24513);
    }
    return navigator.first();
}

checkNotForwardOnly方法中引发了异常。

实现是

private void checkNotForwardOnly() throws SQLException {
    if (!isScrollable) {
        throw Util.notSupported();
    }
}

换句话说,first()(和last())仅可用于滚动结果集。


您可以找到有关JDBC可滚动结果集here的一般说明。


但是正如其他人指出的那样,在此示例中,您不需要使用first()。您可以使用next()调用来测试ResultSet是否有任何行。