'오픈소스'에 해당되는 글 2건

  1. 2009.09.11 SQLite (3)
  2. 2009.09.03 Java XML Parser JDOM (2)
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 ]

프로그래밍/JAVA2009.09.03 14:13
JDOM(Java Document Object Model)은 이름에서 알 수 있듯이 Java에 최적화된 XML 데이터를 다루기 위한 오픈소스 라이브러리로 SAX(Simple API for XML), 문서 객체 모델(DOM)과 상호 연동되며 SAX와 DOM의 장점만을 골라 만든 클래스와 인터페이스를 제공합니다. 

(SAX는 이벤트기반의 Document 파싱과 처리를 할 수 있는 빠르고 강력한 기능을 제공하는 API인반면, DOM은 매우 유연한 구조를 가지고 있지만 늦은 처리시간과 Document 처리절차가 복잡하다는 난점을 가지고 있는데, JDOM은 이러한 SAX의 빠른 수행속도와 DOM의 높은 유연성 등의 장점을 적절히 혼합해 놓은 형태를 보여줍니다.) 

JDOM은 W3C DOM과 유사하지만 DOM을 기반으로 설계되거나 DOM을 모델로 하지 않는 대안적인 문서 객체 모델로, 차이점은 DOM은 언어 중립적으로 설계되었고, 초기에 HTML 페이지의 자바 스크립트 가공에 주로 이용되었던 반면, JDOM은 Java 전용으로 설계되어 메소르 오버로딩, 컬렉션, 리플렉션 등 Java 프로그래머에게 친숙한 환경을 제공합니다.


위의 사이트에서 JDOM을 다운받아 프로젝트에 jdom.jar파일을 추가하면 됩니다.

1. JDOM을 이용한 간단한 XML 읽기 예제
public static void main(String[] args) {
		try {
			File xmlFile = new File("init.xml");
			FileInputStream in = new FileInputStream(xmlFile);
			SAXBuilder builder = new SAXBuilder();
			Document doc = builder.build(in);
			Element root =  doc.getRootElement();
			
			List<element> elements = root.getChildren();
			for(Element element : elements) {
				if( element.getName().equals("Id") )
					System.out.println(element.getText());
				else if( element.getName().equals("File") ) {
					List<ltelement> items = element.getChildren();
					for(Element item : items)
						System.out.println(item.getText());
				}
			}
		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
XML소스는 아래와 같습니다.
<?xml version="1.0" encoding="UTF-8"?>

	1
	
		a.txt
		b.txt
		c.txt
	


'프로그래밍 > JAVA' 카테고리의 다른 글

JavaMail with IMAP  (0) 2010.01.27
JavaMail을 이용하며 메일전송  (0) 2010.01.15
RSA 암호화  (0) 2010.01.15
Java 쓰레드  (0) 2009.12.04
스트러츠 properties 한글 편집  (0) 2009.12.03
Java XML Parser JDOM  (2) 2009.09.03
JRE Detection  (0) 2009.08.11
자바 웹 스타트(Java Web Start)  (0) 2009.08.07
JFreeChart with SWT  (0) 2009.07.14
자바 데몬(daemon) 만들기  (2) 2009.07.08
LRU 캐쉬 엔진의 구현  (0) 2009.06.26
Posted by devop

댓글을 달아 주세요

  1. 형, 내년에 복학하면 같이 해보아요'ㅡ'/

    2009.09.08 04:29 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. CSS좀 만지셔야할듯;;; 메뉴가 하나도 안보여 ㅠㅠㅠㅠㅠ

    2009.09.08 04:29 신고 [ ADDR : EDIT/ DEL : REPLY ]