यदि आप चाहते हैं कि आपका चयन उस पंक्ति पर बाद के पढ़ने को तब तक अवरुद्ध करे जब तक कि आप इसे हटा नहीं देते, जैसा कि मार्क ने अपनी टिप्पणी में इंगित किया है, आपको इसकी आवश्यकता होगी
- लेनदेन सक्षम करें (
setAutoCommit(false)
) - लेन-देन अलगाव को SERIALIZABLE पर सेट करें, और
- उपयोग
SELECT ... FOR UPDATE
यह नमूना कोड मेरे लिए काम करता है:
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
conn.setAutoCommit(false);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT token_id FROM tokens ORDER BY token_id LIMIT 1 FOR UPDATE");
rs.next();
int token_id = rs.getInt("token_id");
System.out.printf("Got %d.%n", token_id);
PreparedStatement ps = conn.prepareStatement("DELETE FROM tokens WHERE token_id=?");
ps.setInt(1, token_id);
ps.executeUpdate();
conn.commit();