java - ResultSet.TYPE_FORWARD_ONLY 它实际上是如何工作的?

标签 java mysql jdbc resultset

我有以下代码:

try(Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","VENIVIDIVICI");
        Statement st = con.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
        ResultSet rs = st.executeQuery("SELECT * FROM example184"))
{
    rs.absolute(2);
    rs.absolute(1);
    rs.beforeFirst();

while (rs.next())
{
    System.out.println(rs.getString("iD"));

}
    while(rs.previous())
    {
        System.out.println(rs.getString("Id"));
    }
}
catch(SQLException sql ){System.out.println(sql);}

}

它应该给出一个 SQLException,因为它只是 ResultSet.TYPE_FORWARD_ONLY,相反它工作正常而不会抛出任何异常。

更新:正如 Aleroot 在下面的回复中所建议的,我尝试了以下修改:

try(Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","VENIVIDIVICI");
        Statement st = con.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
        ResultSet rs = st.executeQuery("SELECT * FROM example184"))
{

    st.setFetchSize(Integer.MIN_VALUE);
        rs.afterLast();
while (rs.previous())
{
    System.out.println(rs.getString("iD"));

}

}
catch(SQLException sql ){System.out.println(sql);}

}
}

没有成功,它仍然可以正常编译和运行。

谢谢, 确实是

最佳答案

TYPE_FORWARD_ONLY 表示 ResultSet 只能向前导航。您不能在 ResultSet 中向后移动

在这种情况下,我认为对 previous() 的调用是允许的,因为已缓存,请尝试更改获取大小:

st.setFetchSize(Integer.MIN_VALUE);

或者从头到尾读取结果集,而不是事先从头到尾读取(使用下一个)......

向后移动尝试:

rs.afterLast()
while (rs. previous())
{
    System.out.println(rs.getString("iD"));

}

如果在这两种情况下驱动程序继续执行而不抛出 SQLException,则可能是您正在使用的驱动程序的错误...

关于java - ResultSet.TYPE_FORWARD_ONLY 它实际上是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18941937/

相关文章:

java - 根据spring profile导入bean资源

java - eclipse 中的 Junit 在使用 junit 时产生 NoClassDefFoundError

php单元测试???我该如何比较api函数调用之前和之后的xml文件(该函数包含存储过程)

MySQL 左连接子查询失败

Java 类路径找不到 MySQL 驱动程序

java - 查找没有溢出的整数数组的总和

php - 如何使用PHP MYSQL使用的sql查询通过添加自己的行来选择记录

java - JDBC Spring Mockito

java - 错误: User lacks privilege or object not found HSQLDB

java - 我可以将 HashSet 作为 HashMap 中的键吗?如果没有,建议替代方案