'SQLStatement'에 해당되는 글 3건

  1. 2009.02.15 Local DB 데이터 불러오기
  2. 2009.02.15 Local DB에 데이터 삽입하기
  3. 2009.02.15 Local DB Table만들기
AIR/local SQL활용2009. 2. 15. 12:32

데이터베이스와 테이블 및 데이터 레코드가 정상적으로 있다면  SQLMode.READ를 통하여 DB에 접근하고 "SELECT 변수명 FROM 테이블명"을 통하여 데이터를 가져올 수 있다.

내문서에 B1TestDB로 접근하여 bookstore에 있는 모든 내용을 가져오는 코드
var file:File = File.documentsDirectory.resolvePath("B1TestDB.db");
var connection:SQLConnection = new SQLConnection();
var statement:SQLStatement = new SQLStatement();

connection.openAsync( file , SQLMode.READ );
connection.addEventListener( SQLEvent.OPEN  , onOpen );
statement.addEventListener(SQLEvent.RESULT , onPrint );

function onOpen( e:SQLEvent ):void
{
statement.text = "SELECT * FROM bookstore";
statement.execute();
}

function onPrint( e:SQLEvent ):void
{
//prt라는 텍스트필드에 출력
prt.text = "";
var result:SQLResult = statement.getResult();
for( var i:int=0; i<result.data.length; i++ ){
for( var str:String in result.data[i] ){
prt.text += str +" : "+ result.data[i][str] + "   ";
}
prt.text += "\n";
}
connection.close();
}

이 외에도 테이블 삭제나 기존 DB의 업데이트 등 몇 가지 기능들이 더 있으므로 아래링크를 참고하여 SQL문을 테스트하면 된다. 방법은 항상 접근-열기-편집-닫기와 같다.

커넥션은 한번에 한개씩만 사용가능하므로 여러개의 DB와 연동하기 위해서는 attach()를 사용하는 것이 바람직하다. 이는 SQLConnection은 많은 연산이 필요하므로 보통 한 개를 만들어 사용하기 때문이다.또한 DB작업시에는 begin()rollback(), commit()등의 트랜젝션을 사용하는 것이 바람직하다.

참고) SQL명령문
Posted by 버터백통
AIR/local SQL활용2009. 2. 15. 12:17


앞서 DB와 DBTable을 만들었으면 AIR에서 입력받은 데이터를 저장해야 한다. 방법은 앞서정리한 DB객체 프로세스와 동일하다. 다만 SQL문만 달라질 뿐이다.

이번에는 내문서에 B1TestDB를 만들고 책관련 DB인 bookstore가 있다는 가정하에 아래와 같이 정리한다.
var file:File = File.documentsDirectory.resolvePath("B1TestDB.db");
var connection:SQLConnection = new SQLConnection();
var statement:SQLStatement = new SQLStatement();

//UPDATE는 기존 DBTable을 편집하기위해서 사용한다.
connection.openAsync( file , SQLMode.UPDATE );
statement.sqlConnection = connection;
connection.addEventListener( SQLEvent.OPEN , open );

function open( e:SQLEvent ):void
{
아래처럼 E4X문법( @ , : )을 사용하여 공간을 할당하고 이후 [] 연산자를 사용하여 값을 동적으로 대입하는 것이 효과적이다.  이유는 명령문이 실행시 마다 문법이 다르면 AIR는 재컴파일하는데  아래처럼 최초 한번만 정의하면 값이 달라져 문장이 틀려도 재컴파일 하는 경우가 없어 효율적이다.
statement.text = "INSERT INTO bookstore( title, publisher, introduction ) VALUES( @title, @publisher, @introduction )";

//AIR에서 입력받은 변수값을 대입한다.
statement.parameters["@title"] = titleField.text
statement.parameters["@publisher"] = pubField.text
statement.parameters["@introduction"] = introField.text
statement.execute( -1 , new Responder( insertSuccess , insertFault )  );
    
//사용한 파라미터 제거
statement.clearParameters()
}

//사용한 DB커넥션 종료
function insertSuccess():void
{
connection.close();
}

참고) SQL명령문

Posted by 버터백통
AIR/local SQL활용2009. 2. 15. 11:49

AIR에서는 SQLLite엔진을 제공하고 있다. 따라서 로컬상에 DB를 기록하거나 가져오거나 편집이 가능하며 프로세스도 다른 서버사이드 언어와 마찬가지로 접근-열기-편집-닫기와 같다.

[ DB를 활용하기위한 객체 프로세스 ]
1 : File을 설정하여 사용할 DB로 경로설정
2 : SQLConnection을 사용하여 경로상의 DB오픈 - open()/openAsysc()
3 : SQLStatement를 사용하여 쿼리전송(DB작업) - excute() / next()
4 : SQLConnection.close() 를 통해 작업후 DB를 닫아준다.
   
[관련이벤트]
SQLEvent : SQLConnection 또는 SQLStatement 인스턴스에서 수행된 작업 이벤트

[ 내문서에 DBTest데이터를 만들고 testDB테이블을 만든다 ]
SQL쿼리문중에 CREATE TABLE을 이용하여 로컬에 데이터를 만들어 본다.
var file:File = File.documentsDirectory.resolvePath("DBTest.db");    //경로 설정
var connection:SQLConnection = new SQLConnection();         //DB연결
var statement:SQLStatement = new SQLStatement();           //DB관리

//DB연결자에 경로와 모드설정
connection.openAsync( file , SQLMode.CREATE );    
[ SQLMode ]
SQLMode에는 3개가 있다.
- CREATE : 업데이트를 위해 연결이 열리고 지정한 파일이 없는 경우 데이터베이스 파일을 만든다는 것을
                    나타냅니다.
- READ: 연결이 읽기 전용 모드로 열린다는 것을 나타냅니다.
- UPDATE : 업데이트를 위해 연결이 열리지만 지정한 파일이 없는 경우 새 데이터베이스 파일을 만들지
                   않는다는 것을 나타냅니다.


//DB연결 이벤트
connection.addEventListener( SQLEvent.OPEN , onOpen );  
    
//SQL관리자에 연결자등록
statement.sqlConnection = connection;        
statement.addEventListener( SQLEvent.RESULT , onResult );
     
//SQL 오픈
function onOpen( e:SQLEvent ):void
{
//만약 testDB이 없으면 새로운 테이블을 생성하라..
statement.text = "CREATE TABLE IF NOT EXISTS testDB(" +
       "no INTEGER PRIMARY KEY AUTOINCREMENT," +
       "name VARCHAR," +
       "date DATE," +
       "content TEXT" +
       ")";
       
//-1은 모든 데이터의 결과를 반환 받는다.
statement.execute();
}
    
//SQL실행 후 연결자 종료
function onResult( e:SQLEvent ):void
{
connection.close()
}

참고) SQL명령문
Posted by 버터백통