본문 바로가기
프로그래밍/안드로이드

안드로이드 SQLite

by -현's- 2015. 4. 8.
반응형


●sqlite

- 안드로이드 로컬에서 사용하는 database이다. 


실제 스마트폰 단말기 내의 data/data/database경로에 파일이 만들어지게된다.

에뮬레이터를 실행하고 DDMS에 들어가면 파일 구조를 볼수 있다.(실제 핸드폰으로 연결하면 파일구조를 다 보지 못하도록 막혀있다.)


- 안드로이드 스마트폰은 보안상 접근을 허용하지 않는다. 따라서 개발자가 만일 sqlite 파일등을 스마트폰에 넣으려 할때, gui모드로 지원되는 DDMS는 사용할 수 없다.DDMS는 에뮬레이터에서만 의미가 있다. 안드로이드의 sqlite 관련 패키지에는 개발자가 데이터베이스 관리할 수 있는 여러 객체들을 지원해주므로, 실제 개발시엔 GUI모드로 하지말고 프로그래밍으로 처리한다.







●예제


DatabaseMain.java

package study.db;


import com.example.day0404.R;


import android.app.Activity;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.widget.TextView;


public class DatabaseMain extends Activity{

String a="";

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.test);

//데이터베이스 구축 전담 객체를 사용하여 sqlite db를 생성

MyOpenHelper helper = new MyOpenHelper(this);

TextView tb = (TextView)findViewById(R.id.a);

//생성자 호출만으로는 db구축이 안되고 있다.

//실제 db구축이 되는 시점은 SQLiteDatabase객체를 

//얻기위해 호출되는 메서드인 getReadableDatabase(), 

//getWritableDatabase()메서드를 호출하는 시점이다.

//실제 스마트폰 단말기 내의 data/data/database경로에 파일이 만들어지게된다.

SQLiteDatabase db = helper.getWritableDatabase();

db.execSQL("insert into member(name, money, etc) values ('apple', 10000, 'a');");

//데이터데이스의 데이터를 그대로 메모리상에 올려놓은 객체자 Cursor이다.

Cursor rs = db.rawQuery("select * from member;", null);

while(rs.moveToNext()){

System.out.println("데이터있음:"+rs.getString(0));

a = a+rs.getString(0);

}

tb.setText(a);

}

}

 



MyOpenHelper.java

package study.db;


import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

import android.util.Log;

import android.widget.Toast;


public class MyOpenHelper extends SQLiteOpenHelper{


Context context;

public MyOpenHelper(Context context) {

            //2번째 인자는 만들어지는 sqlite파일 이름이고 4번째 인자는 개발자가 만든 sqlite버전이다.

super(context, "data.sqlite", null, 1);

this.context = context;

}

//최초에 기존에 없었던 db가 새롭게 만들어질때 1번 호출

public void onCreate(SQLiteDatabase db) {

db.execSQL("CREATE TABLE member (name VARCHAR(20), money INTEGER, etc VARCHAR(50));");

}


//이미 배포했던 db에 변경이 있을경우 호출된다.

//주로 버전의 변경이 있을때 호출

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL("CREATE TABLE member (name VARCHAR(20), money INTEGER, etc VARCHAR(50));");

}

}

 



- test.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    

    <TextView android:id="@+id/a"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"/>


</LinearLayout>

 








반응형

댓글