2011. 4. 2. 13:00

안드로이드에서 로컬 DB로 SQLite를 사용할 수 있다고 합니다.

그래서 .NET에서 미리 사용해 봅시다.

 

1. SQLite .NET용 프로바인더(Provider) 설치 기

SQLite를 닷넷에서 사용하기 위한 프로바인더를 설치해야 합니다.

참고 : sourceforge - ADO.NET 2.0 Provider for SQLite Files

(2023년 기준으로 누겟에서 받아서 사용해도 됩니다.)

 

프로바인더가 설지되었으면 아래와 같이 참조하여 사용하면 됩니다.

System.Data.SQLite;

using System.Data.SQLite;

 

 

2. 사용법

일반 ODBC와 동일 합니다

커낵션 만들어서 열고 커맨드 만들어서 사용하면 됩니다.

(검색하면 많이 나오니 자세한 설명은 생략합니다. ^^;)

 

 

3. 속도가 느린 문제점

그런데 2000개가량의 데이터를 인서트해보았더니..... 대략 2~3분 정도 걸렸습니다;;;

SQLite자체가 작은 'SQL'이니 상용 'SQL'서버보다 느릴 수는 있는데....

2,000개면 그렇게 많은 데이터도 아닌데 ㅡ,.ㅡ;;;;

1매가도 안되는 데이터에 이렇게 오래 걸린다니;;;;

 

3-1. 문제 해결 방법

자료를 찾아보니 SQLite는 인서트시에 매번 트랜잭션이 발생되서 그러는 현상이라고 합니다...아....

'select'외의 작업을 하면 한 작업마다 발생시킨다고 합니다.

매번 트랜잭션을 발생시키지 않도록 하면 속도가 비약적으로 빨라집니다.

 

3-2. C# 코드

명시적으로 한 트랙잭션을 사용하도록 명령어를 아래와 같이 구성합니다.

//작업전에 한트랜잭션에서 할수 있게 열어줍니다.
//생성한 커낵션 : liteConn

liteComm = new SQLiteCommand( "Begin;", liteConn);
liteComm.ExecuteNonQuery();

<......중략......>

//작업이 끝나면 트랜잭션을 닫아 줍니다.
liteComm = new SQLiteCommand("Commit;", liteConn);
liteComm.ExecuteNonQuery(); 

//이후 커낵션을 닫아 줍니다.

 

 

마무리

SQLite만 이런 거 보면 의도적인 거 같네요.

작은 DB라 한 번에 여러 개 편집하는 시나리오를 상정하지 않은 걸까요?