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 を返す必要が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 に答える