我有一个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是否为空?
谢谢
答案 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
是否有任何行。