我正在尝试本教程中解释的这个接口的方法:
DatabaseMetaData dm = con.getMetaData();
System.err.println(dm.supportsResultSetType(ResultSet.TYPE_SCROLL_SENSITIVE));
我知道它支持TYPE_SCROLL_SENSITIVE
类型。当我在使用它的时候,它是有效的。然而,上面报告的方法返回false。你试过用这种方法吗?如果是,工作正常吗?提前感谢。
PS:其他2种类型的ResultSets (TYPE_SCROLL_INSENSITIVE
和TYPE_FORWARD_ONLY
)也是如此。考虑到TYPE_FORWARD_ONLY
是默认类型,在所有三种情况下我都得到false
有点奇怪。UPDATE:我正在使用JDBC-Mysql驱动程序;
在MySQL Connector/j5.1.21中的实现是:
public boolean supportsResultSetType(int type) throws SQLException {
return (type == ResultSet.TYPE_SCROLL_INSENSITIVE);
}
然而,快速查看一下实现的其余部分,可以发现MySQL也支持其他类型
假设您指的是连接器/J驱动程序(MySQL有多个JDBC驱动程序),从MySQL连接器/J JDBC实现注释:
- "MySQL不支持SQL游标,JDBC驱动程序不模拟它们",和
- "默认情况下,ResultSets被完全检索并存储在内存中。"
由于TYPE_SCROLL_SENSITIVE
, TYPE_SCROLL_INSENSITIVE
和TYPE_FORWARD_ONLY
通常表示游标类型,那么驱动程序甚至不尝试模拟它们的语句可以解释为什么supportsResultSetType(...)
对所有值返回FALSE。由于默认行为是将整个结果集保存在内存中,因此仅向前或滚动模式将无关紧要。