我一直在制作一个使用HSQL连接到我创建的数据库的程序。由于某种原因,我的类中的某些方法可以调用数据库并执行命令,而其他部分则不能。我一直收到这个错误,
java.sql.SQLFeatureNotSupportedException:功能不受支持
这是方法,
public List<CustomerInfo> DBgetInfo(String Customer)
throws ClassNotFoundException, SQLException {
Class.forName("org.hsqldb.jdbcDriver");
Connection con = DriverManager.getConnection(urlConnection, userId,
password);
Statement stmt= con.createStatement();
String query = "SELECT * FROM PUBLIC.CUSTOMER";
ResultSet rs = stmt.executeQuery(query);
rs.first(); //The error happens on this line
rs.close();
stmt.close();
con.close();
}
我已多次运行调试器,并且在rs.first行上有此错误。我尝试重新编译数据库,重新导入所有文件,检查以确保命令是正确的,等等......奇怪的是,在本课程的早期我有一个非常类似的方法,但它没有问题。我真的无法弄清问题是什么。
答案 0 :(得分:1)
根据documentation发生此错误:
抛出: SQLException - 如果发生数据库访问错误,则在关闭的结果集上调用此方法,或者结果集类型为TYPE_FORWARD_ONLY SQLFeatureNotSupportedException - 如果JDBC驱动程序不支持此方法
在同一页面的前面,有一节关于结果集的HSQL特定细节。要调用first
,您需要修改语句创建:
HSQLDB生成的ResultSet对象默认为ResultSet.TYPE_FORWARD_ONLY(标准JDBC行为),不允许使用绝对和相对定位方法。如果使用以下命令创建语句:
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
然后使用JDBC2的所有绝对和相对定位方法生成支持的ResultSet对象来设置当前行的位置......
但您可能想要考虑为什么需要致电first
。