Background Image
Java
2009.12.30 02:50

SELECT ~ FOR UPDATE 대체 방법

조회 수 32381 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

소개: DBMS에서 SELECT 문을 통해 row level lock을 거는 방법으로 사용되는 SELECT ~ FOR UPDATE 구문이 CUBRID에는 존재하지 않는다. 이를 대체하는 방법으로 CUBRID 확장 JDBC APIsetWriteLock를 소개한다.

적용 대상: CUBRID2008R1.x 이상, JDK1.5이상

 

SELECT ~ FOR UPDATE 대체 방법

DBMS에서 SELECT 문을 통해 특정 row lock을 거는 문장으로 사용되는 것이 SELECT ~ FOR UPDATE 구문이다. 사용 예는 아래와 같다.

SELECT * FROM code where s_name=’X’ FOR UPDATE;

CUBRID에서는 위 구문을 지원하지 않는다. 이를 대체하기 위해서 CUBRID 확장 JDBC API setWriteLock를 제공하고 있다.

구문은

void setWriteLock()

CUBRIDOID 클래스에 포함된 메소드 이다.

setWriteLock 예제

아래는 setWriteLock을 사용하는 예제로 code 테이블의 s_name‘X’ row를 조회하면서 쓰기 잠금을 설정한 후 해당 row f_name‘XXX’ update 시키는 예제이다.

import java.sql.*;

import cubrid.sql.*;              //1

public class TestWriteLock1{

  public static void main(String arg[]) throws Exception {

    Connection conn = null;

    PreparedStatement  ps = null;

    ResultSet rs = null;

    try {

      Class.forName("cubrid.jdbc.driver.CUBRIDDriver");

      conn = DriverManager.getConnection("jdbc:cubrid:localhost:39000:demodb:::","","");

      conn.setAutoCommit(false);          //2

      Object result = null;

      String sbQuery = "SELECT class(a), a.* FROM code a WHERE a.s_name=?";                            //3

      String s_name = "X";

      String f_name = "XXX";

      ps = conn.prepareStatement(sbQuery);

      ps.setString(1, s_name);

      rs = ps.executeQuery();

      if(rs.next()) {

        result = rs.getObject(1);             //4

        CUBRIDOID oid = (CUBRIDOID)result;          //5

        oid.setWriteLock();     //6

        if(ps != null) ps.close();

        ps = conn.prepareStatement("UPDATE code SET f_name = ? WHERE CLASS(code) = ?");         //7

        ps.setString(1, f_name);

        ps.setObject(2, result);               //8

        ps.executeUpdate();

      }

      if(rs != null) rs.close();

      if(ps != null) ps.close();

      conn.commit();

    }catch ( SQLException e ) {

      conn.rollback();

      e.printStackTrace();

    } catch(Exception e) {

      conn.rollback();

      e.printStackTrace();

    } finally {

      if(rs != null) rs.close();

      if(ps != null) ps.close();

      if(conn != null) conn.close();

    }

  }

}

·      1 : setWriteLock CUBRIDOID의 메소드로 CUBRIDOID를 사용하기 위해서는 cubrid.sql.* import 해야한다.

·      2 : 동일 트랜잭션 내에서 select update를 수행하여야 하므로 autoCommit false로 설정한다.

·      3 : 해당 row OID를 가져오기 위해서는 SELECT 문에 class(table_name) 형식으로 명시해준다. 위 예제는 code 테이블의 alias a로 부여 하였기 때문에 class(a)와 같이 명시 하였다.

·      4, 5 : 조회된 OID getObject() 를 사용하여 Object 형태로 받은 후, CUBRIDOID로 형변환을 수행한다.

·      6 : CUBRIDOID.setWriteLock()를 호출하여 해당 row를 쓰기 잠금 설정한다.

·      7 : 쓰기 잠금 설정된 row의 데이터를 update하기 위해서 비교 조건으로 위에서 받아온 OID를 사용한다. OID를 조회 조건으로 사용하기 위해서는 class(table_name) 형식으로 명시해준다.

·      8 : OID 값을 해당 위치에 바인딩 하기 위해서는 setObject()를 사용한다.

 


  1. SQuirreL SQL Client에서 CUBRID 사용하기

    Date2009.04.18 CategoryJava ByPrototype Views34536
    Read More
  2. SNS 유형 서비스에서 CUBRID와 MySQL 조회 성능 비교

    Date2011.07.14 Category튜닝 Byadmin Views21188
    Read More
  3. SELECT ~ FOR UPDATE 대체 방법

    Date2009.12.30 CategoryJava By손승일 Views32381
    Read More
  4. QuantumDB Eclipse Plugin을 사용하여 CUBRID연동하기

    Date2009.10.06 CategoryJava Bycubebridge Views28923
    Read More
  5. QTADO를 이용하여 CUBRID접속하기

    Date2009.12.10 CategoryODBC/OLEDB Bycubebridge Views21490
    Read More
  6. PyCharm을 이용한 CUBRID, Django 연동 가이드

    Date2016.04.11 Category기타 By진우진 Views8159
    Read More
  7. Power*Architect 에서 CUBRID 사용하기

    Date2009.04.18 CategoryJava ByPrototype Views23880
    Read More
  8. Oracle의 SYS_CONNECT_BY_PATH 함수 흉내내기

    Date2009.06.15 Category기타 ByCUBRID_DEV Views26530
    Read More
  9. ODBC드라이버를 이용한 2개 이상의 Statement 사용방법.

    Date2009.07.02 CategoryODBC/OLEDB Byseongjoon Views23646
    Read More
  10. MySQL,PHP 기반에서 CUBRID,PHP 기반으로 포팅하기(CUBRID 2008 R3.1)

    Date2011.03.30 CategoryPHP By손승일 Views24446
    Read More
  11. MySQL,PHP 기반에서 CUBRID,PHP 기반으로 포팅하기

    Date2009.07.02 CategoryPHP By시난 Views32190
    Read More
  12. MD5 암호화 모듈

    Date2008.11.21 Category기타 Byadmin Views38597
    Read More
  13. LINUX에서 PHP 사용하기 - phpize를 이용한 설치

    Date2008.11.21 CategoryPHP Byadmin Views37461
    Read More
  14. LINUX에서 PHP 사용하기

    Date2008.11.21 CategoryPHP Byadmin Views42495
    Read More
  15. LINUX CUBRID 4.0 매니저 설치방법

    Date2011.07.19 CategoryInstall By정만영 Views23654
    Read More
  16. LIMIT절을 사용하여 SQL문을 간결하게 작성하고, 부분범위 처리를 유도하자.

    Date2016.06.29 Category튜닝 By권호일 Views15532
    Read More
  17. JavaSP SampleCode(Pivot기능)

    Date2009.07.28 CategoryJava Bycubebridge Views27555
    Read More
  18. JDBC를 사용한 다중화 구성 SELECT Query 부하 분산 가이드

    Date2017.03.30 CategoryJava By윤준수 Views3955
    Read More
  19. IIS에서 PHP, CUBRID 사용하기

    Date2010.04.19 CategoryPHP By남재우 Views30311
    Read More
  20. HP-UX에서 CUBRID 사용을 위한 kernel 설정값 조정

    Date2009.04.01 CategoryLinux Byadmin Views54160
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales