몇 달 전부터 개인 프로젝트를 진행하고 있다. Paltfrom Indepent를 따지다 보니 리눅스에서도 같은 화면이 보이면서 개발이 편한 환경을 찾았다. 결국, 찾은것이 WxWidget 이다. 컴파일러와 GUI를 만드는 환경도 많은 고민을 했다. 결국,  GUI 개발툴은 wxFormBuilder 이고 컴파일러는 Codeblock + MinGW 조합 또는 Visaul studio 2005 Express + MS Platform SDK 이다.  좀 복잡하긴 하지만 2가지 환경 다 이용해 보기로 했다.  내가 워냑 뻘짓을 좋아하다보니 2가지 다 이용하는 환경을 찾기 위해 고생을 했다.  우선 운영체제 환경은 Windows XP 이다. 차후 리눅스도 지원하기로 한다.(물론 차후라는 말은 절대로 하지 않는다는 의미가 포함되어 있긴하다. ...)

 처음에는 CodeBlock + Mingw + wxsmith 조합을 이용하려 했으나 회사에서 사용하는 툴이 Visual Studio 라 보니 손에 쉽게 익지 않아서 Multi 환경을 지원하도록 한 달전에 변경하였다. (더 자세히 말하면 디버깅이 Visual Studio 방식이 너무 편하다보니 Visual Studio 를 사용했다. )

환경 설정이 오래되다보니 내 기억력이 부정확할 수 있으니 이 글을 읽는 분들은 조심하세요...


작성이 : 승용.한밀
최종수정일 : 2009.12.14
이 글은 계속 수정되고 있습니다. 최종 수정일에 주의해 주세요...
앞에서 insert into 를 이용한 데이터 넣는 방법을 배웠다. 자료가 1, 2 개 추가 할 때는 사용할 만 하나 자료의 양이 많아지면 일일이 손으로 자료 넣기가 어려워진다. 그리고 mysql 이나 엑셀로 작성된 파일이 있고 이를 SQLite 에 다시 넣으려고 할 때도 있다. 이럴 때는 자료를 txt 파일로 만들어서 SQLite 에서 읽어 들이면 된다.

보통, SQL을 지원하는 Database Management System 에서는 txt 형으로 파일을 만드는 것을 지원한다. 엑셀에서도 txt 형으로 파일을 만들수 있다. MySQL Tutorial에 있는 것처럼 SQLite 에서도 텍스트로 된 파일을 불러올 수 있다.

우선 테이블을 만들자.
================================================================
sqlite> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(2), birth DATE, death DATE);
================================================================
그 다음 MySQL Tutorial 처럼 txt 파일을 만든다. (3.3 3.3 테이블에 자료를 넣어 보자. 에 다음 내용이 있다. ) 주의한 점은 앞에 적혀있는 name owner species sex birth death 이 부분을 제거한 다음 파일로 만들어야 한다.
===============================================================
Fluffy Harold cat f 1993-02-04
Claws Gwen cat m 1994-03-17
Buffy Harold dog f 1989-05-13
Fang Benny dog m 1990-08-27
Bowser Dianne dog m 1998-08-31 1995-07-29
Chirpy Gwen bird f 1998-09-11
Whistler Gwen bird 1997-12-09
Slim Benny snake m 1996-04-29
===============================================================
data.txt 라고 저장 했다. 이게 어떻게 보일지 모르겠지만. 항목 사이사이는 tab 으로 띄어져 있다. 그리고 빈 행은 없다. data.txt 파일은 SQLite 의 실행파일과 같은 디렉토리(폴더)에 놓았다.

이 것을 SQLite 로 읽기전에 세팅을 해 놓아야 한다. 지금 이 txt 파일에서는 항목을 탭으로 구분해 놓았다. 그래서 SQLite 에서 |(pipe) 로 기본적으로 구분하기 때문에 이걸 tab 으로 바꾸어 놓아야 한다. 앞의 "출력하는 모양 옵션 조절 " 이라는 글에서 수정 법을 이미 말했다.
sqlite> .separator \t
라고 고쳐야 한다.
이 제 파일을 불러올 수 있다. .import FILE TABLE 로 불러 온다. FILE 은 파일 경로이고 TABLE 은 테이블 이름이다. 여기서는 SQLite 실행파일이 있는 곳에 data.txt 가 있기 때문에 FILE 은 data.txt 이고 TABLE 이름은 pet 이다.
sqlite> .import data.txt pet
절대 끝에 세마콜론(;) 을 붙이기 말기 바란다. 이것 SQL 표준문이 아니다. SQLite 에서 제공하는 기능이다.

이제 값이 들어 갔는지 확인하면 된다.
================================================================
sqlite> select * from pet;
Fluffy Harold cat f 1993-02-04
Claws Gwen cat m 1994-03-17
Buffy Harold dog f 1989-05-13
Fang Benny dog m 1990-08-27
Bowser Dianne dog m 1998-08-31 1995-07-29
Chirpy Gwen bird f 1998-09-11
Whistler Gwen bird 1997-12-09
Slim Benny snake m 1996-04-29
================================================================
밑에서 2번째 데이터가 잘못 들어간 것처럼 보이는데 첫번째 필드값이 너무 길어서 그렇게만 보일 뿐이다.



 여기에서는 예제로 탭으로 띄어서 사용한 형식을 이용했다. 이 보다 더 많이 사용하는 형식은 csv 라고 해서 각 필드를 콤마(,)로 구별하는 형식이다. 그 파일은 다음과 같이 되오 있다.
