Ошибка «функция не поддерживается» при использовании метода first () из ResultSet - PullRequest
0 голосов
/ 27 июня 2019

У меня есть база данных 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 Ответ

4 голосов
/ 27 июня 2019

Проблема НЕ в том, что 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 можно найти здесь .


Но, как уже отмечали другие, вам не нужно , чтобы использовать first() в этом примере.Вы можете использовать вызов next(), чтобы проверить, есть ли в ResultSet какие-либо строки.

...