앞에서 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
데이터 베이스를 이용하기 위해서는 당연히 Table 을 만든 후 사용할 자료를 넣어야 한다. 이 때 사용하는 구문이 insert into 이다.
 
  실습을 위해 다시 프로그램을 인수없이(더블클릭해서) 실행시켜보자. 지난 번에 사용한 테이블을 다시 사용해 보겠다.
====================================================================
sqlite> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(2), birth DATE, death DATE);
====================================================================
  성 격이 급한 사람이라면 sqlite> 이 다음에 있는 것을 복사한다음, 콘솔창으로 붙여넣기 하는게 좋다. 넣고 나서 엔터 치면 제대로 들어갔다면 아무 에러표시 없다. 이게 제대로 들어 갔는지 확인 하는 방법을 pet 이라는 Table 이 있는지 확인하면 된다. mysql 에서 SHOW TABLES; 하면 되겠지만 여기서는 mysql 이기 때문에 다음과 같이 하면 그 밑에 줄과 같이 나온다.
====================================================================
sqlite> .tables
pet
====================================================================

  그 리고 테이블이 내가 요구한 대로 만들어 졌는지 확인하려면 mysql 에서는 mysql> DESCRIBE pet; 이라고 하면 아주 자세히 잘 보여주는데 sqlite 는 .schema pet 이 그나마 가장 잘 보여주는 것 같다.
====================================================================
sqlite> .schema pet
CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex
CHAR(2), birth DATE, death DATE);
sqlite>
====================================================================
 여기서 보다시피 내가 만든 테이블을 그대로 보여준다. (이 방법 외에 더 좋은 방법이 있는지 연구중이다. )

  이제 본격적으로 데이터를 넣어보자. MySQL 레퍼런스 중간 에 있는 "3.3 테이블에 자료를 넣어 보자." 끝 부분에 insert into 구분이 나와있다.
SQLite 에서도 그대로 사용할 수 있다.
====================================================================
sqlite> INSERT INTO pet
...> VALUES('Puffball', 'Diane', 'hamster', 'f', '1999-03-30', NULL);
====================================================================
역 시 아무에러 표시도 없어야 잘 들어간 것이다. 이 방법은 우리가 앞서 테이블을 만들 때 사용했던 자료대로 데이터가 들어 간 것이다. 앞서 테이블을 만들 때 name, owner, species, sex, birth, death 순으로 자료의 구조를 만들었다. 바로 위에서 그 순서대로 자료를 넣은 것이다.

자료가 잘 들어 갔는지 확인해 보자. select * from pet; 하면 자료들을 확인할 수 있다. 물론 SQL 표준문이다.(이 말은 당연히 mysql 에서도 사용가능하다는 말이다. )
====================================================================
sqlite> select * from pet;
Puffball|Diane|hamster|f|1999-03-30|
====================================================================
( 너무 단순히 자료만 나오가 눈으로 보기 힘들어서 불편해 하는 사람이 많을 것 같다. 옵션을 주면 mysql 처럼 조금 보기 좋게 만들 수 있다.)

최종 수정일 : 2006/10/29 12:15

작성자 : 한밀(승룡) 버전 : 0.1.1