============================================
Fluffy,Harold,cat,f,1993-02-04
Claws,Gwen,cat,m,1994-03-17
Buffy,Harold,dog,f,1989-05-13
Fang,Benny,dog,m,1990-08-27
Bowser,Dianne,dog,m,1998-08-31,1995-07-29
Chirpy,Gwen,bird,f,1998-09-11
Whistler,Gwen,bird,1997-12-09
Slim,Benny,snake,m,1996-04-29
===========================================
 큰 차이는 없는 형식이나 기존의 엑셀같은 스프레드쉬트나  SQL 프로그램에서 이런 형식으로 백업이나 내보내기 할 수 있다. 그래서 이 형식을 더 많이 이용한다. 이 형식으로 된 파일을 SQLite 에서 불러오기 위해서는 앞에서 사용한
sqlite> .separator \t
대신에
sqlite> .separator ","
를 이용한 후
sqlite> .import data.csv pet
만 하면된다.  (여기서 data.csv 는 저장된 파일이고 pet 은 저장될 테이블(Table)이다. 물론 pet 는 미리 만들어져 있어야 하며, csv 파일과 형식이 동일해야 한다.


최종 수정일 :  2006/11/08 18:02

작성자 : 한밀(승룡)
버전 : 0.1.1
MySQL 을 사용하다가 SQLite 에서 들어있는 데이터를 확인할 때(select * from 문 이용할 때) 너무 단순하게 출력해서 이상하다가 생각하는 사람이 있을 것 같다. 그래서 SQLite 에서 이런 출력 모양을 예쁘게 만들어 주는 옵션들이 존재한다. 또 이 옵션들은 다음에 나오는 .import FILE TABLE 을 이용할 때 처럼 읽어 들일 때도 사용된다.

여기 부분은 당연히 표준 SQL 문이 아니다. 그래서 점(.) 으로 시작하고 세미코론(;) 을 끝에 찍으면 안된다. 이 내용은 SQLite 홈페이지 를 참조했다.


앞에서 만든 테이블을 기본으로 삼기로 하자. 우선 sqlite.exe 프로그래을 실행시키고, 다음처럼 입력하자. 약간 귀찮다면 그냥 복사 해서 넣자. (복사해서 넣을 때 sqlite> 이 다음에 있는 내용들만 내가 입력한 것들이다. )
====================================================================
sqlite> create table tbl1(one varchar(10), two smallint);
sqlite> insert into tbl1 values('hello!',10);
sqlite> insert into tbl1 values('goodbye', 20);
====================================================================

이제 pet 이라는 테이블에 하나의 데이터만 들어가 있는 상태이다. 앞에서 설명했듯이 pet 안에 있는 모든 데이터를 보기 위해서는 select * from tbl1; 을 이용한다.
====================================================================
sqlite> select * from tbl1;
hello!|10
goodbye|20
====================================================================

출력해준 내용이 정보도 없고 그냥 있는 데이터만 보여준다. MySQL 을 사용했던 사람은 다음과 같은 출력을 원할 것이다.
+----------+-----+
| one | two |
+----------+-----+
| hello | 10 |
|goodbye | 20 |
+----------+----+

콘솔창이 한계가 있기 때문에 완벽하진 않더라도 저 정도면 보기 좋은 상태이다.

SQLite 에서 .help 를 입력하면 SQLite 표준 문은 아니지만 도움이 되는 많은 명령어가 있다. 이 중 .mode 대해 다음과 같은 설명이 있다.

.mode MODE ?TABLE? Set output mode where MODE is one of:
csv Comma-separated values
column Left-aligned columns. (See .width)

insert SQL insert statements for TABLE
line One value per line
list Values delimited by .separator string
tabs Tab-separated values

column 이 가장 비슷하게 보여준다. (이 블로그에서는 잘 보이지 않는데 콘솔창에서는 정렬되어 보인다.)
====================================================================
sqlite> .mode column
sqlite> select * from tbl1;
hello! 10
goodbye 20
====================================================================

여기에 .header on 을 하면(반대는 .head off 이고 이 값이 디폴트이다.) 조금 더 보기 좋다.
====================================================================
sqlite> .header on
sqlite> select * from tbl1;
one two
---------- ----------
hello! 10
goodbye 20
====================================================================
보다시피 위에 one, two 라는 헤더가 붙여서 보인다.

내가 이것에 대해 설명한 것은 단순이 보기 좋게 만들려는 것은 아니다. 여기에 있는 옵션들은 출력은 반대로 입력할 때(.import 를 이용할 때)도 적용되기 때문이다.

입력과 가장 관련된 부분은 .mode list 문이다. 설명(.help)을 읽어보면 .separator 로 구분자를 설정된 문자로 구분해준다고 적혀있다. .mode 에서 기본 값은 list 이다. 그리고 .separator 의 기본값은 "|"(pipe 기호)이다. 많이 사용하는 기호로 탭이 있다. 탭을 사용할려면 "\t" 을 이용하면 된다. 왜 이건 내가 설명하는지는 다음 강의를 듣으면 이해가 될 것이다.<br />
<br />
최종 수정일 :  2006/10/29 22:09
작성자 : 한밀(승룡) 버전 : 0.1.1