E D R S I H C RSS
ID
Password
Join
어리석은 사람은 침묵을 지키는 것이 가장 좋다. 그러나 만일 그가 그런 진리를 알고 있다면 그는 더 이상 어리석은 사람이 아니다. -사아디



Contents

1 소개
2 특징
3 간이 메뉴얼
4 예제

1 소개 #

  • 메인 링크 : [http]http://www.xtgsystems.com/linux/lua/luasimdb.php
  • 다운로드 : [http]http://www.xtgsystems.com/linux/download/lua/luadb/
  • 루아용 멀티 데이타베이스 연결 툴입니다. 라이브러리 형식으로 되어있고 상당히 편하고 강력합니다.
  • 패치 성공! 테그 메소드로 코딩되어있는 것을 모두 메타테이블로 변경했습니다. :D Redpixel의 루아 lib 다운로드에 있는 제 베포본에 포함되어있으므로 사용하실 분은 받아가시길... 참고로 이 배포본은 루아 5.0 알파버젼을 기반으로 한 것입니다.

2 특징 #

  • LuaDBSimpleDB API에서 제공하는 기능 전체를 제공.
  • 서로다른 데이타베이스에 연결하는 것에서 부터 동시에 서로 다른 백엔드 사용이 가능.
  • 트렌젝션기능(commit과 rollback기능)을 제공하며, NULL값을 지원한다. (루아에서는 nil값으로 표현된다).
  • '하부에 깔려있는' 연결 풀링이 가능하다. (이것은 백엔드에 의해 제공된다면 다중 연결의 효율을 올릴수 있는 기능이다.)
  • 백엔드 정보에 따른 자동 데이타 타입 변환을 제공한다. 이것은 인덱스와 컬럼의 이름(알리어스)둘다에 의해 키처리된 결과값들을 반환하며, 전정한 결합 변수기능을 지원한다. (다시말하면, 질의문을 만들때 값을 변환하거나 병합할 필요가 없다.)
  • ENV-CON-STMT 계층방식은 DB라는 하나의 객체로 작동하게 되어있어, 복잡한 코딩시간을 줄일 수 있는 장점이 있다.

3 간이 메뉴얼 #

이 툴은 ENV, CON, CUR에 해당하는 3티어 SQL 함수들을 단순화 시켜놓았다. 단순히 ENV(드라이버 객체에 해당)과 DB(연결과 커서 객체에 해당)을 사용하면 된다. 연결들은 자동적으로 풀링처리되며 쉽게 복사될 수 있다. 커서들은 메모리를 절약하기 위해 가능한한 빠르게 자동적으로 할당/해제된다. (fetch가 호출되고 더이상 데이타가 없는 경우나 혹은 close 또는 gc가 호출된 경우에 커서들은 다음 실행을 수행하기 전에 메모리 해제된다.)

먼저 드라이버를 로딩하자.
ENV,err = SQLOpen( 'simdb_odb.dll' ); print(err); -- ODBC 드라이버를 로딩한다.

그다음 다음 함수를 사용하여 DB에 연결을 시도할 수 있다.
DB,err = ENV:ConnectDB{ db='crts', uid='sysdba', pwd='masterkey', host='localhost' }; print(err);

같은 인자를 가진 또다른 ConnectDB가 호출되면 연결은 공유된다. 또한 복잡한 인자를 쓰지 않고서도 이미 존재하는 DB객체로부터 또다른 DB객체를 복제할 수 있다. 다음과 같이 하면 된다.
DB2 = DB:Clone();

질의문을 실행하려면 Execute를 사용한다. 반환값은 1이면 정상, nil이면 에러이다.
ret,err = DB:Execute( "select * from MYTABLE" ); print(err);

페치도 정말로 쉽다.
ind,row = DB:Fetch();

ind는 상태 지시자이다. (nil이면 데이타의 끝을 의미한다.) 그리고 row는 데이타의 한 열을 나타낸다. (컬럼명/알리아스와 1~n까지의 숫자에 의해 인덱스되어져 있다.)

Commit과 Rollback은 말그대로 실행하면 된다. Close 함수는 DB객체의 연결을 끊고 메모리 해제를 시도한다. Close를 실행한 후에는 객체를 사용하면 안된다. (비정상적으로 종료하게 된다.) 모든 DB객체들은 "gc" 메소드가 지정되어있으므로 명시적으로 Close를 할 필요는 없다. 이것은 ENV객체에도 마찬가지로 적용된다. DB:Close를 실행하지 않았다면 절대로 ENV:Close를 호출하지 말도록 해라!

자동 연결 풀링을 끄려면 다음과 같이 실행한다.
ENV:SetOptions{ pooling=0 };

반대로 켜려면 다음과 같이 실행한다.
ENV:SetOptions{ pooling=1 };

(역주 : 간단하다. 이보다 더 쉬울수는 없다. _ ODBC나 ADO 코딩한번이라도 해본 분은 뼈.저.리.게. 느낄수 있을것이다.)

4 예제 #

ENV,err =SQLOpen( 'simdb_odb.dll' ); print(err); -- MySQL 드라이버를 초기화하고 연결한다.
-- 데이타베이스에 연결하자
DB,err = ENV:ConnectDB{ db='crts', uid='sysdba', pwd='masterkey', host='localhost' }; print(err);

ret,err = DB:Execute( "insert into RQ_DTYP (id_dtyp,nazev) values (12,?)", 'hello' ); print(err);

ret,err = DB:Execute( "select * from RQ_FAZE" ); print(err);

while 1 do
   ind,row = DB:Fetch();
   if not ind then break; end;   -- 끝까지 읽어들였으면 루프를 종료한다.
   print(row[1] .. ' ' .. row[2]);
end;

DB:Close();
ENV:Close();

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-10-28 12:42:52
Processing time 0.3148 sec