자꾸 까먹어서 인터넷 검색을 하는게 싫어서 정리합니다 -_-;

SHELL 명령어

.tables : 테이블 목록을 보여준다.

.schema [table_name] : CREATE문을 보여준다.


SQL 명령어

select * from sqlite_master;
:

관련 글1 : http://bunhere.tistory.com/140 [Widget][예제]ListView with CursorAdaptor
관련 글2 : http://bunhere.tistory.com/153 [팁]기존에 생성된 (Sqlite3) DB를 안드로이드에서 이용하기

생성된 DB를 사용하는 것과 관련된 질문들이 많아 예제 프로그램을 작성해보았습니다.

옛날 만들었던 ListView with CursorAdaptor의 코드를 거의 그대로 들고 왔으나, DB를 만드는 부분은 153번의 initialize를 사용했습니다.

1. DB를 준비하자

먼저 DB 파일이 있어야 할 것입니다.
SQLITE3을 통해 아래와 같이 만들었습니다.(리눅스에서)

필요하신 분들을 위해 해당 파일 첨부합니다.

SQLite version 3.6.16
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table lecture (_id integer, name);
sqlite> insert into lecture values(1, 'ryuan');
sqlite> insert into lecture values(2, 'yesum');
sqlite> insert into lecture values(3, 'mindong');
sqlite> .q

2. 새 프로젝트를 만듭니다.
생성하는 방법은 익히 아실거라 생각됩니다. 중요한 것은 Package name입니다.
com.sohon.testDB 으로 패키지명을 정한 경우
해당 안드로이드 어플리케이션은 위 패키지 경로가 지정한 곳에 생깁니다.
그리고 /data/data/com.sohon.testDB 아래에 패키지 관련 파일들이 아래 그림과 같이 생기게 됩니다.
DDMS의 일부를 캡쳐한 화면입니다. 상단에 /data/data/는 다른 프로젝트들 떄문에 같이 캡쳐하지 못한 점 양해 부탁드립니다.

일단 위와 같이 새 프로젝트 정보를 입력하고 Finish를 누릅니다.
그러면 이클립스 개발환경이 뜹니다.

3. 코딩하기
ActTestDB.java 파일에 아래와 같은 내용을 코딩합니다
아래 내용은 관련글1과 관련글2의 내용을 합쳐놓은 코드와 유사합니다.
꼭 필요한 부분만 설명드리겠습니다. 관련글1,2를 참고하시기 바랍니다.

먼저 onCreate에서 initialze(this)를 통해 DB 파일을 asset으로부터, /data/data/com.sohon.testDB/databases 아래로 복사할 것입니다.

그리고 setAdaptor를 이용해 m_listbox에 DB를 연결합니다.
이것을 위해 수정해야 할 정보는 먼저 ROOT_DIR, DATABASE_NAME, TABLE_NAME 입니다.

실행하시면 아래와 같은 결과를 얻으실 수 있습니다.
에뮬레이터 resolution이 좀 이상한 것은 제 에뮬레이터 해상도를 이상하게 맞춰놔서 그렇습니다.(테스트용)


  1. 2011.01.09 14:04 신고

    /data/data/com.mf.main/databases/***.DB 파일을
    /data/data/com.mf.util/databases/***.DB 여기에 복사하려고 할때
    위와 같이 적용할경우 수정해야 할 부분이 있나요?
    삼일동안 방법을 찾고있는대 어세트 매니져 오픈쪽에서 자꾸 파일을 못찾는다고 에러를 뱉어서요
    전혀 될수가 없는 방법인지 조차도 모르겠내요 도움 부탁드리겠습니다.

    • 소혼 2011.01.10 21:16 신고

      Asset Manager는 asset/ 아래 있는 파일을 열때 사용하는 것인데요.
      서님이 원하시는 방법은 그게 아닌것 같네요. 만약 com.mf.main이 같은 앱의 경로시면 자바의 파일 방식을 이용하셔야 할 것 같습니다.

  2. 아햐 2011.02.01 17:30 신고

    안녕하세요.
    많은 도움 됐습니다.
    소스코드 티스토리에 붙이는거 무슨 기능을 사용해서 저렇게 표시되는지 알수 있을까요?

    • 소혼 2011.02.05 22:05 신고

      SyntaxHighlighter 라는 걸 사용해서 달았습니다. 저도 제대로 쓰고 있진 못하구요. 검색해보시면 사용법을 찾으실 수 있을거에요. 새해 복 많이 받으세요.

  3. digidigiri 2013.10.28 22:17 신고

    안녕하세요 계속 sql 에러로 고생좀 하고 있습니다 ㅠ 위 예제로도 테스트를 해봤는데요, 패키지 경로도 제대로 수정했고 레이아웃 파일도 정확하게 사용했는데, 이 예제도 왜 죽어버리는지 당췌 알 수가 없네요.. DDMS에서도 확인결과 databases 폴더가 생성되고 test..db 파일도 복사가 된게 확인이 되거든요. 근데 계속 no such table lecture... 해결이 안되네요. 어떤 문가 발생한 걸까요. 위 예제에서 제가 수정한 부분이라고는 ROOT_DIR을 저에게 맞게 수정한것 밖에 없는데..

    • 소혼 2013.10.31 10:49 신고

      최근엔 안드로이드를 보고 있지 않습니다만,
      작성하신 코드를 bunhere@gmail.com으로 보내주시면 확인해보겠습니다.


안드로이드는 데이터베이스로 SQLite3를 사용한다.
sqlite3 은 가볍게 사용할 수 있어 임베디드에서 많이 사용하는 오픈소스 데이터베이스 엔진이다.

프로젝트에서 DB가 필요한데 sqlite 에 직접 insert하기 귀찮아 스크립트로 sql을 생성했더니 sqlite3에 넣을 방법이 필요했다. 노가다로 붙여넣기 신공을 사용하려 했으나 아주 간단하게 처리가 가능했다.

linux만을 전제한다.

1) sql 명령어 set으로 backup받는 경우

echo ".dump" | sqlite3 mydb.db > backup.script

2) sql 명령어 집합으로 db 파일 만들기

sqlite3 < backup.script


(backup.script는 SQL로 이루어진 text 파일이다)
허접한 글이지만, 도움이 되신다면 아래 손가락 꾹 눌러주세요.

+ Recent posts

티스토리 툴바