2

我有以下代码:

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 ,因为它是 only 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);}

}
}

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

谢谢,确实是

4

1 回答 1

1

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

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

st.setFetchSize(Integer.MIN_VALUE);

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

向后移动尝试:

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

}

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

于 2013-09-22T08:55:29.557 回答