출처: http://blog.naver.com/PostView.nhn?blogId=onamt&logNo=70080739940
안드로이드에서 Database를 sqlite를 사용한다.
Sqlite3 는 안드로이드 SDK 에 포함되어 있기 때문에 따로 구해서 설치 하지 않아도 된다.
Database를 생성하고 Command 창에서 접근하는 방법을 알아보자.
1. 에뮬레이터를 구동시킨다.
2. android sdk가 설치 된 폴더에서 tools 폴더안에 adb.exe 있는지 확인한다.
확인을 했으면 시작 > 실행 > cmd 를 실행하여 커맨드 창을 하나 띄운다.
위에서 확인한 adb.exe가 있던 폴더로 이동한다.
3. 이제 명령어를 쳐서 shell을 실행 시키자.
adb shell
정상적으로 작동한다면 아래와 같이 실행이 될 것이다.
4. 경로를 한번 확인하여 보자.
--------------------------------------
# pwd
pwd
/
#
--------------------------------------
지금까지 한것을 따라했다면..
Eclipse에서 경로는 DDMS > File Explorer의 위치는 아래 그림과 같다
5. Database도 data 이니 경로를 옮겨 보자
/data/data/ 경로의 하위에 에뮬레이터가 구동되면서 현재 실행시킨 프로젝트의
Activity가 생성되어진 폴더가 있을 것이다.
ex> 실행 시킨 Project가 AndroidTest1이고 Activity가 AndroidTest1.first 패키지에 들어 있다면
-----------------------------------------------------------------------------------
# cd /data/data/AndroidTest1.first
-----------------------------------------------------------------------------------
위와 같은 폴더가 생성되어져 있을 것이다.
해당 경로로 이동한다.
6. 경로를 위와 같이 변경했다면 Database 관련 폴더를 생성하여 보자
그리고 해당 폴더로 이동을 한다
7. 이렇게 생성한 폴더를 Eclipse에서 확인하여 보면 DDMS > File Explorer에 다음과
같은 경로가 있을 것이다.
8. 이제 Database를 생성하여 보자.
sqlite3 sample.db 이렇게 하면 sample.db가 생성이 된다.
9. Table을 생성하여 보자.
test 라는 table을
컬럼으로는 id라는 integer 속성의 primary key , autoincrement(자동증가) 옵션을
name이라는 varchar(30) 으로
만들었다.
10. 데이터를 넣어 보자.
11. insert한 Data를 Select 해보자.
확인 해본 결과 방금 집어넣은 Data가 잘 들어가 있는 것을 확인 할 수 있다.
12. Eclipse의 DDMS > File Explorer에서 확인하면 다음과 같은 db 파일이 생성된 것을
확인 할 수 있다.
이상 안드로이드 환경에서 sqlite 사용법을 알아 보았다.
///////////////////////////////////////////////////////////////////////////////////////////////////////////
약간 복잡한 기초 데이터를 위해 초기 실행시 Create Table 도 하고 insert도 할 수 있겠지만, 별도의 db 파일을 만들어 관리하고 싶다면 아래와 같은 방법을 쓰는 것도 한가지 방법입니다
1. db 파일을 assets에 넣습니다
2. 아래 함수를 적당한 위치에 넣습니다
public static void initialize(Context ctx) {풀 코드가 아니라 크게 도움은 안되지만 컨셉을 이해하실 수 있을 것이라고 생각됩니다. ROOT_DIR은 아래와 같이 선언되어 있습니다. 경로는 자기 패키지 경로로 수정해주시면 됩니다.
// check
File folder = new File(ROOT_DIR + "databases");
folder.mkdirs();
File outfile = new File(ROOT_DIR + "databases/" + DATABASE_NAME);
if (outfile.length() <= 0) {
AssetManager assetManager = ctx.getResources().getAssets();
try {
InputStream is = assetManager.open(DATABASE_NAME, AssetManager.ACCESS_BUFFER);
long filesize = is.available();
byte [] tempdata = new byte[(int)filesize];
is.read(tempdata);
is.close();
outfile.createNewFile();
FileOutputStream fo = new FileOutputStream(outfile);
fo.write(tempdata);
fo.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static final String ROOT_DIR = "/data/data/com.sohon.test/";DATABASE_NAME 은 assets에 복사해놓은 파일명입니다 이 경우 lecture.db가 되겠네요. 저는 폴더를 따로 만들었습니다. 이를 위해 먼저 3,4번 라인에서 패키지 경로 밑에 database란 폴더를 생성합니다. mkdirs는 이미 폴더가 있으면 실패하게 됩니다. 5번 라인에서 파일을 읽어드립니다. 6번 라인과 같이 파일의 길이가 0보다 작다는 것은 파일이 없다는 의미라고 생각했습니다. 따라서 파일을 복사하는 그 아래 코드를 실행하게 됩니다. asset의 파일을 읽어오기 위해 7번 라인과 같이 assetManager를 이용해서 파일을 오픈합니다. 나머지 내용들은 자바이므로 생략합니다. 혹시 이해가 안되는 부분이나 더 나은 방법이 있다면 답글 주세요.
출처 : http://bunhere.tistory.com/153
////////////////////////////////////////////////////////////////////////////////////////////////
실제 단말기에서 App을 돌리면, 에뮬에서 작업한 db가 생성되지 않는다.
private void copydb(Activity act) { AssetManager am = act.getAssets(); File f = new File("/data/data/com.ludvan/databases/parking.db"); FileOutputStream fos = null; BufferedOutputStream bos = null; try { InputStream is = am.open("parking.db"); BufferedInputStream bis = new BufferedInputStream(is); // 만약에 파일이 있다면 지우고 다시 생성 if (f.exists()) { f.delete(); f.createNewFile(); } fos = new FileOutputStream(f); bos = new BufferedOutputStream(fos); int read = -1; byte[] buffer = new byte[1024]; while ((read = bis.read(buffer, 0, 1024)) != -1) { bos.write(buffer, 0, read); } bos.flush(); fos.close(); bos.close(); is.close(); bis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
//////////////////////////////////////////////////////////////////////////////////////////////////
기타 관련링크:
http://vulpecula.tistory.com/31
'스마트기기개발관련 > 안드로이드 개발' 카테고리의 다른 글
안드로이드 중간에 낀 레이아웃이 키보드와 붙어서 올라가는 효과 구조 설정해보기 (0) | 2012.04.19 |
---|---|
안드로이드 가상키보드 밀지않고 그대로 올라가기 (0) | 2012.04.13 |
안드로이드 리스트(또는 그룹리스트) 리스트 Add시 out of memory, 메모리릭 등 문제 관련 (0) | 2012.04.03 |
안드로이드 리스트 관련 컨트롤 (0) | 2012.03.28 |
안드로이드 AlertDialog 위치, 크기 조정 꾸미기 관련 (0) | 2012.03.28 |