SQLite는 데이터베이스의 일종으로 SQL 데이터베이스 엔진을 탑재하는 경량화된 데이터베이스로서, MySQL, MS-SQL, Oracle과 같은 데이터베이스를 다루어 본 경험이 있는 사람이라면 SQLite에 손쉽게 익숙해질 수 있습니다. 

위에 언급한 MySQL 등의 데이터베이스들은 큰 큐모의 데이터베이스 프로그래밍을 지원하기에 적당하며 간단하고 빠른 용도의 데이터베이스로는 적합하지 않습니다. 그렇다고 파일을 사용하기에는 기능이 너무 제한적이며 데이터의 관리에도 어려움이 많습니다.

SQLite는 일종의 파일 데이터베이스로 MySQL 등과는 다르게 서버/클라이언트 모델을 지원하는 데이터베이스가 아니라, 로컬에서만 사용가능합니다. 원격 데이터베이스로의 Connection이 발생하지 않기때문에 데이터로의 접근이 매우 빠르며, 표준 SQL구문을 모두 지원하기 때문에 데이터의 관리도 용이합니다. SQLite는 그 경량성때문에 요즘 이슈가 되는 아이폰 등의 모바일 기기에 널리 사용되고 있으며 C, C++, Java, Object-C, Delphi, PHP 등 다양한 언어로 개발 환경을 지원하고, 다양한 운영체제에서 사용될 수 있습니다.

SQLite의 특징은 다음과 같습니다.

  • SQL92의 대부분을 지원한다. 다음은 지원하지 않는 몇 가지 기능들이다.
  • 단일 파일에 데이터베이스의 모든것을 포함한다.
  • ACID(Atomic, Consistent, Isolate, Durable) 보증
  • byte order에 관계없이 데이터 파일의 공유가 가능
  • 2테라바이트 (2^41)크기의 데이터 파일 생성지원
  • 효율적인 메모리 사용 : 25k라인정도의 C코드로 이루어졌다.
  • 많은 일반적인 명령을 실행하는데 PostgreSql과 Mysql보다 최소 2배이상 명령에 따라서 10-20배 이상 빠르다.
  • 하나의 구조체와 3개의 함수만 사용하는 정도로 sqlite를 사용하는 C/C++ 코드를 만들어 낼 수 있다.
  • TCL, Perl, PHP, .Net, Java, Python, SmallTalk, Ruby등의 다양한 언어지원
  • 다른 라이브러리등의 도움없이 작동된다. libsqlite.so와 sqlite 2개의 파일이면 작동 환경을 만들 수 있다.
  • Public Domain 라이센스를 가진다.
  • sqlite는 서버/클라이언트 모델을 지원하는 RDBMS가 아니다. 로컬에서만 사용가능하며 인터넷응용을 원한다면 별도의 서버 프로그램을 만들어야 한다.



1. Java에서 SQLite 사용하기
Java로 SQLite를 사용하기 위한 방법으로 Java Wrapper와 JDBC 드라이버가 있습니다. Wrapper는 C 라이브러리는 JNI를 통해 호출하는 방식으로 사용하기가 매우 번거롭습니다. JDBC 드라이버는 Java의 표준 JDBC 인터페이스를 통해 SQLite를 호출하는 방법으로 일반적인 데이터베이스를 다루는 방법과 거의 동일합니다.

SQLite JDBC 다운로드: http://www.zentus.com/sqlitejdbc/

SQLiteJDBC에는 기본적으로 SQLite3가 포함되어 있기때문에 별도로 SQLite를 다운로드 받지 않아도 됩니다.

Connection을 생성하는 코드는 다음과 같습니다.
public static Connection getConnection() {
		try {
			Class.forName("org.sqlite.JDBC");
			return DriverManager.getConnection("jdbc:sqlite:mydb.db");
		} catch (ClassNotFoundException e) {
		} catch (SQLException e) {
		}
		return null;
	}
Table을 생성하는 코드는 다음과 같습니다.
public void createTableTest() {
		Connection conn = null;
		Statement stat = null;
		try {
			conn = getConnection();
			if( conn != null ) {
				stat = conn.createStatement();
				stat.executeUpdate("drop table if exists mytable;");
				stat.executeUpdate("create table if not mytable(id int primary key);");
			}
		} catch (Exception e) {
			// exception handling
		} finally {
			if( stat != null ) try{ stat.close(); } catch(Exception e){}
			if( conn != null ) try{ conn.close(); } catch(Exception e){}
		}
	}
Select 쿼리를 수행하는 예제
public boolean selectQueryTest() {
		Connection conn = null;
		PreparedStatement stat = null;
		ResultSet rs = null;
		boolean result = false;
		try {
			conn = getConnection();
			if( conn != null ) {
				stat = conn.prepareStatement("select id from mytable where id=?;");
				stat.setLong(1, 10);
				rs = stat.executeQuery();
				if( rs.next() ) {
					if( 10 == rs.getLong("id") )
						result = true;
				}
			}
		} catch (Exception e) {
			// exception handling
		} finally {
			if( rs != null ) try{ rs.close(); } catch(Exception e){}
			if( stat != null ) try{ stat.close(); } catch(Exception e){}
			if( conn != null ) try{ conn.close(); } catch(Exception e){}
		}
		return result;
	}
한가지 주의해야 할 점은 SQLiteJDBC는 멀티쓰레드에서의 동기화를 지원하지 않기 때문에, 동시접근가능성이 있는 코드에 대해서 synchronized 블럭을 사용해야 합니다.(MySQL 등의 데이터베이스는 서버 프로세스에서 클라이언트간의 동기화가 이루어지기 때문에 synchronized 블럭을 사용할 필요가 없습니다.) 

'프로그래밍 > 오픈소스' 카테고리의 다른 글

이클립스에 GlassFish 설치하기  (0) 2011.02.17
SQLite with Eclipse  (1) 2010.05.06
SWF파일 분석 도구  (0) 2010.04.13
boost library 설치  (0) 2010.03.17
libcurl 사용하기  (0) 2010.03.15
SQLite  (3) 2009.09.11
ACE(ADAPTIVE Communication Environment)  (0) 2009.09.03
MySQL++  (0) 2009.08.21
C++ 암복호화 라이브러리 Crypto++  (0) 2009.08.20
C/C++ XML Parser TinyXml  (1) 2009.08.20
HttpClient와 Jericho Parser를 이용한 HTML 파싱  (0) 2009.07.28
Posted by devop

댓글을 달아 주세요

  1. SQLite로 작성한 DB를 이클립스에서 열람 및 수정할 수 있는 방법이 따로 있나요?

    2010.05.01 14:37 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 이클립스에서 SQLite 데이터베이스를 조작하는 방법을 포스팅 했습니다. http://lyb1495.tistory.com/entry/SQLite-with-Eclipse

      2010.05.06 14:08 신고 [ ADDR : EDIT/ DEL ]
  2. 좋은 정보 감사합니다 Trackback 해갈께요

    2010.08.12 12:36 신고 [ ADDR : EDIT/ DEL : REPLY ]