안드로이드에서 로컬 DB로 SQLite를 사용할 수 있다고 합니다.
그래서 .NET에서 미리 사용해 봅시다.
SQLite를 닷넷에서 사용하기 위한 프로바인더를 설치해야 합니다.
참고 : sourceforge - ADO.NET 2.0 Provider for SQLite Files
(2023년 기준으로 누겟에서 받아서 사용해도 됩니다.)
프로바인더가 설지되었으면 아래와 같이 참조하여 사용하면 됩니다.
System.Data.SQLite;
using System.Data.SQLite;
일반 ODBC와 동일 합니다
커낵션 만들어서 열고 커맨드 만들어서 사용하면 됩니다.
(검색하면 많이 나오니 자세한 설명은 생략합니다. ^^;)
그런데 2000개가량의 데이터를 인서트해보았더니..... 대략 2~3분 정도 걸렸습니다;;;
SQLite자체가 작은 'SQL'이니 상용 'SQL'서버보다 느릴 수는 있는데....
2,000개면 그렇게 많은 데이터도 아닌데 ㅡ,.ㅡ;;;;
1매가도 안되는 데이터에 이렇게 오래 걸린다니;;;;
자료를 찾아보니 SQLite는 인서트시에 매번 트랜잭션이 발생되서 그러는 현상이라고 합니다...아....
'select'외의 작업을 하면 한 작업마다 발생시킨다고 합니다.
매번 트랜잭션을 발생시키지 않도록 하면 속도가 비약적으로 빨라집니다.
명시적으로 한 트랙잭션을 사용하도록 명령어를 아래와 같이 구성합니다.
//작업전에 한트랜잭션에서 할수 있게 열어줍니다.
//생성한 커낵션 : liteConn
liteComm = new SQLiteCommand( "Begin;", liteConn);
liteComm.ExecuteNonQuery();
<......중략......>
//작업이 끝나면 트랜잭션을 닫아 줍니다.
liteComm = new SQLiteCommand("Commit;", liteConn);
liteComm.ExecuteNonQuery();
//이후 커낵션을 닫아 줍니다.
SQLite만 이런 거 보면 의도적인 거 같네요.
작은 DB라 한 번에 여러 개 편집하는 시나리오를 상정하지 않은 걸까요?