Monday, April 1, 2013

SELECT ... FOR UPDATE with Spring JDBC

SELECT ... FOR UPDATE is required to lock specific row in database in order to prevent other query thread to read or make changes to the same row. The lock is released once you update the data or commit it.

As a Spring lover, it's hard to find references about implementing the technique in Spring JDBC template. But finally I managed to use it.


public MyDao {
    private PreparedStatementCreatorFactory queryForUpdateFactory;

    public MyDao() {
        queryForUpdateFactory = new PreparedStatementCreatorFactory(
            "SELECT name FROM people WHERE id = ? FOR UPDATE",
            Arrays.asList(new SqlParameter(Types.INTEGER)));

        // These lines are important!
        queryForUpdateFactory.setUpdatableResults(true);
        queryForUpdateFactory.setResultSetType(
            ResultSet.TYPE_SCROLL_SENSITIVE);
    }


    public void testSelectForUpdate() {
        Object id = "someID";

        PreparedStatementCreator psc = 
            queryForUpdateFactory.newPreparedStatementCreator(
            new Object[] { id });

        RowCallbackHandler rch = new RowCallbackHandler() {
            @Override
            public void processRow(ResultSet rs) throws SQLException {
                String name = rs.getString("name");

                // Do some manipulation
                if (name != "Jack") {
                    name = "Jack Sparrow";
                }

                // Update and release the lock
                rs.updateString("name", name);
            }

        };

        jdbcTemplate.query(psc, rch);
    }
}

I hope it's useful!

8 comments:

Christopher R. Gardner said...

Tried this with an in-memory H2 database. The select worked fine, but I couldn't get the update part to work.

Muhammad Ichsan said...

Did you manage to run the SQL without Spring?

O Noon Noeito said...

You need to add a "rs.updateRow()" after the "rs.updateString()" in order to "update" the actual row.

Neuronal Project said...

Hello, do you think it's possible to do a select for update like this :

1)

jdbc.query(MY_QERY_STRING, new MyMapper());

2) in the mapRow function just do :
rs.updateString("blabla","value");
rs.updateRow();

Thanks

shuron said...

Do i need this special parameters with Spring's Jdbc Templates? How to set them?

Anil Karamchandani said...

Hi

Nice article, however I have a question, how about if the select is a join on 2 tables ?
would still

rs.updateString("blabla","value");
rs.updateRow();


this work ? how would oracle know which primary key this belongs to ?

thansk !

quan anh said...

cách làm kem dưỡng da mặt từ thiên nhiênVới gel nha đam, bạn có thể bôi trực tiếp lên da như một loại kem dưỡng nhé. Đặc biệt gel này thích hợp với những ngày thời tiết khô, hay các bạn thường xuyên ngồi phòng điều hòa đó nha!
cách làm kem dưỡng da từ dầu dừaĐổ dung dịch vừa tạo được vào lọ thủy tinh và cất trong ngăn mát tủ lạnh. Vậy là xong rồi các bạn nha!
cách làm kem dưỡng da từ sữa tươiCho phần thịt nha đam vào máy xay hoặc cối giã. Đồng thời cho vitamin, dầu dừa (tỉ lệ ½ với nha đam) rồi xay nhuyễn.
cách làm kem dưỡng da từ nha đamDùng dao để tách lớp vỏ ngoài nha đam, các bạn nhờ là chỉ lấy phần thịt nha đam bên trong thôi nhé. Tránh dính lớp nhựa và vỏ xanh ngoài cùng dễ gây dị ứng.
cách làm kem dưỡng da từ bí đaoTrước hết bạn hãy rửa tay thật sạch với xà bông diệt khuẩn.
cách làm kem dưỡng trắng da từ thiên nhiênĐối với làn da, nha đam có thể giúp làm sạch mụn, se khít lỗ chân lông, dưỡng trắng da nè. Còn với tóc, nha đam sẽ giúp tóc bạn khỏe và mượt mà hơn đó nha.
cách làm kem dưỡng da từ mật ongThông thường, bạn chỉ cần dùng nha đam tươi, hết hợp với một số nguyên liệu khác là đã có thể làm đẹp rồi đó.
cách làm kem dưỡng da bằng sáp ongLàm trắng da từ mướp nghe có vẻ lạ nhưng đó là sự thật, quả mướp có chứa rất nhiều dưỡng chất tốt cho da mặt, đặt biệt là công dụng làm trắng và sáng da.
cách làm kem dưỡng da ban đêm từ thiên nhiênChanh là một loại quả không chỉ giàu vitamin C, tốt cho sức khỏe mà nó có công dụng làm đẹp.
cách làm kem dưỡng da từ sáp ongTheo các chuyên gia về sức khỏe và làm đẹp thì việc đắp mặt nạ bằng sữa chua có đường không gây ảnh hưởng đến làn da của chị em phụ nữ tuy nhiên nó không tốt bằng sữa chua không đường
cách làm kem dưỡng da từ lô hộiNhư chúng ta đã biết thì chanh là một nguyên liệu có khả năng làm đẹp rất tuyệt vời.

Thy Nguyen said...

bán bánh tráng muối tôm
bánh tráng cuốn muối tôm
bánh tráng muối tôm alaska
bánh tráng muối tôm facebook
bánh tráng muối tôm hùm
bánh tráng muối tôm jerry
bánh tráng muối tôm khô
bánh tráng muối tôm omachi
bánh tráng muối tôm online
bánh tráng muối tôm rang
bánh tráng muối tôm rim