【问题标题】:ResultSet.TYPE_FORWARD_ONLY how does it actually work?ResultSet.TYPE_FORWARD_ONLY 它实际上是如何工作的?
【发布时间】:2013-09-27 07:51:27
【问题描述】:

我有以下代码:

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);}

}
}

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

谢谢, 确实如此

【问题讨论】:

    标签: java mysql jdbc resultset


    【解决方案1】:

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

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

    st.setFetchSize(Integer.MIN_VALUE);
    

    或者从头到尾读取结果集,而不是之前从头到尾读取(with next) ...

    向后移动尝试:

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

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

    【讨论】:

    • @我已经尝试了这两种方法,它仍然有效,我正在用代码更新问题
    • 你使用的是什么版本的 JDBC 驱动?
    • JDBC 4.1 mysql驱动5.1
    • 试试:mysql-connector-java-5.1.25-bin
    • 所以最终的答案是依赖于驱动程序?
    猜你喜欢
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2021-01-21
    • 2011-09-27
    • 2021-12-16
    • 2013-03-14
    • 2021-03-23
    • 2011-02-11
    相关资源
    最近更新 更多